NGINX-无法为重定向的.js文件设置缓存控制(使用别名+重写)

NGINX-无法为重定向的.js文件设置缓存控制(使用别名+重写)

我已经成功设置了一个使用别名 + 重写的 nginx 服务器,如以下配置所示。除了 javascript 文件没有强制浏览器缓存外,其他一切都正常。

  • 服务器网址:http://localhost/
  • 服务器根目录:/space1/www
  • 名为“builder”的别名,其根目录为:/space1/builder
  • /space1/builder/apps/luoicongtrinh/admin 中有一个名为“luoicongtrinh”的网络应用程序
  • 该应用程序的静态资源路径被重写,例如:http://localhost/builder/apps/luoicongtrinh/行政/js/main.js 将从以下位置提供:/space1/builder/apps/luoicongtrinh/民众/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;
}

我也尝试了各种配置但仍然没有成功。

请指导我如何正确设置。非常感谢!!!

更新: 我尝试使用“if”块并且有效。

# 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;
}

我读到过,使用“if”是“邪恶的”。您知道如何以其他方式制定上述“if”块吗?

答案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";
}

相关内容