Как настроить обратный прокси Nginx в Ubuntu/Debian

Обратный прокси-сервер Nginx HTTPS — это промежуточная прокси-служба, которая принимает запрос клиента, передает его одному или нескольким серверам, а затем доставляет ответ сервера обратно клиенту. Хотя большинство распространенных приложений могут работать как веб-серверы сами по себе, веб-сервер Nginx может предоставлять ряд расширенных функций, таких как балансировка нагрузки, возможности TLS/SSL и ускорение, которых не хватает большинству специализированных приложений. Используя обратный прокси-сервер Nginx, все приложения могут воспользоваться этими функциями.

Преимущества использования обратного прокси Nginx на экземпляре

Установка обратного прокси-сервера Nginx HTTPS дает важные преимущества:
  • Балансировка нагрузки: обратный прокси-сервер Nginx может выполнять балансировку нагрузки, которая помогает равномерно распределять клиентские запросы между внутренними серверами. Это также улучшает избыточность, так как если один сервер выходит из строя, обратный прокси просто перенаправляет запросы на другой сервер в соответствии с политикой маршрутизации.
  • Повышенная безопасность: обратный прокси-сервер Nginx также действует как линия защиты для ваших внутренних серверов. Настройка обратного прокси-сервера гарантирует, что идентификационные данные ваших внутренних серверов останутся неизвестными.
  • Лучшая производительность: известно, что Nginx лучше работает при доставке файлов статического содержимого и анализе URL-адресов.
  • Простота ведения журнала и аудита: поскольку при реализации обратного прокси-сервера Nginx существует только одна точка доступа, это значительно упрощает ведение журнала и аудит.
  • Зашифрованное соединение. Шифрование соединения между клиентом и обратным прокси-сервером Nginx с помощью TLS позволяет пользователям использовать зашифрованное и защищенное соединение HTTPS, защищая свои данные.

Требования

  • У вас есть привилегии sudo или доступ к пользователю root.
  • У вас есть веб-приложение, работающее на нестандартном веб-порту экземпляра.
  • У вас есть вычислительный экземпляр, на котором запущен Ubuntu или Debian.
  • Убедитесь, что ваше доменное имя указывает на IP-адрес вашего сервера (запись A или AAAA).

Установка и настройка Nginx

Примечание. Для этого руководства требуется, чтобы на вашем экземпляре уже было запущено веб-приложение. Вы можете, например, установить легкий веб-сервер, такой как Webfsd, который по умолчанию работает на порту 8000, чтобы к нему можно было подключиться через стандартные порты HTTP через прокси. При необходимости его можно установить с помощью apt install webfs.

В следующем примере мы настроим обратный прокси Nginx перед веб-сервером Apache. В результате мы предполагаем, что Apache уже установлен и настроен (на той же машине).

1. Обновите кеш пакетов APT и установите веб-сервер Nginx через диспетчер пакетов:
apt update
apt install nginx
2. Отключите виртуальный хост по умолчанию, который предварительно настроен при установке Nginx через диспетчер пакетов apt:
unlink /etc/nginx/sites-enabled/default
3. Войдите в каталог /etc/nginx/sites-available и создайте файл конфигурации обратного прокси.
cd /etc/nginx/sites-available
nano reverse-proxy.conf
4. Вставьте следующую конфигурацию Nginx в текстовый редактор. Прокси-сервер перенаправляет все входящие соединения на порт 80 на сервер Webfsd, прослушивая порт 8000. Измените значение порта в зависимости от порта конкретного приложения.
server {
listen 80;
listen [::]:80;

access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;

location / {
    proxy_pass http://127.0.0.1:8000;
    }
}
Примечание. Доступы и ошибки находятся в файлах журнала в /var/log/nginx.

5. Скопируйте конфигурацию из /etc/nginx/sites-available в /etc/nginx/sites-enabled. Рекомендуется использовать символическую ссылку.
ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/reverse-proxy.conf
6. Протестируйте файл конфигурации Nginx
nginx -t
который должен вернуть
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
7. Откройте веб-браузер на локальном компьютере и вставьте свой общедоступный IP-адрес, который будет отображать домашнюю страницу вашего веб-приложения.

Добавление TLS к обратному прокси-серверу Nginx с помощью Let's Encrypt

Убедитесь, что ваше доменное имя указывает на IP-адрес вашего сервера (запись A или AAAA). В противном случае будет ошибка.

При текущей настройке весь входящий трафик на стандартном незащищенном HTTP-порту обслуживается Nginx, который передает его веб-приложению на экземпляре.

По соображениям безопасности рекомендуется добавить уровень шифрования с TLS / SSL и использовать HTTPS. Хотя использование самозаверяющих сертификатов технически возможно, это может вызвать очень неудобства, поскольку при использовании самозаверяющего сертификата в веб-браузере пользователя по умолчанию отображается предупреждение. Сертификат аутентификации (CA) может выдавать доверенные сертификаты, которые распознаются большинством современных веб-браузеров. CA Let’s Encrypt предоставляет сертификат TLS бесплатно, а настройку Nginx можно легко выполнить с помощью Certbot, инструмента, предоставляемого EFF.

1. Установите Certbot на свой экземпляр с помощью диспетчера пакетов APT:
apt-get update
apt-get install software-properties-common
apt-get update
apt-get install python-certbot-nginx
2. Certbot предоставляет плагин, разработанный для веб-сервера Nginx, автоматизирующий большую часть работы по настройке, связанной с запросом, установкой и управлением сертификатом TLS:
certbot --nginx
3. Ответьте на запросы, отображаемые на экране, чтобы запросить действительный сертификат Let's Encrypt:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your.domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your.domain.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/reverse-proxy.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/reverse-proxy.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://your.domain.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your.domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Когда вас спросят, хотите ли вы автоматически перенаправлять HTTP-трафик на HTTPS, выберите вариант 2. Это включает автоматическое перенаправление всех входящих запросов через незашифрованное HTTP-соединение на безопасное HTTPS-соединение. Обеспечение дополнительного уровня безопасности для веб-приложения, работающего за обратным прокси-сервером Nginx.
Поделиться: