我有一个服务器,其中有两个使用 Node http-server 运行的两个单页应用程序(使用框架):
website1 running on port 80: IP_ADDRESS:80
website2 running on port 8080: IP_ADDRESS:8080
当前工作流程正在使用这两个命令来部署两个站点
pm2 start /usr/bin/http-server -f --name website1 -- -p 80 -d false
pm2 start /usr/bin/http-server -f --name website2 -- -p 8080 -d false
最后,我们的网站在如下域上运行:
subdomain.mysite.com for website1
subdomain.mysite.com:8080 for website2.
这不是我们想要的,我们想要这样:
subdomain.mysite.com for website1
subdomain2.mysite.com for website2
我尝试安装 nginx,并使用以下反向代理配置:
server {
listen 80;
server_name subdomain2.mysite.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
希望现在,如果我输入 subdomain2.mysite.com,它会将我带到端口 8080 上的 website2,但事实并非如此,它会将我带到端口 80 上的 website1。事实上,我无法确定这个反向代理是否正常工作。
我确定我配置错误,可能是什么问题?
p/s:我还想知道我是否完全错了 - 如果我使用 nginx 进行反向代理,我应该停止直接使用 http-server 吗?
最佳答案
Node 和 Nginx 不能同时监听端口 80。如果您想反向代理,则需要为第一个 Node 应用程序使用不同的端口,并为其添加另一个虚拟主机到您的 nginx 文件中。
例如,将第一个应用程序的端口更改为 8000 如下所示:
pm2 start /usr/bin/http-server -f --name website1 -- -p 8000 -d false
pm2 start /usr/bin/http-server -f --name website2 -- -p 8080 -d false
使用以下 Nginx 配置:
server {
listen 80;
server_name subdomain2.mysite.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 80;
server_name subdomain1.mysite.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
您可能还想向每个 block 添加 proxy_redirect off;
标志。
关于node.js - 当 Node http-server 运行时,Nginx 反向代理似乎无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38320278/