Ich habe ein Docker-Compose-Setup mit Nginx und WordPress. Ich habe eines der Tutorials im Internet befolgt und alles scheint gut zu funktionieren.
ABER ich habe ein wichtiges Plugin, das einige HTML/JS-Dateien direkt über PHP generiert. Das bedeutet, dass der HTML-Code <script>
ein Tag mit einem Pfad zu enthält /script.js
, das Plugin diesen bestimmten Namen abfängt und mit entsprechendem Inhalt antwortet. Hier sind keine URL-Rewrite-Module beteiligt, nur einige selbst geschriebene (d. h. vom Plugin).
Ich kann nicht herausfinden, wie ich Nginx so konfiguriere, dass das FPM-Docker-Image dieses serverseitig generierte JS bereitstellen kann.
Jetzt habe ich folgendes Setup:
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;
}
Wenn ich die Seite erneut anfordere, antworten Skript1 und Skript2 mit 404.
Ist dies generell realisierbar?
Antwort1
Die try_files
Anweisung stellt statische Dateien bereit, sofern diese vorhanden sind, und sendet die Anforderung andernfalls an /index.php
. Da die Dateien script1.js
und script2.js
nicht vorhanden sind, werden sie von verarbeitet /index.php
, was Sie auch möchten.
Die location ~ ^/(script1.js|script2.js)
und location ~* \.(css|js|gif|ico|jpeg|jpg|png)$
Blöcke unterbrechen diese Logik.
Eine Lösung besteht darin, den Block zu entfernen location ~ ^/(script1.js|script2.js)
(der einfach falsch ist) und eine try_files
Anweisung in den location ~* \.(css|js|gif|ico|jpeg|jpg|png)$
Block einzufügen.
Zum Beispiel:
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;
}