我有一個包含 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.js
和script2.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;
}