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_files
instrução servirá arquivos estáticos se existirem e, caso contrário, enviará a solicitação para /index.php
. Como os arquivos script1.js
e script2.js
nã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_files
instruçã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;
}