php-fpm でいくつかの js/html ファイルを提供する

php-fpm でいくつかの js/html ファイルを提供する

私は、nginx と wordpress を含む docker-compose をセットアップしました。Web 上のチュートリアルの 1 つに従いましたが、すべて正常に動作しているようです。

しかし、PHP 経由で直接いくつかの html/js ファイルを生成する重要なプラグインが 1 つあります。つまり、HTML コードに<script>は へのパスを持つタグが含まれており/script.js、プラグインはその特定の名前をキャッチして適切なコンテンツで応答します。ここでは URL 書き換えモジュールは使用されず、一部は自分で作成したもの (つまり、プラグインからのもの) のみです。

fpm docker イメージがサーバー側で生成された js を提供できるように nginx を構成する方法がわかりません。

現在、次の設定になっています。

location / {
  try_files   $uri $uri/ /index.php?$query_string;
}
location ~* \.php$ {
  fastcgi_pass wordpress:9000;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location ~ ^/(script1.js|script2.js) {
  fastcgi_pass wordpress:9000;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location ~* \.(css|js|gif|ico|jpeg|jpg|png)$ {
  expires max;
  log_not_found off;
}

ページを再度リクエストすると、script1 と script2 は 404 で応答します。

これは一般的に達成可能でしょうか?

答え1

ステートメントtry_filesは、静的ファイルが存在する場合はそれを提供し、そうでない場合はリクエストを に送信します/index.phpscript1.jsおよびscript2.jsファイルは存在しないため、これらは によって処理されます/index.php。これが必要な動作です。

およびブロックlocation ~ ^/(script1.js|script2.js)location ~* \.(css|js|gif|ico|jpeg|jpg|png)$このロジックを破壊します。

1 つの解決策は、location ~ ^/(script1.js|script2.js)ブロックを削除し (これは間違っています)、ブロックtry_files内にステートメントを配置することですlocation ~* \.(css|js|gif|ico|jpeg|jpg|png)$

例えば:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
location ~* \.php$ {
    ...
}
location ~* \.(css|js|gif|ico|jpeg|jpg|png)$ {
    try_files $uri /index.php?$query_string;
    expires max;
    log_not_found off;
}

関連情報