NGINX - Невозможно установить Cache-control для перенаправленных файлов .js (с псевдонимом + перезапись)

Я успешно настроил сервер nginx, который использует как псевдоним, так и перезапись, как в конфигурации ниже. Все работает, за исключением того, что файлы javascript не принудительно кэшируются браузером.

  • URL-адрес сервера: http: // localhost /
  • Корневой каталог сервера: / space1 / www
  • Псевдоним «builder» с его корневым каталогом: / space1 / builder
  • Есть веб-приложение luoicongtrinh в: / space1 / builder / apps / luoicongtrinh / admin
  • Пути статических ресурсов этого приложения переписываются, например: http: // localhost / builder / apps / luoicongtrinh / admin /js/main.js будет обслуживаться из местоположения: /space1/builder/apps/luoicongtrinh/[11127899 visiblepublic/js/main.js
  • Я хотел бы настроить управление кешем для этого файла, но все еще неудачно

Текущий рабочая конфигурация (без управления кешем)

server {
    listen       80;

    server_name  localhost;
    root /space1/www;
    index  index.html index.htm index.php;

    access_log /var/log/nginx/access.log debug;

    location / {
        server_tokens off;
        client_max_body_size 20m;
        client_body_buffer_size 128k;
    }

    location ~ /\. {
        access_log off;
        log_not_found off;
        deny all;
    }

    # builder
    location /builder {
        alias /space1/builder;

        # luoicongtrinh
        rewrite ^/builder/apps/luoicongtrinh/(css|images|js|fonts|lib|uploads)/(.+)$ /builder/apps/luoicongtrinh/public/$1/$2 last;
        rewrite ^/builder/apps/luoicongtrinh/admin/(css|images|js|fonts|lib|uploads)/(.+)$ /builder/apps/luoicongtrinh/public/$1/$2 last;
        rewrite ^/builder/apps/luoicongtrinh/admin/?(.*)$ /builder/apps/luoicongtrinh/admin/index.php?p=$1&$args last;

        fastcgi_split_path_info ^/builder/(.+\.php)(.*)$;
        include /etc/nginx/php_fastcgi;
    }

    # Default PHP support
    include /etc/nginx/php_fastcgi;
}

Я пытаюсь добавить следующий блок для принудительного кеширования в браузере статических файлов (например: http: //localhost/builder/apps/luoicongtrinh/admin/js/main.js) но это не работает.

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
    try_files $uri =404;
}

Я также пробовал различные конфигурации, но все равно безуспешно.

Подскажите, пожалуйста, как правильно это настроить. Большое спасибо !!!

ОБНОВЛЕНИЕ: Я пробовал использовать блок «если», и это работает.

# builder
location /builder {
    alias /space1/builder;

    # cache control for static resources
    if ($uri ~* "/(css|images|js|fonts|lib|uploads)/") {
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public";
    }

    # luoicongtrinh
    rewrite ^/builder/apps/luoicongtrinh/(css|images|js|fonts|lib|uploads)/(.+)$ /builder/apps/luoicongtrinh/public/$1/$2 last;
    rewrite ^/builder/apps/luoicongtrinh/admin/(css|images|js|fonts|lib|uploads)/(.+)$ /builder/apps/luoicongtrinh/public/$1/$2 last;
    rewrite ^/builder/apps/luoicongtrinh/admin/?(.*)$ /builder/apps/luoicongtrinh/admin/index.php?p=$1&$args last;

    fastcgi_split_path_info ^/builder/(.+\.php)(.*)$;
    include /etc/nginx/php_fastcgi;
}

Я читал, что использование «если» - это «зло». Вы знаете, как сформулировать вышеуказанный блок «если» по-другому?

0
задан 28 March 2016 в 10:23
1 ответ

add_header является частью стороннего модуля под названием «headers more», вам нужно либо собрать nginx из исходного кода, либо убедиться, что ваш репозиторий уже сделал это за вас.

Чтобы собрать nginx из исходников , прочтите этот учебник, который я написал - это довольно быстро и легко.

Способ проверить, работает ли модуль, - запустить

nginx -V

Добавить, посмотреть, есть ли это в выходных данных

--add-module=../headers-more-nginx-module-0.29

Другой способ - добавить простой add_header в основной блок местоположения. add_header - тоже хороший инструмент для отладки.

Для справки, вот как я делаю сборку Nginx. Обратите внимание, что в приведенном выше руководстве есть более оптимизированная версия команды configure, но эта более совместима и, вероятно, более безопасна

cd /home/ec2-user
mkdir nginx-build
cd nginx-build
service nginx stop
yum groupinstall "Development Tools"
yum install pcre-devel zlib-devel openssl-devel
wget http://nginx.org/download/nginx-1.9.11.tar.gz
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
wget https://github.com/openresty/headers-more-nginx-module/archive/v0.29.tar.gz
tar -xzf nginx-1.9.11.tar.gz
tar -xzf ngx_cache_purge-2.3.tar.gz
tar -xzf v0.29.tar.gz # headers-more
# Note that I have no idea what the next line does but it was in the official guide
PS_NGX_EXTRA_FLAGS="--with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc"
# Safe option, slower, lots of modules included
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --add-module=/tmp/ngx_cache_purge-2.3 --add-module=/tmp/headers-more-nginx-module-0.29 --with-http_realip_module --add-modeule=../ngx_pagespeed-release-1.9.32.10-beta
make && make install
make clean  (NB: optional)
service nginx start

. Затем попробуйте этот вид блока для кэширования статических ресурсов. Обратите внимание, что там нет файлов try_files.

location ~*  \.(jpg|jpeg|png|gif|css|js|ico)$ {
  log_not_found off; access_log off;
  add_header Cache-Control "public, max-age=691200, s-maxage=691200";
  more_clear_headers "Pragma"; more_clear_headers "Expires";
}
0
ответ дан 24 November 2019 в 06:55

Теги

Похожие вопросы