我要实现 的目标Web应用程序应该能够支持多个子域,而不必每次使用新的子域时都对nginx或tomcat进行任何更改。(我已经对DNS进行了必要的更改,以支持通配符子域)
Nginx侦听端口80。它在端口8080上执行tomcat的proxy_pass。nginx应该能够支持多个子域。
我当前的设置基于此答案。 但是它没有传递参数
Nginxproxy_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
我已经尝试了上述设置,但是查询参数始终显示为null。
我应该在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; } }
我考虑了带或不带参数的请求。我认为这可以解决您的问题。