NGINX:是否可以将“位置”配置块分成多个块,甚至分成文件?

NGINX:是否可以将“位置”配置块分成多个块,甚至分成文件?

更新:有趣..那些对我的问题投反对票的人,您也可以留下评论说明为什么您投反对票吗?我相信我的问题比许多其他没有收到反对票的问题要好得多。


更新:我并不是想使用该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 配置就在那个外部文件中

相关内容