Sirviendo algunos archivos js/html por php-fpm

Sirviendo algunos archivos js/html por php-fpm

Tengo una configuración de Docker-Compose con nginx y wordpress. Seguí uno de los tutoriales en la web y todo parece funcionar bien.

PERO tengo un complemento crítico que genera un par de archivos html/js directamente a través de PHP. Lo que significa que el código HTML contiene <script>una etiqueta con la ruta a /script.js, el complemento captura ese nombre en particular y responde con el contenido apropiado. Aquí no hay módulos de reescritura de URL involucrados, solo algunos autoescritos (es decir, desde el complemento)

No puedo entender cómo configurar nginx para permitir que la imagen acoplable de fpm sirva ese js generado en el lado del servidor.

Ahora tengo la siguiente configuración:

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;
}

Una vez que vuelvo a solicitar la página, script1 y script2 responden con 404.

¿Es esto posible lograrlo en general?

Respuesta1

La try_filesdeclaración servirá archivos estáticos si existen y, de lo contrario, enviará la solicitud a /index.php. Debido a que los archivos script1.jsy script2.jsno existen, son manejados por /index.php, que es lo que desea.

Los location ~ ^/(script1.js|script2.js)bloques location ~* \.(css|js|gif|ico|jpeg|jpg|png)$y rompen esta lógica.

Una solución es eliminar el location ~ ^/(script1.js|script2.js)bloque (lo cual es simplemente incorrecto) y colocar una try_filesdeclaración en el location ~* \.(css|js|gif|ico|jpeg|jpg|png)$bloque.

Por ejemplo:

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;
}

información relacionada