Nginx反向代理来自单个域的多个位置

时间:2017-10-19 23:48:50

标签: nginx proxy reverse-proxy varnish

我试图找出如何根据位置将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终止。

欢迎来自社区的任何建议,谢谢!

0 个答案:

没有答案