![Nginx优化后图片显示问题](https://linux22.com/image/729452/Nginx%E4%BC%98%E5%8C%96%E5%90%8E%E5%9B%BE%E7%89%87%E6%98%BE%E7%A4%BA%E9%97%AE%E9%A2%98.png)
我使用 gtmetrix 进行了一些优化,以提高网站性能。例如启用 gzip 压缩等。
当我尝试使用 browserling.com 等在线服务测试网站时,图像没有显示。
当我尝试从服务器连接时。例如 192.168.1.xx,它工作正常。
/etc/nginx/nginx.conf 的相关部分如下:
##
# Gzip Settings
##
gzip on;
gzip_vary on;
gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
并且在 /etc/nginx/sites-enabled/programlama.tk 中我添加了这部分。
location ~* \.(jpg|jpeg|png|gif|ico)$ {
expires 365d;
}
location ~* \.(css|js)$ {
expires 30d;
}
location ~* \.(pdf)$ {
expires 30d;
}
更新 :
我怀疑问题出在位置过期部分的服务器块中。
server {
server_name programlama.tk;
location /static {
limit_except GET HEAD POST {
deny all;
}
include yasaklananlar.conf;
# alias
}
location / {
limit_except GET HEAD POST {
deny all;
}
include yasaklananlar.conf;
include proxy_params;
# proxy_pass
}
location ~* \.(jpg|jpeg|png|gif|ico)$ {
expires 365d;
}
location ~* \.(css|js)$ {
expires 30d;
}
location ~* \.(pdf)$ {
expires 30d;
}
# server settings
}
如果我删除服务器块中的位置过期部分并重新启动 Nginx 服务器,它就可以正常显示图像。
答案1
Nginx 选择一个位置来处理请求。
因此当正则表达式 location
被添加来expires
在扩展上设置值,它会破坏您的location /static {...}
和location / {...}
配置。
除了使用location
来设置之外expires
,您还可以使用 来map
代替。请参阅这个文件了解详情。
例如:
map $request_uri $expires {
default off;
~*\.(jpg|jpeg|png|gif|ico)(\?|$) 365d;
~*\.(css|js|pdf)(\?|$) 30d;
}
server {
...
expires $expires;
location /static { ... }
location / { ... }
...
}