node.js - 当 Node http-server 运行时,Nginx 反向代理似乎无法工作

标签 node.js nginx httpserver

我有一个服务器,其中有两个使用 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/

相关文章:

node.js - CORS 预检请求后 302 重定向到 nodejs 服务器

flash - 用于浏览器和 Flash 的 Node.js 和套接字

docker - 如何让加密 flask 应用程序在 docker 和 gunicorn 上作为网络服务器运行..?

django - 使用 Nginx 作为代理服务器,使用 django 作为后端时如何正确处理重定向响应

node.js - 当远程而非本地时,Socket.io 回退到 nginx 代理后面的轮询(websocket 给出 400)

java - 在 android 中运行 http 服务器代理?

node.js - Node http-server 即使在关闭后仍保留端口 8080

node.js - 如何使用 Node 将 Geonames 1.5Gib 文件正确插入到 Postgresql 中?

javascript - 如何关闭文件夹的 fs.watch 监听器

http - 如何在 Erlang Web 服务器中处理非常大的文件上传?