Nginx:从 url 到子域的动态代理
Nginx: dynamic proxy from url to subdomain
我正在尝试编写一个 nginx conf 以根据 uri 将 url 动态重定向到一个 webapp。我使用 proxypass 指令。
例如,我想要重定向 http://www.example.com/clientname/ to http://clientname.internaldomain.local/webapp
到目前为止,我只成功更换了新主机,但uri已损坏,因为我无法拆分它。 (现在连主机都换不了,不知道为什么...)
这是我实际的非工作配置:
server {
resolver 192.168.137.71;
listen 80;
server_name tomservpa1;
location ~ (^\/(.*)\/) {
set $ccehost ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://$ccehost.internaldomain.local:9780/webapp/$new_request_uri;
proxy_redirect off;
proxy_set_header Host $host;
}
}
有人做过类似的事情吗?
谢谢。
您可以在 location
指令中使用命名捕获以避免范围和歧义问题。例如:
location ~ ^/(?<ccehost>[^/]+)/(?<new_request_uri>.*)$ {
rewrite ^ /webapp/$new_request_uri break;
...
proxy_pass http://$ccehost.internaldomain.local:9780;
...
}
这是方法:(在生产中设置)
location ~* ^/(?<ccehost>.*)/(.*) {
proxy_intercept_errors on;
proxy_cookie_path ~*^/.* /;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_pass http://$ccehost.app.ptf:8080/app/;
}
我正在尝试编写一个 nginx conf 以根据 uri 将 url 动态重定向到一个 webapp。我使用 proxypass 指令。 例如,我想要重定向 http://www.example.com/clientname/ to http://clientname.internaldomain.local/webapp
到目前为止,我只成功更换了新主机,但uri已损坏,因为我无法拆分它。 (现在连主机都换不了,不知道为什么...)
这是我实际的非工作配置:
server {
resolver 192.168.137.71;
listen 80;
server_name tomservpa1;
location ~ (^\/(.*)\/) {
set $ccehost ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://$ccehost.internaldomain.local:9780/webapp/$new_request_uri;
proxy_redirect off;
proxy_set_header Host $host;
}
}
有人做过类似的事情吗?
谢谢。
您可以在 location
指令中使用命名捕获以避免范围和歧义问题。例如:
location ~ ^/(?<ccehost>[^/]+)/(?<new_request_uri>.*)$ {
rewrite ^ /webapp/$new_request_uri break;
...
proxy_pass http://$ccehost.internaldomain.local:9780;
...
}
这是方法:(在生产中设置)
location ~* ^/(?<ccehost>.*)/(.*) {
proxy_intercept_errors on;
proxy_cookie_path ~*^/.* /;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_pass http://$ccehost.app.ptf:8080/app/;
}