无法从浏览器访问DigitalOcean服务器上的Node.js代理URL
问题:Node.js代理服务器本地curl正常但浏览器无法访问
环境配置
- DigitalOcean Droplet
- Cyberpanel
- Node.js v12.22.9
- PM2(进程管理工具)
代理服务器代码(app.js)
const express = require('express'); const request = require('request'); const cors = require('cors'); const app = express(); const PORT = 5000; app.use(cors()); app.get('/proxy', (req, res) => { const targetUrl = req.query.target; if (!targetUrl) { return res.status(400).send('Missing target URL'); } request(targetUrl, (error, response, body) => { if (error) { return res.status(500).send(error.message); } res.send(body); }); }); app.listen(PORT, '0.0.0.0', () => { console.log(`Proxy server is running on port ${PORT}`); });
当前运行状态
- 已通过PM2启动代理服务器,确认服务正常运行并监听5000端口
- 服务器本地执行
curl "http://myip:5000/proxy?target=http://example.com"可获取预期响应 - 浏览器无法访问该代理URL
排查与解决步骤
检查DigitalOcean防火墙规则
进入Droplet的防火墙设置页面,确认已添加5000端口TCP入站规则,允许所有IP访问。服务器系统防火墙放行端口
执行ufw status查看系统防火墙状态,若启用,添加端口放行规则:ufw allow 5000/tcp ufw reloadCyberpanel端口权限设置
登录Cyberpanel后台,在防火墙/安全模块中添加5000端口的入站允许规则,避免面板拦截非标准端口请求。确认公网访问地址
浏览器访问时使用Droplet的公网IP,格式为:http://[你的公网IP]:5000/proxy?target=http://example.com若使用域名,需确保域名正确解析到公网IP,且无DNS缓存干扰。
CORS配置优化(可选)
若默认跨域配置存在潜在问题,可显式指定允许的来源:app.use(cors({ origin: '*', // 或指定前端具体域名如'https://your-frontend.com' credentials: true }));修改后重启PM2服务:
pm2 restart app验证端口监听状态
执行以下命令确认5000端口被Node.js进程正确监听:netstat -tulpn | grep 5000
内容的提问来源于stack exchange,提问作者KUNAL GUPTA
相关产品推荐
相关产品推荐

