带有 proxy_pass 和本地静态缓存的 Nginx 不会从代理位置提供图像

带有 proxy_pass 和本地静态缓存的 Nginx 不会从代理位置提供图像

早上好,先生们,

所以,我现在遇到的问题是我希望这个设置能够正常工作:

http://qwe1.com/

该请求应转到 Apache 并从静态内容文件夹中获取所有图像,此配置可以很好地工作。


http://qwe1.com/forum 

该请求应该代理到server2(proxy.qwe1.com),现在也能很好地运行。


http://qwe1.com/forum/example.jpg 

由于此请求与同一个论坛有关,因此也应代理到 server2,但由于静态缓存指令,此方法目前无法使用。它匹配静态缓存指令并尝试在磁盘本地查找图像,并在 static.error.log 中给出 404,您可以在下面看到。如果我注释掉静态缓存指令,我就会得到所需的设置,但我当然也希望运行该缓存。


我尝试通过重写来解决这个问题,到目前为止我已经尝试过这些解决方案

        location ~* ^(?P<part_uri>/forum/.*\.(css|js|jpg|jpeg|png|swf|gif|svg|ttf|eot))$ {
            proxy_pass      http://proxy.qwe1.com/forum_en$part_uri;
            proxy_redirect  off;
            proxy_set_header        Host $host;
            access_log /var/log/nginx/TMP.log;
            error_log /var/log/nginx/TMP.log;
    }

这个解决方案基本上转发了http://qwe1.com/forumhttp://qwe1.com/不知何故,我还没能真正弄清楚为什么,至少它不起作用。

我也尝试过这个解决方案

rewrite ^(/forum/*\.(css|js|jpg|jpeg|png|swf|gif|svg|ttf|eot))$ /forum_en/$1;

    location /forum_en  {
            proxy_pass      http://proxy.qwe1.com;
            proxy_redirect  off;
            proxy_set_header        Host $host;
            access_log /var/log/nginx/TMP.log;
            error_log /var/log/nginx/TMP.log;
    }

它给出了与之前相同的症状,我被重定向到http://qwe1.com/forumhttp://qwe1.com/

大家有什么想法吗?下面是整个配置。提前致谢。


## one.qwe1.com = server1
## proxy.qwe1.com = server2

server {
        listen 80;
        server_name one.qwe1.com;
        access_log /var/log/nginx/qwe1.com.access.log;
        error_log /var/log/nginx/qwe1.com.error.log;

        # proxy /forum to server2
        location /forum {
                proxy_pass      http://proxy.qwe1.com/forum_en/;
                proxy_redirect  off;
                proxy_set_header        Host $host;
                access_log /var/log/nginx/TMP.log;
                error_log /var/log/nginx/TMP.log;
        }

        # static content folders
        location ~ ^/(images|css|js|fonts) {
                root /var/www/qwe1.com/current/public;
                access_log /var/log/nginx/qwe1.com.static.access.log;
                error_log /var/log/nginx/qwe1.com.static.error.log;
        }
        # static content files
        location ~* \.(css|js|jpg|jpeg|png|swf|gif|svg|ttf|eot)$ {
                root /var/www/qwe1.com/current/public;
                access_log /var/log/nginx/qwe1.com.static.access.log;
                error_log /var/log/nginx/qwe1.com.static.error.log;
        }

        # proxy to apache
        location / {

                # proxy settings
                proxy_pass         http://127.0.0.1:8080;
                proxy_redirect     off;

                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

                client_max_body_size       10m;
                client_body_buffer_size    128k;

                proxy_connect_timeout      90;
                proxy_send_timeout         90;
                proxy_read_timeout         90;

                proxy_buffer_size          4k;
                proxy_buffers              4 32k;
                proxy_busy_buffers_size    64k;
                proxy_temp_file_write_size 64k;
        }
}

答案1

前几天也遇到过类似的问题:答案

概括:
正则表达式的优先级高于“普通”位置语句。
要更改此^~设置,请使用/论坛/位置如下:

location ^~ /forum/ {
    # proxy_pass to server2
}

答案2

我所做的是将图像和图像文件夹的位置提升到根 (/) 位置下,这样就可以正确排序,很容易修复。

相关内容