Веб сервер nginx.

Завдання.

Встановити nginx на систему з Linux.

Змусити слухати порт

Варіанти.

1 8080

2 7777

3 9999

Змусити працювати з директорією та віддавати index.html усередині.

Варіанти.

1 /www/public_html

2 /home/web

3 /data

Створити віртуальний хост на адресу.

Варіанти.

1 sex.local

2 supersite.oh

3 www.www

Запустити із зазначеної директорії (див. вище) стартовий проект Django з використанням uwsgi та проксирувати nginx-ом.

Основи роботи з Linux. -> Налаштування віртуальних хостів nginx.

Налаштування віртуальних хостів nginx.

Отже, віртуальний хост - це поділ адресного простору web-сервера, наприклад, на ім’я сайту, що дозволяє запускати кілька web-сайтів/додатків на одному фізичному сервері.

Якщо говорити в термінології документації nginx, віртуальний хост також називається Server Block.

Встановлення.

sudo apt-get install -y nginx

Запуск, зупинка, перевірка конфігурації

service nginx start | stop
nginx -t

Подивитися під ким працюють вокери nginx

ps -eo "%U %G %a" | grep nginx

Створення веб-директорії та призначення їй прав.

sudo mkdir -p /home/webmaster/www/django

sudo chown -R www-data:www-data /home/webmaster/www/mysite

Ви можете замінити користувача «www-data», що використовується нижче, на іншого, але за замовчуванням nginx працює від імені цього користувача.

Тепер зробимо так, щоб усі користувачі могли читати наші нові файли:

sudo chmod 755 /home/webmaster/www

Створюємо стартову сторінку /home/webmaster/www/mysite/index.html.

<html>
  <head>
    <title>mysite.ru</title>
  </head>
  <body>
    <h1>Virtual Host в nginx!</h1>
  </body>
</html>

Створення конфігурації віртуального хоста

У nginx директорії /etc/nginx/sites-available є шаблон для створюваних конфігурацій.

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mysite.ru

Мінімальна конфігурація.

server {
    listen   80;
    root /home/webmaster/www/mysite;
    index index.html index.htm;
    server_name mysite.ru www.mysite.ru;
}

Як server_name ви також можете задати IP-адресу або кілька імен через пробіл, за яким буде доступний хост, як ми зробили.

Варіант використання listen

listen *:80;

root директива каже nginx взяти url та додати його до root шляху.

У nginx є папки sites-available і sites-enabled. У першій зберігаються конфігурації ВСІХ віртуальних хостів, які можуть бути на даному сервері, а в директорії sites-enabled символічні посилання на активні.

Ніхто не забороняє в sites-enabled розміщувати оригінал конфігураційного файлу, а не посилання, але це буде менш зручно, т.к. у разі потреби відключення доведеться або видаляти файл (тоді буде проблематично включити назад), або переміщати його в іншу директорію (тоді ми повинні пам’ятати, куди ми перенесли). Набагато простіше гримнути символічне посилання!

Створення символічного посилання.

sudo ln -s /etc/nginx/sites-available/mysite.ru /etc/nginx/sites-enabled/mysite.ru

Перевірка правильності конфігурації.

sudo nginx -t

Перезапуск сервера.

sudo service nginx restart

Налаштування локальних хостів.

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

sudo nano /etc/hosts

Приклад конфігурації.

127.0.0.1 starter.php
127.0.0.1 market.local

У блоці сервера можуть бути додаткові блокові директиви. Наприклад location.

Всі директиви, які використовуються в блоці server, можуть використовуватись і в блоках location. Але нам не обов’язково вказувати root та index у кожному location. Якщо їх опустити, то успадковуватимуться ті, що були вказані в батьківському блоці.

Приклад блоку location

server {
    listen *:80;
    server_name example.ru;
    root /usr/share/nginx/html;
    index index.html index.htm;
    location / {}
}

localion можна направити в іншу директорію.

location / {
    root   /var/www;
    index  index.html index.htm;
}

Якщо у нас є каталог /home/zdimon/www/nginx/web2 і ми хочемо нацькувати на нього всі запити за адресою

http://v1.nginx.loc/web2/

Пишемо такий локейшин

location /web2 {
    root /home/zdimon/www/nginx;
}

Такий приклад не працюватиме

location /web2 {
    root /home/zdimon/www/nginx/web2;
}

т.к. root шукатиме в такому каталозі /home/zdimon/www/nginx/web2/web2

Для того щоб цього уникнути можна застосувати директиву або.

alias - каже nginx що замінити у шляху location-а те що, що зазначено в alias.

Обробка 404 та директива try_files.

try_files $uri $uri/ =404;

Проксіювання через порт.

Приклад проксіювання з порту, на якому висить інший веб-сервер.

location / {

proxy_pass http://localhost:8080; }

За відсутності процесу на вказаному порту отримаємо.

nginx

Запуск простого сервера на python.

python3 -m http.server 8080

Приклад проксіювання всіх файлів php

    location ~ \.php$ {
        fastcgi_pass    127.0.0.1:8002;
        include snippets/fastcgi-php.conf;
    }

Приклад проксування статичних файлів.

location ^~ /images {
    alias /var/www/static;
    try_files $uri $uri/ =404;
}

location ^~ /css {
    alias /var/www/static;
    try_files $uri $uri/ =404;
}

Налаштування логів.

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

Запуск python uwsgi процесу.

apt-get install uwsgi uwsgi-plugin-python3

Створення настроювального файлу.

Запуск процесів з-під supervisor.

Встановлення uwsgi и supervisor.

apt-get install build-essential python3-dev

apt-get install uwsgi supervisor

sudo apt-get install uwsgi-plugin-python3

Настроювальний файл /etc/uwsgi/apps-enabled/mysite.ini.

[uwsgi]
socket = /tmp/pl.sock
buffer-size=32768
chmod-socket = 666
processes = 1
threads = 2
virtualenv = /home/zdimon/Desktop/projects/pl/venv/
chdir = /home/zdimon/Desktop/projects/pl/pl
module = pl.wsgi:application
plugins = python3

Проксіювання з unix сокету.

location / {
    proxy_pass  http://unix:/tmp/pl.sock;
}