Веб сервер nginx.
Основи роботи з Linux. -> Завдання.
Завдання.
Встановити 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; }
За відсутності процесу на вказаному порту отримаємо.
Запуск простого сервера на 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;
}