Установка і настройка nginx, пара нескладних прикладів, записки програміста
Ця замітка в першу чергу призначена для початківців розробників. У всякому разі, тих з них, кому ще жодного разу не доводилося встановлювати і налаштовувати Nginx. Мета посту полягає в тому, щоб показати, наскільки легко і невимушено відбувається ці самі установка з налаштуванням, а також що Nginx не потрібно боятися і не варто без зайвої необхідності перекладати його настройку на адмінів.
Nginx (вимовляється «енжін ікс») - це легкий веб-сервер (насправді, не тільки веб-), створений Ігорем Сисоєва. Nginx використовується дофіга де, в тому числі в Mail.ru, Яндексі, Рамблері, і великому-дуже багато інших високонавантажених і не дуже веб-проектів. Ось далеко неповний список можливих застосувань Nginx:
- Ваша програма вміє HTTP, а ви вирішили додатково прикрутити SSL, gzip або, можливо, SPDY;
- У вас багато додатків, але ви хочете, щоб всі вони були на 80-му порту і відповідали за різні URL;
- Ви хочете швидко роздавати статику;
- Додаток піднято на різних серверах і ви хочете (1) розподіляти навантаження між ними, (2) якщо один з серверів приліг, успішно відповідати на запити за допомогою решти;
- Запити обробляються додатком повільно і ви хочете їх кешувати;
- Написане вами програма не вміє Залогуватися HTTP-запити;
- Доступ до ресурсу потрібно обмежити за логіном і паролем, або по IP;
- У вас LAMP і при великій кількості запитів починає закінчуватися пам'ять (див замітку про оптимізацію WordPress);
- Ви змінили URL ресурсу і хочете налаштувати редирект зі старого URL для забезпечення сумісності;
- Вам хочеться робити все написане вище одночасно;
Встановлюється Nginx дуже просто:
sudo apt-get install nginx
sudo service nginx start
wget localhost: 80 -O -
Повинні побачити «Welcome to nginx».
Список запитів і помилок пишуться в / var / log / nginx /. Конфіги лежать в / etc / nginx /. У підкаталозі sites-available складаються все-все конфіги, навіть ті, які ви раніше використовували, а тепер не використовуєте. У sites-enabled складаються використовувані конфіги, прийнято робити їх лінками на конфіги в sites-available.
Після зміни конфігов Nginx може перечитати їх без перезавантаження. Для цього потрібно сказати:
sudo service nginx reload
Після reload обов'язково перевіряйте по логам, чи немає помилок.
Розглянемо приклад. Припустимо, ви записуєте свій подкаст і вирішили його роздавати за допомогою друплета в DigitalOcean. Тоді ось як приблизно буде виглядати ваш конфіг Nginx:
root / var / www;
index index.html index.htm;
location / # First attempt to serve request as file, then
# As directory, then fall back to displaying a 404.
try_files $ uri $ uri / = 404;
>
За великим рахунком все, що ми тут говоримо Nginx - це (1) слухай порт 80, (2) віддавай файли зі швидкістю не більше 512 кбайт в секунду, (3) в разі помилок 403 або 404 роби редирект на вказаний хост, (4 ) роздавай файли з каталогу / var / www, (5) якщо користувач запросив каталог, і в ньому є файл з ім'ям index.html або index.htm, віддавати цей файл. Зовсім нескладно, правда?
Розглянемо ще один приклад. Припустимо, ваш додаток крутитися в AWS і спілкується зі світом за допомогою вебсокетов. Вам хочеться зашифрувати трафік за допомогою SSL. Немає проблем:
map $ http_upgrade $ connection_upgrade default upgrade;
'' Close;
>
upstream websocket server localhost: 1234;
>
ssl on;
ssl_certificate /etc/nginx/nginx.crt;
ssl_certificate_key /etc/nginx/nginx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:! aNULL:! MD5 or HIGH:! aNULL:! MD5:! 3DES";
ssl_prefer_server_ciphers on;
Тут ми говрят nginx (1) слухати порт 443 і прокидати всі запити на localhost: 1234, (2) при прокинув встановлювати заголовок з IP користувача, (3) включити SSL без дірявого SSLv3. (4) виділити 100 Мб пам'яті під SSL сесії.
Нарешті, останній приклад. Ваш REST-сервіс крутиться в Hetzner, віддає дані в форматах JSON і CSV, а також генерує нескінченні стрім подій (JSON в chunked transfer encoding). Генерація стрімів вимагає великої кількості ресурсів, тому їх ви хочете прокинути на окреме безліч машин. Також ви хочете стискати трафік за допомогою gzip.
upstream service_default server localhost: 1234;
>
map _ $ service_upstream default service_default;
>
server listen 80;
chunked_transfer_encoding on;
proxy_buffering off;
tcp_nodelay off;
proxy_read_timeout 1800;
proxy_send_timeout 1800;
gzip on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types application / json application / x-json-stream;
>
Вважаю, до цього моменту ви вже самі можете зрозуміти, про що йде мова. У разі чого звертайтеся до офіційних документів стосовно Nginx. вона класна і в ній все є. Також зверніть увагу на офіційні списки розсилки.
Власне, це все, про що я хотів розповісти. А як ви використовуєте Nginx?