У меня есть настройка docker-compose с nginx и wordpress. Я следил за одним из руководств в Интернете, и, похоже, все работает нормально.
НО у меня есть один важный плагин, который генерирует пару файлов html / js напрямую через PHP. Значение HTML-код содержит <script>
тег с путем к /script.js
, плагин улавливает это конкретное имя и отвечает соответствующим содержанием. Здесь не используются модули для перезаписи URL, только некоторые самописные (т.е. из плагина)
Я не могу понять, как настроить 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.
Можно ли вообще этого добиться?
В 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;
}