透過 php-fpm 提供一些 js/html 文件

透過 php-fpm 提供一些 js/html 文件

我有一個包含 nginx 和 wordpress 的 docker-compose 設定。我按照網路上的一個教學進行操作,一切似乎都運作良好。

但我有一個關鍵的插件,它可以直接透過 PHP 產生幾個 html/js 檔案。這意味著 HTML 程式碼包含<script>帶有 路徑的標籤/script.js,外掛程式會捕獲該特定名稱並以適當的內容進行回應。這裡不涉及 url-rewrite 模組,只有一些自己寫的模組(即來自插件)

我不知道如何配置 nginx 以允許 fpm docker 映像為伺服器端產生的 js 提供服務。

現在我有以下設定:

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.php.因為script1.jsscript2.js文件不存在,所以它們由 處理/index.php,這正是您想要的。

location ~ ^/(script1.js|script2.js)location ~* \.(css|js|gif|ico|jpeg|jpg|png)$打破了這個邏輯。

一種解決方案是刪除該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;
}

相關內容