我最近设置了一个 Ubuntu 服务器 (18.04) 来内部托管几个 nodejs 应用程序。这些应用程序都驻留在我主域的子域 ( v1.example.com
、v2.example.com
) 上,但位于不同的端口上。这些应用程序由 express 提供(因为它们也充当 API)。
我想要做的是基于子域将我的流量重定向到确定的 NodeJS 应用程序(带有上下文)。这是我当前的 nginx 配置:
server {
listen 80;
listen [::]:80;
server_name v1.example.com www.v1.example.com;
location / {
proxy_pass http://localhost:3000/v1;
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;
listen [::]:80;
server_name v2.example.com www.v2.example.com;
location / {
proxy_pass http://localhost:3001/v2;
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;
listen [::]:80;
server_name v1.example.com www.v1.example.com;
location /v1 {
proxy_pass http://localhost:3000/v1;
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;
}
}
但是,用户需要访问v1.example.com/v1
。
我真正想要的是无需修改 URL 即可访问v1.example.com
我的节点应用程序并获得其服务。这可能吗?http://localhost:3000/v1
答案1
如果你改变的话这应该有效
location /v1 {
到:
location / {
但留下:
proxy_pass http://localhost:3000/v1;
事实就是如此。
根据您希望其他 URL 在后端显示的样子,您可能需要一个与浏览器中的路径匹配的正则表达式,并将其附加到代理的 localhost 请求的路径上。这里已经有一个关于如何做到这一点的问题:https://unix.stackexchange.com/questions/199599/nginx-location-regex-with-proxypass