Налаштування NGINX для підтримки одного та кількох сайтів WordPress

Пропозиція від 8host.com

одного

WordPress – найпопулярніша система керування контентом (CMS). Сайти на WordPress можна підтримувати за допомогою веб-серверів HTTP, наприклад Apache або NGINX.

Сьогодні багато користувачів віддають перевагу NGINX завдяки його масштабованій подійно-керованій архітектурі та низькому споживанню ресурсів. Даний посібник покаже, як налаштувати NGINX для різних типів установок WordPress (у тому числі багатосайтових конфігурацій), та використовувати правила перезапису та файли .conf.

Вимоги

  • Користувач із доступом до sudo.
  • Попередньо встановлений стек LEMP на Ubuntu чи Debian.

Також майте на увазі, що в посібнику PHP-FPM використовуватиметься UNIX-сокет.

Базова оптимізація NGINX

Робочі процеси та підключення NGINX

Відповідно до рекомендацій кількість робочих процесів NGINX має збігатися з кількістю процесорів. Щоб дізнатися кількість процесорів, введіть:

cat /proc/cpuinfo grep processor

Відкрийте головний конфігураційний файл NGINX:

sudo nano /etc/nginx/nginx.conf

Змініть кількість робочих процесів NGINX відповідно до умов системи:

NGINX обмежує кількість одночасних підключень, які можуть підтримувати робочий процес; Якщо веб-сайт має багато відвідувачів, рекомендується збільшити ліміт підключень.

Утиліта gzip

Утиліта gzip стискає файли, що дозволяє збільшити швидкість WordPress; що менше обсяг даних, запитуваних користувачем, то швидше сервер опрацює їх і поверне відповідь. Файли CSS і HTML містять багато однакових рядків, текст і пробіли, що повторюються. Gzip використовує алгоритм DEFLATE,який видаляє рядки, що повторюються, посилаючись на перший такий рядок. Завдяки цьому файл стає набагато меншим. Знайдіть розділ Gzip і увімкніть його:

gzip on; gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/ x-icon;

Збережіть та закрийте файл:

Створення файлів .conf

Для багатосайтових налаштувань WordPress потрібно створити кілька файлів .conf, які завантажуватимуться з блоків server; завдяки цьому вам не доведеться повторно записувати однакові конфігурації кожного блоку server.

Створіть три файли для зберігання конфігурацій:

  • common.conf: загальні налаштування сайтів.
  • wordpress.conf: налаштування сайтів WordPress.
  • multisite.conf: спеціальні конфігурації для багатосайтової установки WordPress із підкаталогами.

Усі файли потрібно зберігати у каталозі Global. Створіть цей каталог:

sudo mkdir /etc/nginx/global

Файл common.conf

Створіть перший файл – common.conf.

sudo nano common.conf

Помістіть до нього наступні опції:

# Global configuration file. # ESSENTIAL : Configure Nginx Listening Port listen 80; # ESSENTIAL: Default file to serve. Якщо перший файл не знайдено, index index.php index.html index.htm; # ESSENTIAL: no favicon logs location = /favicon.ico log_not_found off; access_log off; > # ESSENTIAL : robots.txt location = /robots.txt allow all; log_not_found off; access_log off; > # ESSENTIAL : Configure 404 Pages error_page 404 /404.html; # ESSENTIAL : Configure 50x Pages error_page 500 502 503 504 /50x.html; location =/50x.html root /usr/share/nginx/www; > # SECURITY : Deny all attempts to access hidden files .abcde location

/\. deny all; > # PERFORMANCE : Set expires headers for static files and turn off logging. location

* ^.+\.(jscssswfxmltxtoggogvsvgsvgzeototfwoffmp4ttfrssatomjpgjpeggifpngicoziptgzgzrarbz2docxlsexeppttarmidmidiwavbmprtf)$ access_log off; log_not_found off; expires 30d; >

  • Рядок listen 80; визначає порт, який слухатиме сервер.
  • Рядок "index index.php ..." визначає стандартний файл для обслуговування. Якщо перший файл, вказаний у цьому рядку, не знайдено, сервер шукатиме другий файл і т.д. Якщо у вас є HTML-сайти, додайте до рядка index.html та index.htm.
  • Рядок «location=/robots.txt» відкриває доступ до файлу robots.txt; щоб встановити інший каталог для robots.txt, додайте псевдонім:

location /robots.txt alias /var/www/example.com/public/sample_robots.txt; >

