Рекомендації по настройці nginx

Основи налаштування Nginx

Nginx є простим сервером HTTP, однак, більшість людей раніше використовували Apache звикли до LAMP. тому існує кілька речей в налаштуванні nginx, яких потрібно остерігатися при використанні даного веб-сервера. Важливими чинниками є, по-перше, те, що nginx є інвертованим проксі-сервером і по-друге HTTP сервером, в першу чергу це стосується не файлів, а URL, що змінює спосіб, яким буде налаштовуватися nginx.

Перше, що потрібно знати, файл конфігурації nginx використовує ієрархію спадкування, директиви, зазначені в верхньому блоці, будуть набувати значень нижніх блоків, як значення за замовчуванням, отже, потрібно вказувати директиви в верхніх блоках, якщо це можливо. Директиви верхніх блоків приймають значення за замовчуванням, однак в більшості випадків значення можна змінити.

Існує 3 ієрархії, які зазвичай називають блоками: блок HTTP. блок server і блок location. в цих блоках ієрархія побудовані таким чином: http -> server -> location.

Більш того, існує 2 спеціальних блоку location. блок event і root. в якому знаходяться блоки location і http. Обидва вони містять невелику кількість директив. Більшість часу піде на інші 3 блоку.

Блоки мають смислове значення. Блок server в Apache розглядається, як віртуальний хост. Блок location відноситься до URI.

При використанні документації ключові слова визначають, в якому блоці може використовуватися директива, як говорилося раніше, директиву краще використовувати в самому верхньому блоці.

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

Найбільш важливі директиви server_name і root. Це змушує nginx використовувати блок server конфігураційного файлу, коли заголовок HOST збігається з ім'ям сервера, і повідомляє, яку директорію на локальній машині використовувати при пошуку файлів сайту ..

Ці форми основні для віртуальних хостів, приклад:

Тут є два віртуальних хоста. Перший, коли drach.pro або будь-який під домен drach.pro, крім www передається, як заголовок HOST в браузері. Справа в тому, що nginx завжди буде вибирати найбільш точну відповідність і при відвідуванні www.drach.pro це точно буде ставитися до другого блоку.

блок Location

Nginx як правило, не використовує складні перезапису, зазвичай теж саме можна зробити використовуючи блок location.

Важливим фактором є те, що location. за винятком location з ім'ям, працюють з URI без будь-яких параметрів запиту і тільки блок location НЕ буде запущений, тому директиви повинні знаходиться в верхньому блоці. Директива root. визначається в location / недоступна в location / зображення / - до тих пір, поки не буде визначена в блоці server. Визначення самого верхнього блоку запобіжить дублювання коду.

Іншим важливим фактором є директива server_name. nginx буде використовувати найбільш певний блок location. Більш детальну інформацію можна знайти в офіційній документації nginx

Запити на / forum тепер успішно передаються на новий під домен, в той час, як запити до файлів, які не перебувають в / forum подаються за стандартним /home/drach.pro.

Обробка PHP

У PHP або будь-якому сервері, пов'язаному з location можна визначити блок location. для отримання всіх файлів PHP.

Як згадувалося раніше, nginx пов'язаний не з файлами, а з location. саме тому існує директива try_files всередині блоку php. Цей блок location відповідає URI, який закінчується на. php, але при цьому не важливо файл це чи ні. Тому запит /forum/avatars/user2.jpg/index.php буде відповідати і буде відправлений в PHP, а якщо and PHP не налаштований належним чином, то PHP виконує /forum/avatars/user2.jpg коли / forum / avatars / user2. jpg / index.php не існує. У зв'язку з цим виникає загроза безпеці. Зверніть увагу, що це не помилка nginx, а заплановане поведінка, що не може бути "виправлено".

Однак помилку можна виправити в PHP, задавши cgi.fix_pathinfo = 0 у файлі php.ini.

В результаті існуючі файли з расшіреніем.php будуть передані через fastcgi на процеси PHP, запущені на порте 9000.

Пошукова оптимізація

запити налагодження

Nginx час від часу є складним сервером, але завдяки журналу помилок завжди можна зрозуміти, що пішло не так. Директива журналу помилок в документації приймає другий аргумент. Це дозволяє визначити кількість вихідної інформації nginx. Значення помилок дозволить Вам налагодити більшість проблем.