Для пример выполню установку WordPress с Nginx в опереационной системе Ubuntu Server 18.04.
Переключимся на root пользователя:
sudo -i
Установим nginx, php-fpm и прочие необходимые компоненты:
apt install nginx php-curl php-gd php-xml php-xmlrpc php-intl php-mbstring php-soap php-zip php-mysql php-fpm php-json php7.2-opcache php7.2-mbst
Установим сервер баз данных:
apt install mysql-server mysql-client
Подключимся к серверу баз данных:
mysql -u root -p
Создадим базу данных и пользователя:
CREATE DATABASE ixnfo;
CREATE USER test@localhost IDENTIFIED BY 'test';
GRANT ALL PRIVILEGES ON ixnfo.* TO test@localhost;
FLUSH PRIVILEGES;
exit
Скачаем архив с последней версией WordPress с официального сайта, распакуем его, создадим файл конфигурации и откроем его в текстовом редакторе (например nano):
cd ~
wget https://ru.wordpress.org/latest-ru_RU.zip
unzip latest-ru_RU.zip
cd ~/wordpress
cp wp-config-sample.php wp-config.php
nano wp-config.php
Укажем параметры для подключения к базе данных:
define('DB_NAME', 'ixnfo');
define('DB_USER', 'test');
define('DB_PASSWORD', 'test');
define('DB_HOST', 'localhost');
Также по ссылке https://api.wordpress.org/secret-key/1.1/salt/ сгенерируем уникальные ключи и укажем их в файле конфигурации.
Переместим WordPress в директорию веб сервера и укажем права и владельца от которого работает веб сервер (Nginx в Ubuntu по умолчанию работает от пользователя www-data):
sudo mv ~/wordpress/ /var/www/test
cd /var/www/test/
mkdir wp-content/uploads
sudo chown -R www-data:www-data /var/www/test/
Создадим файл конфигурации для нового сайта:
sudo nano /etc/nginx/sites-available/test
Приведу пример содержимого:
server {
listen 80;
#listen [::]:80;
root /var/www/test;
index index.php index.html index.htm;
access_log /var/log/nginx/test_access.log;
error_log /var/log/nginx/test_error.log;
server_name test.ixnfo.com;
gzip on;
gzip_comp_level 4;
gzip_disable "msie6";
gzip_types
application/atom+xml
application/javascript
application/json
application/ld+json
application/manifest+json
application/rss+xml
application/vnd.geo+json
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/bmp
image/svg+xml
image/x-icon
text/cache-manifest
text/css
text/plain
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
location ~ /\. {
deny all;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
location ~* /(wp-config.php|readme.html|license.txt) {
deny all;
}
}
Если установлен php7.2-fpm, то убедимся что в файле /etc/php/7.2/fpm/pool.d/www.conf указано:
listen = /run/php/php7.2-fpm.sock
Создадим ссылку на файл конфигурации в директорию «sites-enabled» тем самым активировав его:
ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/test
Проверим корректность конфигурации и загрузим ее:
nginx -t
service nginx reload
При необходимости можно полностью перезапустить Nginx:
service nginx restart
Убедимся что Nginx запустится при запуске системы:
sudo systemctl is-enabled nginx
sudo systemctl enable nginx
Если редактировать PHP параметры в файле /etc/php/7.2/fpm/php.ini, то чтобы применить изменения нужно перезапустить php-fpm:
service php7.2-fpm status
service php7.2-fpm restart
Для завершения установки, откроем WordPress в браузере, например
http://test.ixnfo.com/wp-admin/install.php
и выполним инструкции. После установки откроем страницу «Здоровье сайта» /wp-admin/site-health.php и выполним рекомендации.
Если например нужно часто указывать «unix:/run/php/php7.2-fpm.sock», то это можно сделать так:
upstream php {
server unix:/run/php/php7.2-fpm.sock;
}
...
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass php;
}
...
Смотрите также мои статьи:
Установка и настройка WordPress в Ubuntu
Установка и настройка Nginx
Решение ошибки с REST API «Ответ не является допустимым ответом JSON» WordPress+Nginx
Добрый день!
А как Nginx обрабатывает привила в htaccess?
Судя по настройкам (location ~ /\.ht { deny all; }) они игнорируются.
Какая есть альтернатива обработки подобных правил в Nginx?
Можно найти в интернете онлайн конвертеры htaccess для nginx и потом результат указать в конфигурации nginx или настроить nginx как прокси для apache2.