Servindo alguns arquivos js/html por php-fpm

Servindo alguns arquivos js/html por php-fpm

Eu tenho uma configuração do docker-compose com nginx e wordpress. Segui um dos tutoriais da web e tudo parece funcionar bem.

MAS eu tenho um plugin crítico que gera alguns arquivos html/js diretamente via PHP. Significa que o código HTML contém <script>uma tag com caminho para /script.js, o plugin captura esse nome específico e responde com o conteúdo apropriado. Nenhum módulo de reescrita de URL envolvido aqui, apenas alguns escritos por você mesmo (ou seja, do plugin)

Não consigo descobrir como configurar o nginx para permitir que a imagem do docker fpm sirva aquele js gerado no lado do servidor.

Agora tenho a seguinte configuração:

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

Depois de solicitar novamente a página, script1 e script2 respondem com 404.

Isso é possível de ser alcançado em geral?

Responder1

A try_filesinstrução servirá arquivos estáticos se existirem e, caso contrário, enviará a solicitação para /index.php. Como os arquivos script1.jse script2.jsnão existem, eles são manipulados por /index.php, que é o que você deseja.

Os location ~ ^/(script1.js|script2.js)blocos location ~* \.(css|js|gif|ico|jpeg|jpg|png)$e quebram essa lógica.

Uma solução é remover o location ~ ^/(script1.js|script2.js)bloco (o que está errado) e colocar uma try_filesinstrução no location ~* \.(css|js|gif|ico|jpeg|jpg|png)$bloco.

Por exemplo:

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

informação relacionada