Статьи

Как настроить обратный прокси NGINX в облаке Alibaba

Эта статья была создана в сотрудничестве с Alibaba Cloud . Спасибо за поддержку партнеров, которые делают возможным использование SitePoint.

Думаете, у вас есть лучший совет по лучшему использованию облачных сервисов Alibaba? Расскажите нам об этом и воспользуйтесь своим шансом выиграть MacBook Pro (плюс другие интересные вещи). Узнайте больше здесь .

Нужно обслуживать много сайтов из одной системы Linux, оптимизировать ресурсы и автоматизировать процесс запуска сайта? Тогда давайте серьезно и настроим среду, готовую к работе, используя Ubuntu, NGINX и Docker — все это в Alibaba Cloud.

Это несколько продвинутый учебник, и мы предполагаем некоторые знания о сети, администрировании сервера и программных контейнерах.

Понимание сценария

Если вы посмотрите это руководство, скорее всего, вам нужно управлять кластером серверов или большим количеством веб-сайтов — если не обоими — и посмотреть, какие у вас есть варианты для безопасной, производительной и гибкой среды. Ну, тогда вы пришли в нужное место!

Почему обратный прокси

Короче говоря, обратный прокси-сервер принимает запрос от клиента (обычно из Интернета), перенаправляет его на сервер, который может выполнить его (обычно в интрасети), и, наконец, возвращает ответ сервера обратно клиенту.

Те, кто делает запросы к прокси, могут не знать о внутренней сети.

Таким образом, обратный прокси-сервер — это «публичное лицо», которое находится на краю сети приложения и обрабатывает все запросы; таким образом, это похоже на балансировщик нагрузки. Но хотя реализация балансировщика нагрузки имеет смысл только при наличии нескольких серверов, вы можете развернуть обратный прокси-сервер только с одним веб-сервером, на котором размещено несколько сайтов, и это может быть особенно полезно, когда для этих сайтов существуют разные требования к конфигурации.

У этого подхода есть некоторые преимущества:

  • Производительность Ряд методов веб-ускорения, которые могут быть реализованы, в том числе:
    • Сжатие : ответы сервера могут быть сжаты перед возвратом их клиенту для уменьшения пропускной способности.
    • Завершение SSL : расшифровка запросов и шифрование ответов могут высвободить ресурсы на серверной части при одновременной защите соединения.
    • Кэширование : возвращение хранит копии содержимого, когда тот же запрос размещается другим клиентом, может уменьшить время отклика и нагрузку на внутренний сервер.
  • Безопасность Вредоносные клиенты не могут напрямую обращаться к вашим веб-серверам, а прокси-сервер эффективно выступает в качестве дополнительной защиты; и количество соединений может быть ограничено, сводя к минимуму влияние атак распределенного отказа в обслуживании (DDoS).
  • Гибкость Один URL-адрес может быть точкой доступа к нескольким серверам независимо от структуры сети за ними. Это также позволяет распределять запросы, максимизируя скорость и предотвращая перегрузку. Клиенты также узнают только IP-адрес обратного прокси-сервера, так что вы можете прозрачно изменить конфигурацию вашего бэк-энда, так как он лучше соответствует вашему трафику или архитектурным потребностям.

Почему NGINX

Логотип NGINX

NGINX Plus и NGINX являются лучшими в своем классе решениями обратного прокси-сервера, используемыми веб-сайтами с высоким трафиком, такими как Dropbox, Netflix и Zynga. Более 287 миллионов веб-сайтов по всему миру, в том числе большинство из 100 000 загруженных веб-сайтов , используют NGINX Plus и NGINX для быстрой, надежной и безопасной доставки своего контента.

Что такое обратный прокси-сервер? по NGINX.

Apache великолепен и, вероятно, лучше всего подходит для многоцелевого веб-сервера со всеми элементами питания. Но по этой самой причине он также может быть более ресурсоемким. Кроме того, Apache является многопоточным даже для отдельных веб-сайтов, что само по себе неплохо, особенно для многоядерных систем, но это может значительно увеличить нагрузку на процессор и использование памяти при размещении нескольких сайтов.

Настройка Apache для повышения производительности возможна, но требует времени и опыта. NGINX использует противоположный подход в своем дизайне — минималистский веб-сервер, который вам нужно настроить, чтобы добавить больше функций, что, честно говоря, также требует некоторого опыта.

Короче говоря, NGINX значительно превосходит Apache по производительности и производительности. Для одного сайта, который вы можете не заботиться, в кластере или при размещении множества сайтов, NGINX, безусловно, будет иметь значение .

Почему Alibaba Cloud

Логотип Alibaba Cloud

Являясь частью Alibaba Group (Alibaba.com, AliExpress), Alibaba Cloud существует уже почти десять лет на момент написания этой статьи. Это крупнейший в Китае поставщик общедоступных облачных услуг и третья часть мира ; так что это не совсем «новый игрок» на арене облачных сервисов.

Однако лишь в последнее время Alibaba решительно вышла с китайского и азиатского рынков, чтобы погрузиться в «западный мир». Это полнофункциональное предложение: гибкие вычисления, службы баз данных, хранилище и CDN, служба приложений, домен и веб-сайт, безопасность, сети, аналитика, Alibaba Cloud покрывает все это .

Развертывание в Alibaba Cloud

Вам потребуется учетная запись Alibaba Cloud, прежде чем вы сможете настроить свой Linux-бокс. И хорошая новость в том, что вы можете получить один бесплатно! Для получения полной информации см. Как зарегистрироваться и начать работу .

В этом руководстве будет использоваться Ubuntu Linux, поэтому вы можете ознакомиться с руководством « Как настроить свой первый сервер Ubuntu 16.04 в Alibaba Cloud» ). Напоминаем, что вы могли бы использовать Debian , CentOS , и на самом деле вы можете пойти дальше и проверить 3 способа установки Linux-сервера в Alibaba Cloud .

