这是我的 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;
}
您可以根据需要定义要包含的任意多个文件,并将它们包含在任何地方。请注意递归。