我在配置 Nginx 以正确服务 AngularJS 应用程序时遇到了一些问题。服务器配置如下:
www.example.com we have the landing page of the application
www.example.com/app we have the application itself
应用程序的路径如下:
/usr/share/nginx/html/example.com/app/
静态文件如下:
/usr/share/nginx/html/example.com/app/public/app/assets
现在我想将登陆页面和应用程序中的所有 html 文件的缓存设置为“无缓存”,但将所有 js、css 和图像文件的缓存设置为 60 天。
这是我当前的 nginx 服务器配置:
server {
listen 80;
index index.html;
server_name example.com www.example.com;
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 60d;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location ^~ /app {
alias /usr/share/nginx/html/example.com/app/public/;
expires -1;
add_header Pragma "no-cache";
}
location / {
root /usr/share/nginx/html/example.com;
expires -1;
add_header Pragma "no-cache";
add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
}
}
现在的问题是位置指令:
location ~* \.(?:ico|css|js|gif|jpe?g|png)$
从未执行,因此缓存被设置为无缓存,如 /app 指令中所定义。
任何想法?
谢谢
答案1
引用自 nginx 文档:
如果最长匹配的前缀位置有“^~”修饰符,则不检查正则表达式。
所以,这里的问题在于你的location ^~ /app
定义。^
修饰符使 nginx 忽略图像的正则表达式。
您应该使用location /app
。此处不需要正则表达式匹配,简单的前缀匹配就足够了。
答案2
我猜问题出在“~*”上,试试用“~”。例如:
location ~ \.(?:ico|css|js|gif|jpe?g|png)$