У меня есть настройка docker-compose с nginx и wordpress. Я следовал одному из руководств в Интернете, и все, кажется, работает нормально.
НО у меня есть один критический плагин, который генерирует пару файлов html/js напрямую через PHP. То есть HTML-код содержит <script>
тег с путем к /script.js
, плагин ловит это конкретное имя и отвечает соответствующим контентом. Здесь не задействованы модули url-rewrite, только некоторые самописные (т.е. из плагина)
Я не могу понять, как настроить nginx, чтобы образ fpm docker мог обслуживать сгенерированный на стороне сервера js.
Теперь у меня следующая настройка:
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;
}
После повторного запроса страницы script1 и script2 возвращают ответ 404.
Возможно ли это вообще осуществить?
решение1
Оператор try_files
будет обслуживать статические файлы, если они существуют, а в противном случае отправит запрос в /index.php
. Поскольку файлы script1.js
и script2.js
не существуют, они обрабатываются /index.php
, что вам и нужно.
Блоки location ~ ^/(script1.js|script2.js)
и location ~* \.(css|js|gif|ico|jpeg|jpg|png)$
ломают эту логику.
Одним из решений является удаление location ~ ^/(script1.js|script2.js)
блока (что просто неправильно) и помещение try_files
в location ~* \.(css|js|gif|ico|jpeg|jpg|png)$
него утверждения.
Например:
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;
}