Назад | Перейти на главную страницу

Как одновременно использовать Nginx Gzip, Cache и SSL?

В настоящее время я использую Nginx с NodeJs, и я пытаюсь отредактировать файл nginx.conf, чтобы разрешить кеширование.

С моей текущей настройкой ниже у меня работают SSL и GZIP, но как я могу добавить кеширование? Я получаю ошибку 404. Мои файлы имеют следующую структуру: / root / Poplive / Dec5 / public

В публичном доступе у меня есть файл (main-built.js) и папки (/ javascripts | / css), это файлы и папки, которые я пытаюсь кэшировать.

Что пробовал ....

1) Я поместил указанную ниже директиву внутри location / {} в свой nginx.conf ниже

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/;

     }

    }
}

Ваше регулярное выражение неверно. Я не знаю, что именно вы хотите, но могу подтвердить, что это неверно.

location ~* /.*\.(/javascripts|main-built.js)$ {

Вот что в этом плохого.

  • Если вы хотите / персонаж, вы должны избежать его, используя \. так это похоже \/
  • Когда ты написал \.(MoreRulesHere), это означало, что вам нужны такие файлы, как .main-built.js. Но ведь вы же не собираетесь так называть свои файлы?
  • Положив $ в конце вы заявили, что /javascripts должен быть финал. То есть это запрос папки.

Я считаю, что вы хотели написать (при условии, что я не могу точно сказать о ваших намерениях).

location ~* \/(javascripts\/.*|main-built.js)$ {

Это все в javascripts папка и файл с именем main-built.js. Потому что нет ^ символ в начале, это не означает, что он должен начинаться с указанного выше. Итак, он будет соответствовать таким вещам, как /something/else/here/javascripts/foo также.