Hostwinds Учебники
Результаты поиска для:
Содержание
Теги: Cloud Servers, SSL, VPS
Если вы запускаете веб -приложение на частном порту (например, Localhost: 3000), он не доступен непосредственно через Интернет.Один из наиболее эффективных способов надежно разоблачить это приложение - это поставить обратный прокси перед ним.
Nginx-это легкий хорошо известный инструмент, который может сделать именно это-получить входящий трафик и перенаправить его в ваше приложение-а также обрабатывать HTTPS бесплатным сертификатом SSL от Let's Encrypt.
В этом руководстве вы узнаете, как:
Новичок в веб -серверах?Проверьте наше объяснение на Как работают веб -серверы.
А Обратный прокси это сервер, который находится между вашим пользователем и вашими бэкэнд -службами.Вместо вашего приложения публично прослушивает порт (например, 3000), Nginx сначала получает трафик, а затем передает его приложению, работающему в фоновом режиме.
Вот почему этот подход так полезен:
Даже если ваше приложение уже может обрабатывать веб -трафик, использование NGINX в качестве обратного прокси -сервера часто упрощает настройку, повышает гибкость и увеличивает управление.
Прежде чем мы начнем, давайте убедитесь, что у вас есть все, что вам нужно:
A yourdomain.com → 123.123.123.123
A www.yourdomain.com → 123.123.123.123
Распространение может занять несколько минут до нескольких часов.
Не знаете, как настроить DNS?Вот Как добавить запись с большинством доменных хостов.
Примечание: Если ваше приложение еще не работает, это нормально - вы все равно можете пройти через настройку и проверить позже.
sudo apt update
sudo apt install nginx
Затем убедитесь, что он работает:
sudo systemctl status nginx
Вы должны увидеть «Active (бег)».
sudo apt install certbot python3-certbot-nginx
Этот плагин позволяет автоматическому изменению конфигурации NGINX, когда вы запросите сертификат - не требуется ручное редактирование для базовых настройки.
Есть еще одна операционная система?Следуйте этому руководству Как установить давайте зашифруйте на Fedora и Debian
Теперь, когда ваша система готова, первым реальным шагом является настройка Nginx для прослушивания трафика в вашем домене и перенаправить его в ваше внутреннее приложение - это то, что делает Nginx действовать как обратный прокси.
Без этой настройки пользователи, пытающиеся посетить ваш веб -сайт, достигнут пустой страницы или по умолчанию Nginx Ecrement.Вам нужно явно сказать nginx:
Вы создадите файл конфигурации для вашего домена в каталоге NGINX-сайты.Это сохраняет организованные конфигурации и позволяет легко включить или отключить отдельные сайты.
sudo nano /etc/nginx/sites-available/yourdomain.com
Вставьте в следующий блок, настраивая домен и порт приложения по мере необходимости:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
# Pass important headers to the backend
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;
}
}
Nginx использует символические ссылки в с поддержкой сайтов каталог для активации сайтов.Итак, теперь вы создадите ссылку и перезагрузите Nginx:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
Проверьте на наличие синтаксических ошибок.Если все выглядит хорошо:
sudo systemctl reload nginx
Ваш обратный прокси сейчас вживую - просьба http://yourdomain.com будет передано в ваше приложение на порту 3000.
С обратным прокси, работающим над HTTP, следующим шагом является обеспечение его HTTPS.Это добавляет шифрование ко всему общению между вашими пользователями и вашим сервером - защита учетных данных, запросов API, личных данных и многого другого.
Вы используете Ellis Encrypt, бесплатный орган сертификации и сертификат, который автоматизирует процесс.
Запустите эту команду, заменив домены на ваши фактические значения:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Что это делает:
Certbot будет:
Кончик: Если ваш DNS не полностью распространяется, или ваш сервер брандмауэр блокирует 80, проверка не удастся.Вы можете проверить это с помощью:
curl -I http://yourdomain.com
Чтобы лучше понять порты, ознакомьтесь с нашим руководством на Как работают порты веб -сервера.
После завершения Certbot ваш конфигурация Nginx должна включать что -то подобное:
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
Теперь вы должны иметь возможность посетить https://yourdomain.com и увидеть свой сайт с действительным сертификатом SSL.
Если вы не выбрали опцию перенаправления во время настройки CertBot, вы можете добавить это вручную:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
Это заставляет все HTTP -трафик быть перенаправленным на HTTPS, что гарантирует, что пользователи случайно не используют небезопасную версию вашего сайта.
После того, как ваш сертификат SSL будет на месте, вы можете точно настроить Nginx для повышения безопасности и совместимости.Эти настройки заходят внутри блока HTTPS Server.
Вот улучшенный пример:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
Эти изменения улучшают ваш балл безопасности SSL и защищают посетителей от атак понижения или небезопасного выбора шифрования.
Необязательный: Вы можете проверить свой сайт с помощью SSL Labs, чтобы увидеть, как работает ваша конфигурация, и получить конкретные предложения по улучшению.
Для еще более сильного шифрования вы можете генерировать пользовательский ключ Diffie-Hellman (DH).Этот шаг не является обязательным, но его часто рекомендуется для производственных сред.
Запустите эту команду, чтобы создать 2048-битную группу DH:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Затем добавьте следующую строку в свой блок SSL -сервера:
ssl_dhparam /etc/ssl/certs/dhparam.pem;
Параметры Diffie-Hellman укрепляют Впередная секретность, что означает, что даже если ваш личный ключ каким -то образом скомпрометирован в будущем, прошлые зашифрованные сеансы все равно будут безопасными.
Чтобы создать группу DH, требуется несколько минут, но это единовременный шаг, который стоит сделать для лучшей осанки безопасности.
Давайте истекаем сертификаты зашифровать каждые 90 дней.К счастью, Certbot устанавливает системный таймер, который проверяет два раза в день на сертификаты из -за истечения срока действия и автоматически продлевает их.
Вы можете подтвердить, что таймер активен:
sudo systemctl list-timers | grep certbot
Вы должны увидеть что -то вроде этого:
NEXT LEFT LAST PASSED UNIT ACTIVATES
2025-06-19 04:00:00 UTC 12h 2025-06-18 04:00:00 UTC 11h ago certbot.timer certbot.service
Чтобы проверить процесс обновления вручную (без внесения изменений), запустите:
sudo certbot renew --dry-run
Это имитирует полный процесс обновления и подтверждает, что ваша система готова к автоматическому обработке.
Если ошибок нет, ваши сертификаты будут тихо продлить в фоновом режиме.
Теперь, когда ваш обратный прокси настроен и защищен SSL, рекомендуется завершить несколько практических проверок и лучших практик.
Эти простые привычки могут помочь предотвратить проблемы в будущем, облегчить поддержание вашей конфигурации и убедиться, что все продолжает работать так, как вы ожидаете.
Даже если все, кажется, работает, потратить несколько дополнительных минут здесь, может сэкономить ваше время и проблемы позже.
Перезапустите приложение, если оно не обнаруживает изменений
Некоторые приложения должны быть перезапущены, чтобы правильно работать за прокси.
Проверьте журналы
Вы можете отслеживать журналы Nginx на предмет ошибок или необычного трафика:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Держите Nginx и Certbot
Используйте Sudo Apt Update && Sudo APT обновление регулярно.Обновленные пакеты исправляют ошибки, улучшение совместимости и проблемы безопасности исправления.
После того, как вы освоили основы настройки безопасного обратного прокси, вы можете расширить свою конфигурацию, чтобы удовлетворить более сложные потребности.Вот несколько общих сценариев, которые могут помочь вам получить больше от вашего сервера.
Если вы запускаете несколько веб -приложений в разных портах, Nginx может направлять запросы в каждое приложение на основе пути домена или URL.
Пример: разные домены
server {
listen 80;
server_name app1.example.com;
location / {
proxy_pass http://localhost:3001;
# proxy headers here
}
}
server {
listen 80;
server_name app2.example.com;
location / {
proxy_pass http://localhost:3002;
# proxy headers here
}
}
Эта настройка позволяет вам обслуживать несколько приложений, используя отдельные субдомены, все через Nginx на стандартных портах.
Используете Docker?Учиться Как прокси -раз.
В качестве альтернативы, вы можете прокси на основе путей URL, что полезно, если вы хотите все приложения под одним доменом:
server {
listen 80;
server_name example.com;
location /app1/ {
proxy_pass http://localhost:3001/;
# proxy headers here
}
location /app2/ {
proxy_pass http://localhost:3002/;
# proxy headers here
}
}
Примечание: При использовании прокси, основанного на пути, сцепления с задними чертами и переписыванием URL могут стать хитрыми-убедитесь, что ваше бэкэнд-приложение может обрабатывать, что подпадает под патроном.
Вы можете ограничить количество запросов, которые клиент может сделать в заданный срок, чтобы защитить ваш бэкэнд от злоупотребления или случайной перегрузки.
Добавьте это в блок http в /etc/nginx/nginx.conf:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
Затем в вашем сервере или блоке местоположения:
limit_req zone=mylimit burst=20 nodelay;
Эта конфигурация допускает 10 запросов в секунду с всплесками до 20 запросов, отбрасывая избыточные запросы, чтобы избежать перегрузки вашего приложения.
Если у вас есть несколько экземпляров вашего приложения (например, несколько контейнеров или VPS), Nginx может распространять трафик среди них:
upstream backend {
server 192.168.1.10:3000;
server 192.168.1.11:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
# proxy headers here
}
}
NGINX уравновешивает запросы по кругу по умолчанию, но вы можете настроить их для других методов, таких как наименьшие соединения или IP-хэш.
Чтобы узнать больше, ознакомьтесь с нашим руководством на DNS Балансировка нагрузки.
Вы можете настроить журнал, чтобы включить важную информацию о доверенности для устранения неполадок или аналитики:
log_format proxy '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'upstream_response_time $upstream_response_time '
'request_time $request_time';
access_log /var/log/nginx/proxy_access.log proxy;
Это регистрирует время отклика вверх по течению и общее время запроса, помогая определить медленные ответы на бэкэнд.
Вы можете добавить или изменить заголовки HTTP для безопасности или функциональности:
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy no-referrer-when-downgrade;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Эти заголовки защищают от ClickJacking, Mime Sniff и обеспечения использования HTTPS.
Написано Hostwinds Team / Июнь 14, 2019