Введение
В этой лабораторной работе вы научитесь настраивать Nginx как обратный прокси.
Представьте обратный прокси как секретаря в крупной компании. Когда вы звоните по общему номеру, вы не разговариваете напрямую с генеральным директором или службой поддержки. Вы общаетесь с секретарём, который спрашивает: «Чем я могу вам помочь?», а затем переводит звонок нужному сотруднику.
В этом сценарии:
- Nginx — секретарь, который принимает соединения на порту 80.
- Приложение Python — «служба поддержки», которая принимает соединения на порту 8000.
- Вы — клиент, который обращается в компанию.
Вы настроите Nginx так, чтобы при запросе /app он перенаправлял запрос на сервер Python и возвращал ответ клиенту.
Обратные прокси играют важную роль в современной веб-архитектуре. Они располагаются перед серверами приложений и предоставляют стабильную публичную точку входа. Кроме того, они могут завершать TLS-соединения, распределять нагрузку, кэшировать данные и маршрутизировать запросы.
Таким образом, Nginx не всегда обслуживает файлы самостоятельно. Иногда его основная задача — принимать трафик от клиентов и передавать его другой службе, расположенной за ним.
Запустите серверного приложения
Сначала нам нужно запустить службу, которой будут передаваться запросы. Для этого мы создадим очень простое веб-приложение на Python.
Создадим отдельную папку, из которой приложение будет отдавать файлы.
Создайте папку app в каталоге проекта и поместите в неё простой HTML-файл:
mkdir -p ~/project/app
echo "Hello from the Python Backend." > ~/project/app/index.html
Теперь запустим сервер Python. Эта команда указывает Python работать как веб-сервер и отдавать файлы из текущего каталога на порту 8000.
В нашем примере этот процесс Python является сервером серверной части приложения. Он отвечает за фактическую выдачу содержимого, а Nginx располагается перед ним как публичная точка входа.
Символ & в конце команды запускает процесс в фоновом режиме. Благодаря этому вы сможете продолжать работать в терминале, пока сервер будет работать в фоне.
cd ~/project
python3 -m http.server 8000 &
Проверим, что сервер запустился правильно. Найдём процесс, который прослушивает порт 8000:
netstat -tuln | grep 8000
В выводе должна появиться строка с 0.0.0.0:8000 и состоянием (LISTEN). Это означает, что наше «серверное приложение» готово принимать запросы на порту 8000.
Настройте обратный прокси Nginx
На этом шаге вы измените конфигурационный файл Nginx и укажете в нём наше приложение Python.
Сначала откройте файл конфигурации по умолчанию с помощью sudo и текстового редактора nano.
sudo nano /etc/nginx/sites-enabled/default
Внутри блока server { ... } прокрутите файл вниз. Вы увидите существующий блок location / { ... }. Добавьте под ним новый блок location /app.
Вставьте в файл следующий код. Будьте внимательны при вводе фигурных скобок { } и точки с запятой ;:
location /app {
proxy_pass http://127.0.0.1:8000;
}
Что делает этот код?
location /app: указывает Nginx отслеживать запросы, начинающиеся с/app.proxy_pass ...: работает как кнопка перевода звонка. Эта директива говорит Nginx: «Когда поступит запрос к/app, передай его наlocalhost(127.0.0.1), порт 8000».
Именно эта передача запроса составляет суть обратного прокси. Клиент взаимодействует с Nginx, а Nginx от имени клиента обращается к серверу серверной части.
Структура файла должна выглядеть примерно так:
server {
listen 80 default_server;
...
location / {
try_files $uri $uri/ =404;
}
location /app {
proxy_pass http://127.0.0.1:8000;
}
}
Нажмите Ctrl+O, затем Enter, чтобы сохранить файл, и Ctrl+X, чтобы выйти из nano.
Проверьте конфигурацию и перезапустите настройки
Мы изменили конфигурационный файл, но Nginx по-прежнему использует старые правила. Поэтому нужно перезагрузить службу.
Сначала всегда проверяйте конфигурацию на опечатки перед перезагрузкой. Если перезагрузить повреждённую конфигурацию, веб-сервер может полностью перестать работать.
Выполните команду проверки:
sudo nginx -t
В выводе должны появиться сообщения:
syntax is oktest is successful
Если проверка завершилась успешно, перезагрузите Nginx, чтобы применить изменения:
sudo service nginx reload
Теперь Nginx обновил свои правила и готов перенаправлять запросы.
На этом этапе Nginx работает как маршрутизатор между URL-адресами и серверными службами, а не только как файловый сервер, читающий файлы с диска.
Проверьте работу прокси
На этом последнем шаге мы убедимся, что наш «секретарь» правильно выполняет свою работу.
Отправим веб-запрос к Nginx на порт 80 и запросим /app/. Nginx должен сразу перенаправить этот запрос серверу Python на порт 8000.
Выполните следующую команду:
curl http://localhost/app/
Вы должны увидеть сообщение от сервера серверной части:
Hello from the Python Backend.
Что произошло?
- Вы запросили у Nginx (
localhost:80) путь/app/. - Nginx проверил свои правила, сопоставил запрос с
/appи выполнил указаниеproxy_pass. - Nginx обратился к серверу Python на порту 8000.
- Сервер Python вернул страницу «Hello...» Nginx.
- Nginx вернул страницу «Hello...» вам.
Эту цепочку запросов важно запомнить: она встречается повсюду в современной инфраструктуре:
браузер -> обратный прокси -> сервер приложения -> обратный прокси -> браузер.
Вы успешно создали обратный прокси!
Итоги
В этой лабораторной работе вы успешно настроили Nginx как обратный прокси. Вы научились:
- Размещать простое серверное приложение с помощью Python.
- Настраивать Nginx с блоком
locationдля маршрутизации. - Перенаправлять трафик с помощью директивы
proxy_pass. - Проверять цепочку прокси с помощью
curl.
Эта архитектура лежит в основе современных веб-приложений. Она позволяет использовать Nginx для обеспечения безопасности и распределения нагрузки, пока другие приложения обрабатывают логику в фоновом режиме.



