Nginx
通過 php-fpm 提供一些 js/html 文件
我有一個具有 nginx 和 wordpress 的 docker-compose 設置。我遵循了網路上的一個教程,一切似乎都很好。
但是我有一個關鍵外掛,它直接通過 PHP 生成幾個 html/js 文件。意思是 HTML 程式碼包含
<script>
帶有路徑的標籤/script.js
,外掛擷取該特定名稱並以適當的內容響應。這裡不涉及 url-rewrite 模組,只有一些自寫(即來自外掛)我不知道如何配置 nginx 以允許 fpm docker image 為伺服器端生成的 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 響應。
這通常可以實現嗎?
如果靜態文件存在,該
try_files
語句將提供靜態文件,否則將請求發送到/index.php
. 因為script1.js
和script2.js
文件不存在,所以它們由 處理/index.php
,這就是你想要的。
location ~ ^/(script1.js|script2.js)
andlocation ~* \.(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; }