現在、Webアプリケーションを構築しています。適切に動作するために、このルールを書きました。
location / {
if (!-e $request_filename) {
expires 168h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
rewrite ^(.*)$ /libraries/render.php;
}
}
このような存在しないファイルを含むURLに対しては機能します:http://test.test/test
が存在しないイメージに対しては機能しません:http://test.test/test.png
画像に影響を与える可能性のある2番目のルールがあります。
location ~* \.(?:gif|jpe?g|png|ico)$ {
expires 168h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
しかし、書き換えルールがトリガーされるのをどのように防ぐかはわかりません。 render.php
に転送されないのは、このルールのすべての拡張機能です
このルールを(コメントアウトして)削除すると、.png
を除くすべての拡張機能が機能します。これは非常に奇妙です。
これは私の全体の構成です:
server {
rewrite_log on;
# IPv4
listen 80;
listen 443 ssl;
# IPv6
# listen [::]:80 ipv6only=on;
# listen [::]:443 ssl ipv6only=on;
server_name test.test;
# SSL
ssl_certificate /etc/ssl/private/ssl-bundle.test.test.crt;
ssl_certificate_key /etc/ssl/private/test.test.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/test;
index index.php index.html index.htm;
try_files $uri $uri/ $uri/index.php $uri/index.html $uri/index.htm =404;
disable_symlinks off;
location / {
if (!-e $request_filename) {
expires 168h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
rewrite ^(.*)$ /libraries/render.php;
}
}
location = /config.inc.php {
internal;
}
location /cache/ {
internal;
}
location /libraries/ {
internal;
}
location /images/ {
internal;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location ~ /\.sh {
deny all;
}
location ~* \.html$ {
expires -1;
}
location ~* \.(?:gif|jpe?g|png|ico)$ {
expires 168h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
# Rewrites
rewrite ^(?<filename>.+\.(?<type>css|js))$ /compress.php?file=$filename&type=$type;
}
そのため、試行錯誤を繰り返した結果、満足のいくものではない実用的なソリューションを思い付きました。しかし、少なくともそれは動作します。
すべての「実際の」画像は/includes/
またはサブディレクトリにあるため、単純に画像のルールを書き直しました。
したがって、この
location ~* \.(?:gif|jpe?g|png|ico)$ {
expires 168h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
これになっています
location ~* ^/includes/.+\.(?:gif|jpe?g|png|ico)$ {
expires 168h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}