私はnginxの経験があまりないので、vhostの設定で少し迷っています。基本的に私のアプリは、phpスクリプトを介していくつかの画像を提供する場合、これはApacheで非常に簡単です。物理的な画像を探します->見つからない場合は、リクエスト文字列をparamsとしてindex.phpにすべてをプッシュします。いいえ、私はこのアプリをnginxで実行しようとしていますが、スクリプトを介して提供される画像以外はすべて機能します(404が表示されるだけです)。これがnginxの私のvhostです:
server {
listen 80;
server_name ~^(www\.)?(?<sname>.+?).subdomain.domain.com$;
root /var/www/$sname/current/public;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) {
add_header Cache-Control public;
add_header Cache-Control must-revalidate;
expires 7d;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
include fastcgi_params;
fastcgi_index index.php;
}
location ~ /\.ht {
deny all;
}
}
物理的な場所で画像を探しているだけのようです。これは実際の物理的な画像では機能しますが、スクリプトで提供される動的な画像では機能しません。ヘルプやガイダンスは大歓迎です。
更新:わかりましたので、キャッシュ制御の場所から.jpgを削除すると機能しますが、それらの動的画像要求にキャッシュヘッダーを設定したいので、php経由で実行してキャッシュを設定するにはどうすればよいですかその後のヘッダー?
次のlocation
ブロックを画像に使用できます。
location ~* \.(jpg|jpeg|gif|png|bmp)$ {
try_files $uri $uri/ /index.php$is_args$args;
add_header Cache-Control public;
add_header Cache-Control must-revalidate;
expires 7d;
}
最初の質問では必要なパラメーターが明確に示されていないため、スクリプトの正しいパラメーターを取得するには、/index.php?$is_args$args
行のtry_files
部分を変更する必要がある場合があります。
次に、残りのキャッシュオプションについて、次のlocation
ブロックを使用します。
location ~* \.(ico|pdf|flv|swf|exe|html|htm|txt|css|js)$ {
add_header Cache-Control public;
add_header Cache-Control must-revalidate;
expires 7d;
}
また、$
を正規表現一致文字列に追加して、拡張子で終了するリクエストのみがそのブロックで処理されるようにしました。たとえば、初期構成では、URL https://example.com/path/image.jpg75783
は、キャッシュディレクティブを指定するlocation
ブロックによって処理されます。
別の方法は、画像キャッシュヘッダーをPHPスクリプトに設定することです。
すべてのURIにヘッダーと有効期限を追加するには、server
ブロックにステートメントを配置する必要があります。その場合、それらはすべてのロケーションブロックに継承されます。例えば:
server {
...
add_header Cache-Control public;
add_header Cache-Control must-revalidate;
expires 7d;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
...
}
location ~ /\.ht {
deny all;
}
}