Nginx, домены, сайты..

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, будем вместе учиться и кайфовать. Всем мяу!



Report Page