Nginx, домены, сайты..
happypython + wikilinuxСреди вас скорее всего найдутся разрабы, которым важно и нужно выкладывать что то в общий веб под доменами, а в свою очередь это касается и маршрутизации, да и всего остального.

1.Зачем это нужно?
Немного теории. В мире netа все из себя представляет работу с ip адресами, апишками и прочим, но на ip адрес мы можем повесить ssl? Нет вроде. А зачем он нужен вовсе?
SSL сертификат позволяет нам окунуться в мир HTTPS соединений с шифрованием, в предыдущих статьях я вам показывал работу с WireShark, не имея шифрования, находясь в локальной сети с другими устройствами - мы можем хватать их трафик, куки, использовать все это в своих целях. Но если отойти от тем безопасности, то вы же не помните наизусть IP адрес того же гугла или яндекса, вы используете доменное имя yandex.ru / google.ru.
Для проксирования и направления тебя на нужный ip адрес существуют DNS сервера, они тыкают твой браузер в нужный ip и рендерит страницу.
2.Устройство и настройка DNS.
DNS или Система Доменных Имен - большая библиотека, или огромная записная книжка, в которую нам лично можно записать что то, а точнее:
IP адрес нашего сервака(A запись), MX записи почтовых систем, AAAA(я не ору, это система IPv6 адресов)
Окей, мы арендовали VDS, нам дали белый IP и мы можем показать инету наш сайт с тянками, линуксом и питоном, тогда погнали. Существует достаточно сервисов для рега доменов, например рег.ру, бегет и тому подобные. Лично я выбираю бегет, на его примере мы и рассмотрим запись ДНС сервера
Заходим в панели во вкладку доменов

Удаляем все кроме записи A, туда пишем наш IP адрес и забываем. MX записи оставляем, если хотим использовать почту, но она обычно платная.
К слову, приходится ждать от 2х до 48 часов, чтобы домен начал нормально работать, это происходит из за кэша серверов, который эти дуры обновляют НЕ КАЖДЫЕ 5 минут, так что набираемся терпения.
3. Nginx
Теперь вся наша воля переходит на наш выделенный сервер.
Nginx - проксятор на максималках, занимается направлением входящих потоков(обращений клиентов) на нужную дорогу, чтобы они не видели то, что им совершенно не надо.
sudo apt install nginx - команда для установки его
после установки переходим на наш ip адрес и смотрим, что он нам показывает

Наша большая прокся заработала, теперь нам нужна такая штука как sertbot
Он выдаст нам на домен ssl серт, а значит мы будем видеть уже https соединение!!!
Но прежде всего, настраиваем наш сайт, предположим что у нас будет стартовать Flask, по localhost:8000
example.com - понятное дело уже наш домен
Начинаем мучать конфиг
sudo nano /etc/nginx/sites-available/myflaskapp
Вставляем туда строки конфига
server {
listen 80;
server_name example.com; # Замените на ваш домен или IP-адрес
location / {
proxy_pass http://localhost:8000; # Перенаправление запросов к Flask
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Ну и последнее, создаем ярлык в папке включенных сайтов
sudo ln -s /etc/nginx/sites-available/myflaskapp /etc/nginx/sites-enabled/
sudo nginx -t #проверяет конфигурацию sudo systemctl restart nginx #перезапуск nginx
Теперь наш сайт становится доступен по нашему домену, но еще нет HTTPS
4. SSl и Sertbot
Ставим sertbot и делаем нам ssl
sudo apt update
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
Далее со всем соглашаемся, вводим свои данные и так далее. Он сам подтвердит letsencrypt и создаст пары ключей, которые и будут нашим сертификатом.
Теперь мы со спокойной душой сможем изменить наш конфиг, или он изменится сам
sudo nano /etc/nginx/sites-available/myflaskapp
server {
listen 80;
server_name example.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Этот конфиг в свою очередь установит переадресацию с 80 порта на 433, который уже выдаст домену ssl сертификат
Все те же команды
sudo nginx -t sudo systemctl restart nginx

5.Выводы
Данная настройка является очень важной для твоего сайта, если ты хочешь выйти в вебку, но опять же не стоит забывать, что можно использовать метод сокетов, вместо проксирования, а для самих приложений на том же фласке - стоит использовать несколько потоков gunicorn. Данную статейку я писал для двух канальчиков,
Для нашего любимого happypython и wikilinux
https://t.me/+YsYCRupjFFxiZDky - Подписывайтесь, скоро выйдет Бубунту 24.04, будем вместе учиться и кайфовать. Всем мяу!
