我的问题是如何让Nginx将域名(www.example.com)转发到没有ssl的同一台服务器上的流星应用程序。
以下是详细信息: 我试图使用Nginx在我自己的服务器上托管由meteor制作的应用程序。我检查了大量我在网上发现的不同配置文件(其中大部分都已过时)但我似乎无法让Nginx将我的域名转发到流量可以选择的端口3000它并处理网页。
Nginx代理端口的最新配置是:
upstream default {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://default/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
我已将其略微修改为我认为对我的设置正确的内容。我在Nginx中使用默认配置文件,并使用" meteor create html在/ usr / share / nginx / html中创建了一个流星应用程序。"
我知道使用默认设置的坏习惯,但我只是试图让流星应用程序首先运行。
我应该安装所有依赖项:meteor,nodejs,mongodb和nginx。
我发现很多最新的nginx配置都使用了我不打算使用的SSL。我不确定如何根据我的需要修改它们。
有人可以解释为什么这个配置无法正常工作或我错过了什么让Nginx指向我的meteor应用程序www.example.com:3000?
提前致谢。
P.S。
我已经能够使用完全相同的配置文件使用VM进行相同的设置。我不知道我错过了哪一步。
答案 0 :(得分:2)
问题是 proxy_pass 指令中的尾随反斜杠。它应该是proxy_pass http://default;
。感谢anatoly指出了这一点。
更新: Nginx documentation有点困惑,但强调了使用/不使用URI的proxy_pass之间的区别:
请求URI按如下方式传递给服务器:
如果使用URI指定了proxy_pass指令,那么当a。时 请求被传递给服务器,这是规范化请求URI的一部分 匹配该位置将替换为指令中指定的URI:
location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
如果指定了proxy_pass而没有URI,则传递请求URI 服务器的格式与客户端在原始时发送的格式相同 处理请求,或传递完整的规范化请求URI 处理更改的URI时:
location /some/path/ {
proxy_pass http://127.0.0.1;
}