我正在努力实现的
Web应用程序应该能够支持多个子域,而不必在每次使用新子域时对nginx或tomcat进行任何更改。 (我已经对DNS进行了必要的更改以支持通配符子域名)
Nginx监听端口80.它在8080端口对tomcat执行proxy_pass。nginx应该能够支持多个子域。
我目前的设置是基于这个答案。 但是没有通过参数
Nginx的proxy_pass:是否可以添加一个静态参数的URL?
每个可能的子域
dynamic_subdomain_1.localhost
dynamic_subdomain_2.localhost
nginx设置
server { listen 80 default_server; server_name ~^(?<subdomain>.+)\.localhost$; location / { set $args ?$args&site=$subdomain; proxy_pass http://127.0.0.1:8080; } }
Nginx在调用Tomcat时应该附加子域作为参数。
对于每个子域的Tomcat调用应如下所示
http://127.0.0.1:8080?site=dynamic_subdomain_1 http://127.0.0.1:8080?site=dynamic_subdomain_2
我已经尝试了上述设置,但查询参数始终显示为空。
我应该改变nginx来使这成为可能吗?
答案比这个简单一点。 只要获取子域的子字符串,并将其用作proxy_pass的参数:
server { # this matches every subdomain of domain. server_name .domain; location / { set $new_request_uri ""; set $subdomain ""; if ($host ~* "^(.+)\.domain$") { set $subdomain $1; # lets assume there are args... set $new_request_uri "$request_uri&subdomain=$subdomain"; } # if there are no args add a question mark and the subdomain argument if ($args = '') { set $new_request_uri "$request_uri?subdomain=$subdomain"; } proxy_pass http://127.0.0.1:8080$new_request_uri; } }
我认为这个请求有或没有参数。 我认为它解决了你的问题。
阿尔弗雷多