我已经开发了一个在端口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
预先感谢您:)