Bereitstellen einiger JS/HTML-Dateien durch php-fpm

Bereitstellen einiger JS/HTML-Dateien durch php-fpm

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_filesAnweisung stellt statische Dateien bereit, sofern diese vorhanden sind, und sendet die Anforderung andernfalls an /index.php. Da die Dateien script1.jsund script2.jsnicht 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_filesAnweisung 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;
}

verwandte Informationen