Назад | Перейти на главную страницу

Обслуживание некоторых js / html файлов с помощью php-fpm

У меня есть настройка 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;
}