Введение
Обратный прокси-сервер – эффективный метод для доступа сервера приложений к интернету. Node.js или Flask обеспечивает доступ к приложению в локальной сети с помощью TCP. С целью получению доступа к приложению удалённо, необходимо развернуть обратный прокси-сервер. Сперва клиент запрашивает доступ к приложению и получает контент из сервера без необходимых настроек, согласно с требованием клиента. В этом руководстве вы сможете с легкостью настроить Nginx, переадресуете нужные запросы клиента. Отсутствует сервер с целью тестирования приложений? Не проблема. Рассмотрим настройку тестового приложения на Gunicorn WSGI-сервере.
Подготовка к установке
Необходимо настроить Ubuntu Server 22.04 в соответствии с руководством из нашего сайта.
Адрес сервера в этом руководстве будет называться ip_address. К примеру, http://127.0.0.1:8000 стандартный адрес для библиотеки Gunicorn. В случае отсутствия настроенного сервера приложений для тестов, можно будет развернуть Gunicorn, который предоставляет сервер.
При помощи Nginx, можно настроить доменное имя, при обращении по имени домена, web-браузер подключает по нужному адресу.
Этап 1 – Скачивание и установка Nginx
Первым делом обновим индексы пакетов программного обеспечения и установим пакет nginx:
apt update
apt install nginx
Выбираем “y” и установим пакет. Во время установки могут возникнуть ошибки связанные с “E: Sub-process /usr/bin/dpkg returned an error code (1)”.
Открываем файл и закомментируем строку связанную с IPv6, сохраняем внесённые изменения и выходим из файла.:
vim /etc/nginx/sites-available/default
#listen [::]:80 default_server; # закомментируем строку и выходим ESC и :wq! Сохранив файл.
Выполним команду, чтобы корректно сконфигурировать установочный пакет:
dpkg --configure -a
Проверим работоспособность утилиты выполнив команду:
service nginx status
Разрешим правило подключения Nginx с помощью ufw:
ufw allow ‘Nginx HTTP’
В следующем этапе настроим конфигурацию серверной части и протестируем конфигурацию.
Этап 2 – Конфигурирование серверной части
В каталоге /etc/nginx/sites-available создадим файл с названием нашего домена:
vim /etc/nginx/sites-available/test_domain.ru;
Затем добавьте кусок кода в файл и замените test_domain.ru и ip_addres_app на свой адрес. Если нет сервера, чтобы тестировать приложения, то замените на http://127.0.0.1:8000 – этот адрес является стандартным адресом Gunicorn. Которую мы рассмотрим на третьем этапе.
server {
listen 80;
listen [::]:80; #при возникновении ошибки во время проверки nginx -t, закомментировать строку
server_name test_domain.ru
www.test_domain.ru;
location / {
proxy_pass http://127.0.0.1:8000;
include proxy_params;
}
}
Сохраним и выполним выход выполнив ESC и :wq!
Конфигурация начинается со стандартного прослушивания порта 80 и будет отправлять ответ на запросы test_domain.ru. Обратный прокси конфигурируется при помощи файла proxy_params в каталоге /etc/nginx/proxy_params.
HTTP-запросы состоят из заголовков, содержащий информацию об IP-адресе и о файлах cookie. В файле proxy_params заранее прописаны рекомендуемы параметры:
proxy_set_header Host $http_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;
http_host – содержит начальный хост, запрошенный клиентом, который в свою очередь является доменом веб-сайта и портом;
remote_addr – заголовок всегда содержит один IP-адрес, принадлежащий удалённому хосту;
proxy_add_x_forwarded_for – содержит IP-адрес хоста, отправивший запрос. Также есть возможность сохранять список IP-адресов. Первый считается исходный IP-адрес хоста, далее идёт список всех IP-адресов обратных прокси-серверов, через которые прошёл запрос.
scheme – строка хранящая протокол, который используется исходным хостом с целью подключения. Создадим символическую ссылку на файл test_domain.ru:
ln -s /etc/nginx/sites-available/test_domain.ru /etc/nginx/sites-enabled/
Протестируем nginx с ключом -t:
nginx -t
Перезапустим службу:
service nginx restart
На данный момент Nginx настроен с обратным прокси. Следующим этапом будет установка и настройка сервер тестирования приложений.
Этап 3 – Тестирование обратного прокси при помощи Gunicorn
После запуска web-сервера Nginx, можно проверить на работоспособность с помощью web-браузера, в адресной строке указав название домена.
Скачаем и установим пакет Gunicorn, который является сервером Python WSGI и работает непрерывно с обратным прокси Nginx.
apt install gunicorn
Есть возможность установить Gunicorn на прямую через “pip”, для последней версии, которая может быть связана с виртуальной средой Python.
Напишем функцию, которая будет возвращать “New WSGI server”. Создадим файл:
vim wsgi.py
Вставим кусок кода:
def wsgi(environ, start_response):
start_response("200 OK", [])
return iter([b"Welcome, to new wsgi server"])
Запустим Gunicorn сервер, укажем название файла без расширения и название функции:
gunicorn --workers=2 wsgi:wsgi
#Выход
[2022-11-10 18:47:16 +0000] [2633] [INFO] Starting gunicorn 20.1.0
[2022-11-10 18:47:16 +0000] [2633] [INFO] Listening at: http://127.0.0.1:8000 (2633)
[2022-11-10 18:47:16 +0000] [2633] [INFO] Using worker: sync
[2022-11-10 18:47:16 +0000] [2634] [INFO] Booting worker with pid: 2634
[2022-11-10 18:47:16 +0000] [2635] [INFO] Booting worker with pid: 2635
Откроем браузер и введём http://127.0.0.1:8000 и получим сообщение.
Выводы
С помощью этого руководство вы научились:
- Как установить Nginx и Gunicorn;
- Добавить правило Nginx HTTP;
- Настраивать серверную часть для тестирования приложения;
- Создавать символической ссылки;
- Запуск сервера для тестирования приложения.