Найти в Дзене
Wissance

Запускаем Wordpress на виртуалке под управлением Nginx

Оглавление

В чем заключается наша задача

Возможно, со мной многие не согласятся, но мы все недолюбливаем CMS, т.к. они тяжелые, неповоротливые и медленные, но иногда они помогают ускорить разработку. Недавно у нас возникла задача запустить сайт Wordpress (далее по тексту WP) развернутым за обратным прокси Nginx, конечно, тут не про любовь любим мы CMS или нет, есть задача и ее нужно решить.

Сегодня я бы хотел поделиться нюансами о том, как это было сделано, т.е. как мы запустили Wordpress-сайт на виртуальной машине с Nginx (хотя сам WP заточен под работу с Apache). Схема сетевого взаимодействия у нас получается следующей:

Решение нашей задачи

Здесь мы опустим процедуру конфигурирования БД, т.к. считаем, что пользователь и база созданы/восстановлены из бэкапов. Перейдем к нюансам, которые необходимо учесть при запуске сайта на WP.

1. Конфигурируем Nginx

Экспериментально методом проб и ошибок был получен следующий рабочий конфиг nginx:

```
server {
listen 8000;
server_name mysite.com;
root /opt/webapps/mysite/v2/public;
index index.php;
gzip on;
gzip_static on;
client_max_body_size 30M;
# added with WP
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
location ~ /\. {
deny all; # запрет для скрытых файлов
}
#location ~* /(?:uploads|files)/.*\.php$ {
# deny all; # запрет для загруженных скриптов
#}
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off;
log_not_found off;
expires max; # кеширование статики
}
location / {
try_files $uri $uri/ /index.php?$args; # permalinks
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_read_timeout 300;
fastcgi_param HTTPS 'on'; # I tested by adding this line to check
}
# LOGGING
access_log /var/log/nginx/mysite.com.access.log;
error_log /var/log/nginx/mysite.com.error.log;
}
```
WP-сайт работает за двойным обратным прокси nginx
WP-сайт работает за двойным обратным прокси nginx

Наиболее важными являются настройка php (особенно эта - fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;) и также root - директория корень WP-проекта (в ней находится файл с настройками wp-config.php). Также немаловажной, но некритичной для запуска является настройка, позволяющая настроить прием файлов client_max_body_size 30M;, например в формах обратной связи и т.п. Кроме настройки размера в конфиге nginx потребуется настройка параметров и в php.ini (/etc/php/{version}/fpm/php.ini)

2. Права и владелец папки с контентом WP

Экспериментально (документацию-то лень читать) я обнаружил, что к папке с контентом (куда указывает root в конфиге) также предъявляются 2 требования:

1. Владельцем должен быть пользователь www-data и группа www-data, используем для этого chown:

sudo chown -R www-data:www-data /opt/webapps/mysite/v2/public

права на эту директорию и все файлы и директории, что внутри нее должны иметь маску прав 744:

sudo chmod -R 744 /opt/webapps/mysite/v2/public

Заключение

В целом пункты 1 и 2 это все нюансы настройки WP на Nginx, не очень-то сложно если знать. Удачной настройки!