Обслуживание предварительно сжатых файлов Angular dist через Nginx

#angular #nginx

#angular #nginx

Вопрос:

Я сжимаю все файлы в dist папке и пытаюсь обслуживать gzip файлы через Nginx.

Ниже приведена моя конфигурация nginx:

 server {
        listen 80 default_server;
        server_name _;

        root  /PATH_TO_DIST_FOLDER/;
        index  index.html index.htm index.html.gz;
        include /etc/nginx/mime.types;

        gzip_static on;
        gzip_proxied any;
        gzip_vary on;
        gunzip on;
        gzip_types text/html text/plain text/css application/json application/javascript text/xml applicat$

        location / {
                expires 1y;
                access_log off;
                add_header Cache-Control "max-age=31556952, public";
                add_header  Content-Encoding  gzip;

                try_files $uri  $uri/ /index.html.gz;
        }
}
  

Проблема:

Сначала он правильно загружает архивированный index.html файл.

И index.html будет загружаться ресурсы main.js , такие как polyfills.js , styles.css , и т.д.

Но запрос на получение main.js index.html снова возвращает содержимое.

У меня есть только gzip файлы в каталоге dist.

Я думаю try_files , что не находит соответствующий gzip файл.

Не могли бы вы кто-нибудь помочь мне, как я могу решить эту проблему?

Обновить

Если я обновлю конфигурацию, как показано ниже:

 server {
        listen 80 default_server;
        server_name _;

        root  /PATH_TO_DIST_FOLDER/;
        index  index.html index.htm index.html.gz;
        include /etc/nginx/mime.types;

        location / {
                expires 1y;
                access_log off;
                add_header Cache-Control "max-age=31556952, public";

                gzip_static always;
                gzip_proxied any;

                try_files $uri  $uri/ /index.html.gz;
        }
}
  

Он просто загружает gzip файл index.html .

Комментарии:

1. try_files не gzip_static знает, поэтому $uri не ищет $uri.gz версию файла. Поскольку у вас нет обеих версий файла, присутствующих на диске, вы можете попробовать: try_files $uri $uri.gz $uri/ /index.html.gz;

2. я тоже пробовал это, но не сработало..

3. У меня есть еще одно предложение, попробуйте заменить try_files оператор на if (!-e $request_filename.gz) { rewrite ^ /index.html last; } (я намеренно удалил .gz from index.html )

4. Хорошо, я попробую это

5. не могли бы вы проверить мой обновленный вопрос?