在执行到Tomcat的proxy_pass时,Nginx如何将Subdomain作为参数添加

我正在努力实现的
Web应用程序应该能够支持多个子域,而不必在每次使用新子域时对nginxtomcat进行任何更改。 (我已经对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; } } 

我认为这个请求有或没有参数。 我认为它解决了你的问题。

阿尔弗雷多