小编shr*_*keh的帖子

如何使多个位置块使用相同的名称@location

我正在尝试创建一个几乎没有重复的nginx conf文件.我使用nginx来提供静态文件,它将404s或php内容代理到命名位置@varnish:

location @varnish {
    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;
    proxy_pass_header Set-Cookie;
    proxy_pass http://localhost:6081;
    proxy_set_header Request-URI $request_uri;
}
Run Code Online (Sandbox Code Playgroud)

对于"标准"情况,nginx应检查它是否有文件,然后传递到后端,以下工作正常:

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    access_log        off;
    add_header      Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    expires           max;
    open_file_cache_valid 120m;
    try_files $uri @varnish;
}
Run Code Online (Sandbox Code Playgroud)

但是,对于PHP,我甚至不希望它尝试该文件,它应该立即将请求重定向到@varnish:

location ~ \.php$ {
    rewrite . @varnish last;
}
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用.有两个独立的近似相同的块(一个用于@backend,一个用于php)同样引用相同的代理似乎是一种痛苦,并且是人类可以忘记将某些东西放在一个而不是另一个中的问题.

php nginx

9
推荐指数
1
解决办法
5724
查看次数

标签 统计

nginx ×1

php ×1