nginx 反向 nodejs 应用程序与上下文

nginx 反向 nodejs 应用程序与上下文

我最近设置了一个 Ubuntu 服务器 (18.04) 来内部托管几个 nodejs 应用程序。这些应用程序都驻留在我主域的子域 ( v1.example.comv2.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

相关内容