![如何同时使用 Nginx Gzip、Cache 和 SSL?](https://linux22.com/image/626029/%E5%A6%82%E4%BD%95%E5%90%8C%E6%97%B6%E4%BD%BF%E7%94%A8%20Nginx%20Gzip%E3%80%81Cache%20%E5%92%8C%20SSL%EF%BC%9F.png)
我目前正在使用带有 NodeJs 的 Nginx,并且我正在尝试编辑我的 nginx.conf 文件以允许缓存。
使用下面的当前设置,SSL 和 GZIP 可以正常工作,但如何添加缓存?我收到错误 404。我的文件具有以下结构:/root/Poplive/Dec5/public
在公共场合我有一个文件(main-built.js)和文件夹(/javascripts|/css),这些是我尝试缓存的文件和文件夹。
我尝试过....
1)我将下面的指令放在我的 nginx.conf 中的 location / {} 内
location ~* /.*\.(/javascripts|main-built.js)$ {
expires 24h;
}
结果,没有缓存,但 GZIP 有效
Nginx.conf 如下
events { worker_connections 1024; }
http {
upstream myapp {
server 127.0.0.1:3100;
}
#Add Gzip
sendfile on;
keepalive_timeout 2;
tcp_nodelay on;
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 5;
gzip_proxied any;
gzip_types text/plain text/css application/json json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
server {
root /Poplive/Dec5/public;
ssl_certificate /root/Poplive/Dec5/server.crt;
ssl_certificate_key /root/Poplive/Dec5/server.key;
listen 80;
listen 443 ssl;
if ($ssl_protocol = "") {
rewrite ^ https://$host$request_uri? permanent;
}
server_name poplive.co;
location / {
location ~* /.*\.(/javascripts|main-built.js)$ {
expires 24h;
}
proxy_set_header X-FORWARDED-PROTO https;
proxy_pass http://myapp/;
}
}
}
答案1
你的正则表达式不正确。我不知道你到底想要什么,但我仍然可以确认它是错误的。
location ~* /.*\.(/javascripts|main-built.js)$ {
问题就在这里。
- 如果你想要
/
字符,你应该使用\
. 来转义它,所以它看起来像\/
- 当您写 时
\.(MoreRulesHere)
,这意味着您想要这样的文件.main-built.js
。但您不会这样命名文件,对吗? - 通过放在
$
最后,您表示这/javascripts
应该是结尾。也就是说,这是文件夹的请求。
我相信您的意思是写的(假设因为我不能准确地说出您的意图)。
location ~* \/(javascripts\/.*|main-built.js)$ {
这就是javascripts
文件夹中的所有内容以及一个名为 的文件。由于开头main-built.js
没有字符,因此上面没有说明需要以 开头。因此,它也会匹配类似 的内容。^
/something/else/here/javascripts/foo