Nginx将流量重定向到微服务

时间:2019-08-29 14:04:02

标签: nginx nginx-location

我已经开发了一个在端口5000上运行的Web应用程序;并且我已经编写了一个nginx配置以将所有流量重定向到端口80。我想集成另一个在端口4200上运行的Web应用程序,但前提是我在application.example.com/passwordreset上收到请求。

我在现有的nginx代码中添加了一个位置块,重定向仅显示4200上托管的应用程序的标头,而不显示页面。

如果我为其中一个应用程序编写了nginx配置,那么我将获得所需的输出,但同时集成这两个应用程序时却没有。

通过docker swarm来管理整个基础架构,并以 webapplication password_service 作为服务名称。

我尝试了这个答案,因为这是最接近我当前要求的答案,但是这个答案也没有用。

How to design Nginx location for microservice?

nginx网站将此广告宣传为nginx plus的工作,但是定价页面上没有具体提及微服务,我想确定。

https://www.nginx.com/blog/building-a-web-frontend-with-microservices-and-nginx-plus/

我基于本指南中的位置逻辑,因为这正是我希望应用程序正常工作的方式。

https://www.linode.com/docs/web-servers/nginx/how-to-configure-nginx/#location-blocks

upstream web {
        server webapplication:5000;
    }
upstream forgot_password {
        server password_service:4200;
    }
server {
       listen 80;
       server_name application.example.com;
       client_max_body_size 2M;
       location /passwordreset {
                        proxy_pass http://forgot_password;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
       }
       location / {
                        proxy_pass http://web;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
       }
       location ^~ /styles/assets {
                        proxy_pass http://web;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
                        add_header Cache-Control public;
                        client_max_body_size 2M;
                        expires 7d;
        }
       location ~* \.(js|css|html)$ {
                        proxy_pass http://web;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
                        add_header Cache-Control public;
                        client_max_body_size 2M;
                        expires 1d;
       }
}

期望的结果是

application.example.com 重定向到托管在5000上的Web应用程序

同时

application.example.com/passwordreset 重定向到4200上托管的Web应用程序。

从标准的nginx可以做到吗?如果上述方法不可行,我能否获得可以实现的最接近解决方案的信息,唯一的要求是两个页面都必须使用域 application.example.com

预先感谢您:)

0 个答案:

没有答案