#wordpress #docker #nginx #docker-compose
#wordpress #docker #nginx #docker-compose
Вопрос:
Следующая конфигурация правильно обслуживает экземпляр WordPress. (Некоторые несвязанные детали конфигурации опущены для краткости.)
docker-compose.yml
version: "3.7"
services:
nginx:
image: nginx:alpine
links:
- wordpress-1
volumes:
- wordpress-1_files:/var/www/html
wordpress-1:
image: wordpress:php7.3-fpm-alpine
volumes:
- wordpress-1_files:/var/www/html
volumes:
wordpress-1_files:
wordpress-1.conf
server {
server_name wordpress-1.com;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_pass wordpress-1:9000;
}
}
Тем не менее, я хотел бы смонтировать wordpress-1_files
том в подкаталог ( /var/www/html/wordpress-1
) в nginx
контейнере (чтобы я мог обслуживать несколько приложений с одного и того же прокси-сервера NGINX). Приведенная ниже конфигурация возвращает a 404
с a File not found.
в теле ответа. Этот результат возникает с любой из двух SCRIPT_FILENAME
строк wordpress-1.conf
, приведенных ниже.
docker-compose.yml
version: "3.7"
services:
nginx:
image: nginx:alpine
links:
- wordpress-1
volumes:
- wordpress-1_files:/var/www/html/wordpress-1
wordpress-1:
image: wordpress:php7.3-fpm-alpine
volumes:
- wordpress-1_files:/var/www/html
volumes:
wordpress-1_files:
wordpress-1.conf
server {
server_name wordpress-1.com;
root /var/www/html/wordpress-1;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
include fastcgi_params;
# fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /var/www/html/wordpress-1$fastcgi_script_name;
fastcgi_pass wordpress-1:9000;
}
}
Когда я проверяю NGINX error_log
debug
, я вижу это:
FastCGI отправлен в stderr: «Основной сценарий неизвестен» при чтении заголовка ответа из восходящего потока, клиент: 555.69.70.132, сервер: wordpress-1.com , запрос: «GET / HTTP/1.1», восходящий поток: «fastcgi: // 172.18.0.3:9000», хост: «wordpress-1.com «
Это наводит меня на мысль, что существует проблема с SCRIPT_FILENAME
, но /var/www/html$fastcgi_script_name
/var/www/html/wordpress-1$fastcgi_script_name
, похоже, ни то, ни другое не работает.
Вопрос:
Как я могу настроить свою вторую пару конфигурационных файлов, чтобы я мог обслуживать WordPress при монтировании тома WordPress в каталог, отличный от /var/www/html
nginx
контейнера?
Примечание: Приведенный выше пример представляет собой уменьшенный, минимальный пример проблемы, которую я пытаюсь решить. Фактический проект, над которым я работаю, находится здесь.
Ответ №1:
Тьфу, оказывается, мое тестирование было недостаточно тщательным (несмотря на то, что я занимался этим несколько выходных и так далее). Решение фактически использовало:
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
Это потому wordpress:php7.3-fpm-alpine
, что внутри изображения находится путь, по которому расположены файлы WordPress.
Во время тестирования я забыл отключить кэширование CloudFlare, которое находилось перед моим промежуточным сайтом. Итак, мои тесты не всегда проверяли то, что я думал…
Комментарии:
1. Нашли ли вы способ изменить местоположение установки WordPress по умолчанию (
/var/www/html/
) на что-то другое, тем самым избегая этой проблемы?2. Хм, не думаю, что я пытался. Я думаю, вы могли бы создать свой собственный образ Docker, который использует официальный образ WordPress в качестве основы, и переместить файлы в нужное место. Но я еще не пробовал этого делать.
3. Да, это действительно интересная идея … спасибо.