我试图找出如何根据位置将Nginx设置为从单个域到多个后端站点的反向代理。
Nginx配置:
server {
listen 80;
underscores_in_headers on;
server_name test.example.com;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-javascript text/xml text/css application/javascript;
gzip_vary on;
gzip_proxied any;
proxy_http_version 1.1;
location /page1/ {
proxy_pass http://www.siteone.com/pageone;
proxy_set_header Host www.siteone.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /page2/ {
proxy_pass http://www.sitetwo.com/pagetwo;
proxy_set_header Host www.sitetwo.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
问题是静态文件(图像,css等)都被破坏了。初始请求返回正常,但后续GET请求都转到代理子域(例如:test.example.com/css/style.css),并返回404或500错误。
我尝试使用静态文件位置或全部捕获(例如,"位置/"或"位置〜* ^(。*)。(css | js) | etc ..)"),但我无法为这两个代理网站做到这一点。作为一种解决方法,我还尝试捕获引用URL并基于此设置catch-all的proxy_pass,但它并不适用于所有内容,并且似乎很容易出现故障。
我知道这不是一个常见的设置,但不幸的是,对于我们的用例,我们无法使用更常见的子域和方法。每个代理请求的服务器块。我们的要求是根据路径代理两个或多个后端的单个子域(例如,test.example.com/this-path - > backend.domain.com/can-be-anything)。
我们正在使用此代理作为缓存服务器,因此如果它更好地支持用例,我也可以使用Varnish + Nginx进行SSL终止。
欢迎来自社区的任何建议,谢谢!