更新:有趣..那些对我的问题投反对票的人,您也可以留下评论说明为什么您投反对票吗?我相信我的问题比许多其他没有收到反对票的问题要好得多。
更新:我并不是想使用该include
指令。
Stack Exchange 上的许多问题都是关于如何将通用location
配置提取到共享位置,例如这。
但我试图实现相反的目标:是否可以将一个位置的配置拆分为多个文件?
在我的项目中,Nginx 服务器的默认配置/
位于/etc/nginx/conf.d/default.conf
:
# Block A
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
... ...
现在我想将标题添加Cache-Control no-cache
到位置。我知道我可以通过简单地添加使块看起来像这样来/
实现:add_header Cache-Control no-cache always;
# Block B
... (same as above)
location / {
root /usr/share/nginx/html;
index index.html index.htm;
add_header Cache-Control no-cache always;
}
... ...
我想知道是否可以将location /
配置分成两个文件。例如,保持电流/etc/nginx/conf.d/default.conf
不变(如图所示区块A),我可以添加另一个文件吗,比如,/etc/nginx/conf.d/cache-control.conf
内容:
# Block C
server {
listen 80;
listen [::]:80;
location / {
add_header Cache-Control no-cache always;
}
然后在运行时 Nginx 可以将两个配置块合并为一个location
块,如下所示B座?
我在实验中没有成功实现这一点。通过阅读[1]和[2],我认为这无法实现因为 Nginx 将所有的location
块都视为单独的配置块,一旦某个块与请求 URL 匹配,则使用该块来处理请求,并跳过其他块。虽然 [2] 讨论了可能导致位置重定向的四种情况,但这四种情况均未发生在此处的配置中。
但我还是怀疑这是否真的无法在Nginx中实现,或者是我对Nginx的了解不够深入。
参考:
答案1
不,但您可以使用 include 关键字来包含共享代码块。我不确定这是否是您想要做的,您的问题对我来说有点不清楚。
以下是我使用的一些代码
server {
server_name example.com;
listen 443 ssl http2;
root /var/www;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
include snippets/tls-config.conf;
(etc)
那么 TLS 配置就在那个外部文件中