/\. » блокує приховані файли (їх ім'я починається з точки).

* ^.+\.(jscssswf…» відповідає за використання кешу. Значення 30d зберігатиме статичні файли (наприклад, зображення) протягом 30 днів.

Збережіть та закрийте файл.

Файл wordpress.conf

Тепер потрібно створити файл налаштувань для сайтів WordPress:

sudo nano wordpress.conf

У файл вставте наступний код:

# WORDPRESS : Відображення правил, sends everything through index.php and keeps the appended query string intact > # SECURITY : Deny all attempts to access PHP Files in the uploads directory location

* /(?:uploadsfiles)/.*\.php$ deny all; > # REQUIREMENTS : Enable PHP Support location

\.php$ # SECURITY : Zero day Exploit Protection try_files $uri =404; # ENABLE : Enable PHP, listen fpm sock fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; > # PLUGINS : Enable Rewrite Rules for Yoast SEO SiteMap rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last; rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last; #Yeah! you did it.

Правило try_files $uri $uri/ /index.php?q=$uri&$args дозволяє налаштувати власну структуру посилання.

* /(?:uploadsfiles)/.*\.php$ запобігає завантаженню та виконанню шкідливого коду.

\.php$ дозволяє NGINX передавати php-скрипти в PHP5.

Правило безпеки try_files $ uri = 404; повертає помилку 404 якщо запитуваний файл не знайдено.

Примітка : До цього файлу можна додати більше правил. Наприклад, додаткові правила вимагають окремі плагіни.

Файл multisite.conf

На відміну від односайтової установки WordPress, яка не потребує налаштування перезапису посилань, багатосайтова установка потребує чистих URL-адрес. Створіть файл для такої установки:

sudo nano multisite.conf

У цей файл додайте наступні опції:

# Rewrite rules for WordPress Multi-site. if (!-e $request_filename) rewrite /wp-admin$ $scheme://$host$uri/ permanent; rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last; rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last; >

Збережіть та закрийте файл.

Віртуальні хости nginx

Тепер можна створити перший блок server (так називаються віртуальні хости nginx). Усі необхідні конфігурації розподілені між файлами .conf,тому копіювати стандартний файл блоку server немає сенсу. Вимкніть цей файл.

sudo rm /etc/nginx/sites-enabled/default

Створіть новий файл для блоку server:

sudo nano /etc/nginx/sites-available/demo

Залежно від ваших цілей і вимог сервера, скопіюйте в нього найбільш відповідні із запропонованих нижче конфігурацій.

Проста установка WordPress

Щоб налаштувати один сайт із доменом www.demo.com, потрібно створити блок server і помістити в нього такі правила.

Вкажіть, який блок повинен використовуватися для цього домену, додайте файли common.conf і wordpress.conf, а потім вкажіть шлях до встановлення WordPress.

server # URL: Correct way to redirect URL's server_name demo.com; rewrite ^/(.*)$ http://www.demo.com/$1 permanent; > server server_name www.demo.com; root /home/demouser/sitedir; access_log /var/log/nginx/www.demo.com.access.log; error_log /var/log/nginx/www.demo.com.error.log; include global/common.conf; include global/wordpress.conf; >

Зверніть увагу на такі дані:

  • server_name: ставить віртуальний хост для цього сайту.
  • root: шлях до головного каталогу сайту
  • access log та error log: шляхи до логів.

Як бачите, у файлі є два блоки server; це тому, що www.demo.com та demo.com – це два різні URL-адреси.

Можна також вказати кілька доменів:

server # URL: Correct way to redirect URL's server_name demo.com sub.demo.com example.com;

Багатосайтова установка з підкаталогами

Додайте правила перезапису до multisite.conf:

# URL: add a permanent redirect if required. server server_name www.demo1.com; root /home/demouser/sitedir1; access_log/var/log/nginx/www.demo1.com.access.log; error_log /var/log/nginx/www.demo1.com.error.log; include global/common.conf; include global/wordpress.conf; include global/multisite.conf; >

Багатосайтова установка з піддоменами

Для підтримки такої установки потрібно відредагувати блок-сервер, додавши в домен спеціальний символ:

server server_name *.demo2.com; root /home/demouser/sitedir2; access_log /var/log/nginx/demo2.com.access.log; error_log /var/log/nginx/demo2.com.error.log; include global/common.conf; include global/wordpress.conf; >

HTML та інші сайти

Для підтримки сайтів html або веб-додатків потрібно вказати правила користувача або створити додаткові файли .conf, а потім додати їх у блок server:

# URL: add a permanent redirect if required. server server_name www.demo3.com; root /home/demouser/sitedir3; access_log /var/log/nginx/demo3.com.access.log; error_log /var/log/nginx/demo3.com.error.log; # custom rules >

Збережіть та закрийте файл.

Увімкнення блоків server

Тепер потрібно включити віртуальні хости, створивши символьне посилання між каталогами sites-available та sites-enabled.

sudo ln -s /etc/nginx/sites-available/demo /etc/nginx/sites-enabled/demo

Перезапустіть NGINX, щоб оновити налаштування.

sudo service nginx reload;

Додаткові рекомендації

Щоб створити інші віртуальні хости, просто повторіть описаний вище процес, вказавши новий каталог document root та інший домен.

Крім того, кілька блоків server можна поєднати в один: