gpt4 book ai didi

php - 如何让多个位置 block 使用相同的命名@location

转载 作者:可可西里 更新时间:2023-10-31 23:10:10 25 4
gpt4 key购买 nike

我正在尝试创建一个几乎没有重复的 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;
}

对于 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;
}

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

location ~ \.php$ {
rewrite . @varnish last;
}

但是,这似乎不起作用。两个独立的几乎完全相同的 block (一个用于@backend,一个用于 php)都引用同一个代理似乎是一件痛苦的事情,这是一种人类可能忘记将某些东西放在一个而不是另一个中的问题。

最佳答案

如果您将代理设置放入服务器上下文中并让位置继承它们,那么复制的内容就不多了。您还可以设置一个上游 block ,以便在需要时更轻松地更改代理目标:

upstream _varnish {
server localhost:6081;
}

server {
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_set_header Request-URI $request_uri;
proxy_pass_header Set-Cookie;

location @varnish {
proxy_pass http://_varnish;
}

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;
}

location ~ \.php$ {
proxy_pass http://_varnish;
}
}

关于php - 如何让多个位置 block 使用相同的命名@location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11031274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com