我有:
Nginx在公共IP上运行:123.456.78.910
运行在localhost:8081
运行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";
}
}
答案 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
。