nginx反向代理服务器端口问题

本文介绍如何正确配置Nginx作为反向代理服务器,并特别关注当监听端口非默认80端口时的注意事项及解决方法。

nginx可以很方便的配置成反向代理服务器

server {

listen 80;

server_name bothlog.com;

location / {

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_pass http://127.0.0.1:9380;

}

}

但是如果nginx的监听端口不是默认的80端口,改为其他端口如81端口。

后端服务器中request.getServerPort()无法获得正确的端口,返回的仍然是80;

在response.sendRedirect()时,客户端可能无法获得正确的重定向url。

正确的配置方法为

在 $host之后加上端口号,如$host:81

server {

listen 81;

server_name bothlog.com;

location / {

proxy_set_header Host $host:81;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_pass http://127.0.0.1:9380;

}

}


from: http://blog.youkuaiyun.com/winstear/article/details/6284017

Node.js 代码无法持续运行通常与程序的设计、运行环境配置以及资源管理有关。以下是一些常见原因及其对应的解决方案: ### 原因一:程序执行完成后自动退出 Node.js 是一个基于事件驱动和非阻塞 I/O 的运行时环境,如果主函数或所有异步操作完成且没有其他任务等待执行,进程将自动退出[^2]。例如,以下代码会在打印 `Hello World` 后立即退出: ```javascript console.log("Hello World"); ``` **解决方案**:确保程序中存在持续监听的事件循环。例如,可以使用 `http.createServer()` 创建 Web 服务器,或者使用 `setInterval()` 持续执行某些任务: ```javascript const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n'); }); server.listen(3000, () => { console.log('Server running at http://localhost:3000/'); }); ``` ### 原因二:未正确处理异步任务 如果 Node.js 程序依赖异步操作(如数据库连接、定时任务、网络请求等),但这些操作未能正确启动或被意外中断,可能导致程序提前结束。 **解决方案**:确保所有异步任务都正确绑定回调或使用 Promise 链进行处理。例如: ```javascript setTimeout(() => { console.log("This will run after 5 seconds"); }, 5000); ``` ### 原因三:进程崩溃或异常终止 Node.js 应用可能由于未捕获的异常、内存溢出、第三方模块错误等原因导致进程崩溃。这类问题通常不会留下明显的提示。 **解决方案**: - 使用 `process.on('uncaughtException')` 和 `process.on('unhandledRejection')` 捕获未处理的异常: ```javascript process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); process.exit(1); // 可选择退出或重启 }); process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); }); ``` - 使用进程管理工具(如 PM2)来监控并自动重启崩溃的应用: ```bash npm install pm2 -g pm2 start app.js --watch ``` ### 原因四:开发环境配置问题 在某些情况下,VSCode 或终端无法识别 Node.js 运行时路径,导致脚本无法正常运行或调试功能失效[^1]。 **解决方案**: - 确保 Node.js 已正确安装并通过命令 `node -v` 和 `npm -v` 验证。 - 在 VSCode 中检查默认解释器路径是否正确:`Ctrl+Shift+P` → 输入 "Select Interpreter"。 - 更新 VSCode 的 JavaScript 和 TypeScript 插件以支持最新语法和智能提示。 ### 原因五:资源限制或系统权限问题 Node.js 应用可能因访问受限资源(如端口占用、文件权限不足)而无法持续运行。 **解决方案**: - 检查目标端口是否被占用,可使用 `lsof -i :<port>`(macOS/Linux)或 `netstat`(Windows)查看。 - 若涉及文件读写,确认当前用户具有相应目录的读写权限。 - 使用管理员权限运行程序(如通过 `sudo` 或右键“以管理员身份运行”)。 ### 原因六:容器化部署问题 若使用 Docker 容器运行 Node.js 应用,容器可能因主进程退出或未正确配置而停止[^4]。 **解决方案**: - 确保容器内主进程保持运行状态,例如使用 `CMD ["node", "app.js"]` 而不是仅执行一次脚本。 - 在 Dockerfile 中添加健康检查机制,确保容器持续运行: ```dockerfile HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:3000 || exit 1 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值