将 nginx 配置为 node.js 的反向代理有啥问题?
Posted
技术标签:
【中文标题】将 nginx 配置为 node.js 的反向代理有啥问题?【英文标题】:what's wrong with this configuration for nginx as reverse proxy for node.js?将 nginx 配置为 node.js 的反向代理有什么问题? 【发布时间】:2011-08-28 12:55:10 【问题描述】:我有一个在 VPS 上运行的个人域。我想将 nginx 设置为 node.js 应用程序的反向代理,但它不起作用。谁能看看我的配置并告诉我我做错了什么?
假设我的域名是 example.com。基本上,我想这样当我访问 node.example.com 时,它会代理 node.js 应用程序。我还在 nginx 中设置了 blog.example.com 和 www.example.com。
这是我的反向代理的 nginx 配置(blog.example.com,www.example.com 设置被省略):
服务器 听 80; server_name node.example.com; access_log /srv/www/example.com/logs/node-access.log; 错误日志/srv/www/example.com/logs/node-error.log; 地点 / proxy_pass http://example.com:3000/; 代理重定向关闭; proxy_set_header 主机 $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k;这是我的 node.js 应用程序:
var http = require('http'); http.createServer(function (req, res) res.writeHead(200, 'Content-Type': 'text/plain'); res.end('Hello World\n'); ).listen(3000, "example.com");我重新启动了 nginx 服务器并运行了 node.js 应用程序。但是如果我去 node.example.com,它会说“node.example.com 不存在或不可用。”
我不确定我的配置有什么问题。我也尝试了各种组合。
这些是我尝试过的配置:
nginx 中的 proxy_pass | node.js 应用程序中的主机名 http:// 本地主机:3000/ | ---.listen(3000,“本地主机”) http://127.0.0.1:3000/ | ---.listen(3000, "127.0.0.1") http://node.example.com:3000/ | ---.listen(3000, "node.example.com")我也尝试了以下 nginx 配置:
上游节点应用 服务器 127.0.0.1:3000; 服务器 ... 地点 / proxy_pass http://nodeapp; ... ...而且它也不起作用。我究竟做错了什么?我在网上搜索了几个小时并尝试了各种方法,但它们似乎都不起作用。
如果有人可以帮助我,我将不胜感激。
谢谢!
【问题讨论】:
该错误消息听起来更像是 dns 问题,而不是 nginx/node 问题。如果您使用 ip 地址而不是 node.example.com 是否有效? 我也尝试过使用 IP 地址,但也没有用。 @kolbyjack,实际上你是对的。我错误地配置了 DNS。现在它正在工作 =) 谢谢! @BrianPark 我认为.listen
方法的第二个参数是什么搞砸了。在那里您需要指定要监听的接口(主机名)。我建议您不要传递该参数。只需.listen(3000)
,默认情况下第二个参数将是0.0.0.0
,这也可以。
【参考方案1】:
在 nginx 配置 (proxy_pass) 中,您必须删除 (http://) 和 (您的主机名) 之间的 URL 中的空格:
你写道:
proxy_pass http:// nodeapp;
你必须写:
proxy_pass @987654321@;
我尝试在我的服务器上添加空间 http:// .. 然后重新启动 nginx 但 nginx 失败了! 所以,我认为这可能是你的 nginx 问题! 尝试删除此空间,我希望与您合作!
祝你好运!
【讨论】:
我在http://nodeapp中放空间的原因;是因为 *** 抱怨我的问题帖子中有太多链接(可能是垃圾邮件)。在我的实际配置中,我将其设置为nodeapp;而不是 http://nodeapp.【参考方案2】:NodeJS 代码 .listen(3000, "example.com");
在主机头中等待 example.com,因此请尝试更改
proxy_set_header Host $host;
到新的
proxy_set_header Host example.com;
【讨论】:
【参考方案3】:如果你想在 node.example.com 上运行你的 node.js 应用程序,那么在代理配置中你需要在 127.0.0.1:3000 或 localhost:3000 上定义节点,而不是 example.com:3000
如果您需要以 3000 作为端口在 example.com 上运行,那么最初您还需要为端口 80 定义 nginx 规则。默认情况下,域映射到端口 80 和 443。其余您可以在 node.js 启动文件中更改配置。
【讨论】:
以上是关于将 nginx 配置为 node.js 的反向代理有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
Nginx 反向代理 Serving Node.js app 静态文件