После того, как вы получите свою учетную запись Alibaba Cloud и ваш Linux-сервер будет запущен, все в порядке.

Руки вверх!

Установка NGINX

Если бы мы хотели использовать весь процесс сами, нам сначала нужно было бы установить NGINX.

В Ubuntu мы использовали следующие команды:

$ sudo apt-get update
$ sudo apt-get install nginx

И вы можете проверить состояние веб-сервера с помощью systemctl

 $ systemctl status nginx    

С помощью systemctlstopstartrestartenabledisable

Вот два основных каталога, которые нас интересуют:

  • /var/www/html
  • /etc/nginx

Теперь настройка обратного прокси-сервера может быть довольно обременительной, так как есть ряд сетевых настроек, которые нам нужно пройти, и файлы, которые нам нужно обновить, когда мы добавляем сайты / узлы позади нашего прокси-сервера.

Это, конечно, если мы не автоматизируем все это с помощью программных контейнеров …

Докер на помощь

Прежде чем мы сможем начать использовать программные контейнеры для автоматизации нашего рабочего процесса, мы сначала должны установить Docker, что для Ubuntu является довольно простым процессом.

Удалите любую старую версию:

 $ sudo apt-get remove docker docker-engine docker.io

Установите последнюю версию Docker CE:

 $ sudo apt-get update
$ sudo apt-get install docker-ce

Если вы хотите установить определенную версию Docker или настроить репозиторий Docker, см. Get Docker CE для Ubuntu .

Настройка сети

Частью настройки инфраструктуры обратного прокси-сервера является правильная настройка сетевых правил.

Итак, давайте создадим сеть с Docker:

 $ docker network create nginx-proxy

И верите или нет, сеть установлена!

NGINX-прокси!

Теперь, когда на нашем сервере Ubuntu запущен Docker, мы можем упростить процесс установки, настройки обратного прокси-сервера и запуска новых сайтов.

Джейсон Уайлдер проделал потрясающую работу по созданию образа Docker, который делает именно это — jwilder / nginx-proxy , автоматизированный прокси-сервер NGINX для контейнеров Docker, использующий docker-gen , который отлично работает из коробки.

Вот как вы можете запустить прокси:

 $ docker run -d -p 80:80 -p 443:443 --name nginx-proxy --net nginx-proxy -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

По существу:

  • мы сказали Docker запустить NGINX в качестве демона / службы ( -d
  • сопоставил порты HTTP и HTTPS прокси (80 и 443) с портами веб-сервера ( -p 80:80 -p 443:443
  • назвал прокси NGINX для использования в будущем ( --name nginx-proxy
  • использовал сеть, которую мы ранее установили ( --net nginx-proxy
  • отобразил сокет UNIX, который слушает демон Docker, чтобы использовать его в сети ( -v /var/run/docker.sock:/tmp/docker.sock:ro

И верьте, хотите нет, обратный прокси-сервер NGINX запущен и работает!

Запуск сайтов, много сайтов

Обычно при использовании Docker вы запускаете «контейнерное» приложение, являющееся стандартным сайтом WordPress, определенной конфигурацией Moodle или вашими собственными изображениями с вашими собственными приложениями.

Запустить прокси-контейнер теперь так же просто, как указать виртуальный домен с помощью VIRTUAL_HOST=subdomain.yourdomain.com

 $ docker run -d --net nginx-proxy -e VIRTUAL_HOST=subdomain.yourdomain.com --name site_name your_docker_image

Где your_docker_image

И верьте, хотите нет, ваше веб-приложение онлайн!

… Но хорошо, давайте объясним, что только что произошло. jwilder / nginx-proxy прозрачно позаботился о создании всех файлов конфигурации NGINX с использованием предоставленного вами имени хоста и выполнении всей необходимой сетевой маршрутизации в программный контейнер, на котором работает ваше приложение; все это одной линией bash — разве это не сумасшествие?

Обратите внимание, что IP-адрес, который вы будете использовать для доступа к своим веб-приложениям, всегда будет одинаковым, о внутренней маршрутизации и настройках для ваших сайтов уже позаботились, но вам просто нужно убедиться, что вы сопоставили ваши домены и субдомены соответственно прокси.

Дополнительный совет: использование Docker Compose

Для тех из вас, кто является опытным пользователем Docker, мы можем продвинуть автоматизацию немного дальше с Docker Compose.

Собираем все вместе в файл docker-compose.yml

 version: "2"

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    networks:
      - nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  app_name:
    container_name: your_app_name
    image: your_docker_image
    environment:
      - VIRTUAL_HOST: subdomain.yourdomain.com
    networks:
      - nginx-proxy

networks:
  nginx-proxy:
    external:
      name: nginx-proxy
  back:
    driver: bridge

Кроме того, с помощью Docker Compose вы также можете настроить практически всю необходимую инфраструктуру — базы данных, все ваши приложения, каждая из которых имеет собственную конфигурацию Apache / NGINX и т. Д. Это выходит за рамки данной статьи, но вы можете найти больше информации в обзоре Docker Compose .

Ресурсы

Об облаке Alibaba :

О NGINX :

О докере :

Завершение

Мы только что достигли чего-то очень сложного — инфраструктуры, способной управлять сотнями сайтов из одной точки входа, с сильным акцентом на оптимизацию ресурсов, и автоматизированного конвейера. Престижность!

Как мы уже упоминали, обратные прокси могут быть только отправной точкой при реализации балансировки нагрузки на сервер (SLB), брандмауэра веб-приложений (WAF) и даже сети доставки контента (CDN). Мы углубимся в это в будущем.