Nginx

NGINX - 無法為重定向的 .js 文件設置記憶體控制(使用別名 + 重寫)

  • March 28, 2016

我已經成功設置了一個同時使用別名 + 重寫的 nginx 伺服器,如下面的配置所示。除了 javascript 文件不是強制的瀏覽器記憶體之外,一切正常。

  • 伺服器網址:http://localhost/
  • 伺服器根目錄:/space1/www
  • 一個名為“builder”的別名,其根目錄為:/space1/builder
  • 在 /space1/builder/apps/luoicongtrinh/admin 中有一個名為“luoicongtrinh”的網路應用程序
  • 此應用的靜態資源路徑被重寫,例如: http://localhost/builder/apps/luoicongtrinh/ admin /js/main.js 將從以下位置提供服務: /space1/builder/apps/luoicongtrinh/ public /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”塊嗎?

add_header 是名為“headers more”的第三方模組的一部分,您要麼需要從原始碼建構 nginx,要麼確保您的儲存庫已經為您完成了它。

要從原始碼建構 nginx,請閱讀我編寫的本教程 - 它非常快速和簡單。

檢查模組是否工作的方法是執行

nginx -V

添加看看這是否在輸出中

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

另一種方法是將簡單的 add_header 添加到主位置塊。add_header 也是一個很好的調試工具。

作為參考,這是我如何進行 Nginx 建構的。請注意,在上面的教程中有一個更優化的配置命令版本,但是這個更兼容並且可能更安全

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

引用自:https://serverfault.com/questions/766355