将 Nginx 缓存过期指令添加到默认配置中是否合理且安全?

将 Nginx 缓存过期指令添加到默认配置中是否合理且安全?

这是我的 Nginx默认conf(sites-available/default),我将其用作所有应用程序的基础conf:

server {
    # listen, root, index, server_name, locations;
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;
    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

每个应用程序还具有单独的 Nginx 配置(sites-available/${domain}.con):

server {
    root ${drt}/${domain}/;
    server_name ${domain} www.${domain};
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff|pdf)$ { expires 365d; }
}

这里有一个小重复:如果我在该服务器上有 10 个应用程序,我会得到*10缓存过期指令的重复行:

location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff|pdf)$ { expires 365d; }

而不是有十个location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff|pdf)$ { expires 365d; }条目,删除所有这些条目并在默认配置中只保留一行是否合乎逻辑/安全?这些都是个人应用程序,我个人认为给它们所有相同的缓存指令没有问题,我只是想减少冗余。

答案1

那是行不通的,除非明确转发给另一个服务器块,否则请求将由单个服务器块提供服务。

实现此目的的方法是使用包含。例如

# File site-a.conf
server {
  root /var/www/site1;
  server_name sub1.example.com;

  include /etc/nginx/fragments/jpeg-expires.conf;
}

# File site-b.conf
server {
  root /var/www/site2;
  server_name sub2.example.com;

  include /etc/nginx/fragments/jpeg-expires.conf;
}

# file /etc/nginx/fragments/jpeg-expires.conf
location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff|pdf)$ {
  expires 365d; 
}

您可以根据需要定义要包含的任意多个文件,并将它们包含在任何地方。请注意递归。

相关内容