Я успешно настроил сервер nginx, который использует как псевдоним, так и перезапись, как в конфигурации ниже. Все работает, за исключением того, что файлы javascript не принудительно кэшируются браузером.
Текущий рабочая конфигурация (без управления кешем)
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;
}
Я читал, что использование «если» - это «зло». Вы знаете, как сформулировать вышеуказанный блок «если» по-другому?
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";
}