我试图编写一个nginx conf来根据uri动态地将网址重定向到webapp。我使用proxypass指令。 例如,我想将http://www.example.com/clientname/重定向到http://clientname.internaldomain.local/webapp
到目前为止,我只是成功替换了新主机,但是uri被打破了,因为我无法拆分它。 (现在我甚至无法取代主持人,不知道为什么......)
这是我实际的非工作混淆:
server {
resolver 192.168.137.71;
listen 80;
server_name tomservpa1;
location ~ (^\/(.*)\/) {
set $ccehost $2;
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;
}
}
有人已经做过类似的事吗?
感谢。
答案 0 :(得分:0)
您可以在location
指令中使用命名捕获,避免范围和歧义问题。例如:
location ~ ^/(?<ccehost>[^/]+)/(?<new_request_uri>.*)$ {
rewrite ^ /webapp/$new_request_uri break;
...
proxy_pass http://$ccehost.internaldomain.local:9780;
...
}
答案 1 :(得分:0)
这是做到这一点的方法:(在生产中设置)
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/$2;
}