Nginx在一台服务器下的多个端口

时间:2018-01-30 19:47:53

标签: nginx

我有:

  • Nginx在公共IP上运行:123.456.78.910

  • 运行在localhost:8081

  • 上的Node.js app 1
  • 运行Node.js app 2:localhost:8082

两个Node.js应用都使用websockets。

我希望如此:

  • 123.456.78.910显示了一些通用的index.html文件

  • 123.456.78.910/projecta转到localhost:8081

  • 123.456.78.910/projectb转到localhost:8082

我不确定我是否只需要location <PATH> {}或服务器块/虚拟主机,https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04或别名。

server {
        listen 80;

        root /var/www/html;

        location /projecta {
                rewrite ^/projecta(.*) /$1 break;
                proxy_pass http://127.0.0.1:8081;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }

        location /projectb {
                rewrite ^/projectb(.*) /$1 break;
                proxy_pass http://127.0.0.1:8082;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
}

1 个答案:

答案 0 :(得分:0)

location块只能存在于server或其他location内,因此您无需删除server

假设您想要提供一些静态上下文,则需要再添加一个location块:

location / {
    root   /var/www/html; # better to move from 'server' as it's not used in any other 'location'
    index  index.html;
}

至于rewrite ^/projecta(.*) /$1 break; - 它只是从URI中删除/projecta子字符串。即如果您向123.456.78.910/projecta发送请求,nginx会将此请求代理到http://127.0.0.1:8081

这是添加该行的目的吗?如果是这样,我建议您不要使用rewrite,而是将结尾斜杠添加到proxy_pass中指定的地址:

proxy_pass http://127.0.0.1:8081/;

否则,使用此rewrite指令,您可能会看到可能不需要的行为:如果您向123.456.78.910/projecta/whatever发送请求,nginx会将此请求代理到http://127.0.0.1:8081/whatever