如何同时使用 Nginx Gzip、Cache 和 SSL?

如何同时使用 Nginx Gzip、Cache 和 SSL?

我目前正在使用带有 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

相关内容