Настройка reverse proxy | Verdaccio
Использрвание reverse proxy является обычной практикой. Конфигурация ниже — рекомендованная, и наиболее часто используется.
Important, the headers are considered to resolve the public are X-Forwarded-Proto
for the protocol and Host
for the domain, please include them in your configuration.
Apache and mod_proxy
should not decode/encode slashes and leave them as they are:
For installing at relative path, /npm
, on the server
<VirtualHost *:80>
AllowEncodedSlashes NoDecode
ProxyPass /npm http://127.0.0.1:4873 nocanon
ProxyPassReverse /npm http://127.0.0.1:4873
</VirtualHost>
For installing at root path, /
, on the server
apacheconfig
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName npm.your.domain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/npm. your.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/npm.your.domain.com/privkey.pem
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
ProxyPass / http://127.0.0.1:4873/ nocanon
ProxyPassReverse / http://127.0.0.1:4873/
</VirtualHost>
</IfModule>
Конфигурация с SSL
Apache virtual server configuration.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName npm.your.domain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/npm.your.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/npm.your.domain.com/privkey.pem
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
ProxyPass / http://127.0.0.1:4873/ nocanon
ProxyPassReverse / http://127. 0.0.1:4873/
RequestHeader set X-Forwarded-Proto "https"
</VirtualHost>
</IfModule>
Invalid checksum
Sometimes the gzip compression can mess with the request when running npm install
and result in error messages like this:
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar zlib: incorrect data check
A possible fix for this, can be by disabling gzip compression for the virtual host, by adding this to your config:
SetEnv no-gzip 1
Resulting in a config like so:
<VirtualHost *:80>
AllowEncodedSlashes NoDecode
SetEnv no-gzip 1
ProxyPass /npm http://127.0.0.1:4873 nocanon
ProxyPassReverse /npm http://127.0.0.1:4873
</VirtualHost>
You should only add it to your virtual host config, if you are experiencing the issue.
The following snippet is a full docker
example can be tested in our Docker examples repository. /verdacciov3/(.*)$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://verdaccio_v3/$1;
proxy_redirect off;
}
}
SSL example
server {
listen 80;
return 302 https://$host$request_uri;
}server {
listen 443 ssl http2;
server_name localhost;ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;location / {
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;
proxy_pass http://verdaccio_v4_root;
proxy_read_timeout 600;
proxy_redirect off;
}location ~ ^/verdaccio/(. *)$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://verdaccio_v4_root/$1;
proxy_redirect off;
}
}
Run behind reverse proxy with different domain and port
Sub-directory
If the whole URL is being used for Verdaccio, you don’t need to define a url_prefix
, otherwise you would need something like this in your config.yaml
.
url_prefix: /sub_directory/
If you run Verdaccio behind reverse proxy, you may noticed all resource file served as relative path, like http://127.0.0.1:4873/-/static
To resolve this issue, you should send real domain and port to Verdaccio with Host
header
Nginx configure should look like this:
location / {
proxy_pass http://127.0.0.1:4873/;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
For this case, url_prefix
should NOT set in Verdaccio config
or a sub-directory installation:
location ~ ^/verdaccio/(. *)$ {
proxy_pass http://127.0.0.1:4873/$1;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
For this case, url_prefix
should set to /verdaccio/
Примечание: Слэш после пути — обязателен (
https://your-domain:port/verdaccio/
)!
Overriding the public url
Since
[email protected]
The new VERDACCIO_PUBLIC_URL
is intended to be used behind proxies, this variable will be used for:
- Used as base path to serve UI resources as (js, favicon, etc)
- Used on return metadata
dist
base path - Ignores
host
andX-Forwarded-Proto
headers - If
url_prefix
is defined would be appened to the env variable.
VERDACCIO_PUBLIC_URL='https://somedomain.org';
url_prefix: '/my_prefix'// url -> https://somedomain. org/my_prefix/
VERDACCIO_PUBLIC_URL='https://somedomain.org';
url_prefix: '/'// url -> https://somedomain.org/
VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix';
url_prefix: '/second_prefix'// url -> https://somedomain.org/second_prefix/'
Как использовать Apache в качестве обратного прокси с mod_proxy на CentOS 7
Обратный прокси — сервер представляет собой тип прокси-сервера, который принимает HTTP(S) запросы и прозрачно распределяет их на один или несколько внутренних серверов. Обратные прокси-серверы являются полезными, поскольку многие современные веб — приложения обработки входящих запросов HTTP с использованием серверов приложений бэкэнда, которые не должны быть доступны пользователям напрямую и часто поддерживают только элементарные функции HTTP.
Вы можете использовать обратный прокси-сервер для предотвращения непосредственной доступности основных серверов приложений. Они также могут быть использованы для распределения нагрузки от входящих запросов на нескольких различных серверах приложений, увеличивая производительность в масштабе и обеспечение отказоустойчивости. Они могут заполнить пробелы с функциями сервера приложений, которые они не предоставляют, такие как кэширование, сжатие а также шифрование SSL.
В этом учебном пособии вы настроите Apache в качестве основного обратного прокси — сервера с помощью расширения mod_proxy
для перенаправления входящих подключений к одному или нескольким внутренним серверам, работающих в той же сети. Этот учебник используется простой бэкенд, написанный с Flask web framework, но вы можете использовать любой сервер данных, которые вы предпочитаете.
Предпосылки
Следуя этому руководству, вам потребуется:
- Один сервер CentOS 7 с начальной настройкой сервера CentOS 7, включая sudo а не суперпользователя.
- Apache 2, установленный на сервере, следуя шагу как установить Linux, Apache, MySQL, PHP (LAMP) на CentOS 7.
- Необязательно, текстовый редактор
nano
установленный с помощью командыyum install nano
. CentOS поставляется с текстовым редакторомvi
по умолчанию, ноnano
может быть более удобным для пользователей.
Шаг 1 — Введение в необходимые модули Apache
Модули, которые необходимы для использования Apache в качестве обратного прокси — сервера включают в себя mod_proxy
и некоторые из его дополнительных модулей, которые расширяют ее функциональные возможности для поддержки различных сетевых протоколов. В частности, мы будем использовать:
mod_proxy
, главный прокси-модуль модуля Apache для перенаправления соединений; который позволяет Apache выступать в качестве шлюза для основных серверов приложений.mod_proxy_http
, добавляет поддержку проксирования HTTP соединений.mod_proxy_balancer
иmod_lbmethod_byrequests
, что добавлять новые функции балансировки нагрузки для нескольких внутренних серверов.
Все четыре модуля включены по умолчанию на новой установке CentOS 7. Вы можете убедиться, что они разрешены командой:
httpd -M
Выводом команды будет список всех включенных модулей Apache.
Вывод
. . . proxy_module (shared) . . . lbmethod_byrequests_module (shared) . . . proxy_balancer_module (shared) . . . proxy_http_module (shared) . . .
В случае , если модули не включены, вы можете включить их, открыв /etc/httpd/conf.modules.d/00-proxy.conf
с помощью текстового редактора nano
:
sudo nano /etc/httpd/conf.modules.d/00-proxy.conf
и раскомментировать линии с необходимыми модулями, удалив #
знак в начале строки, так что файл выглядит следующим образом :
/etc/httpd/conf.modules.d/00-proxy.conf
. . . LoadModule proxy_module modules/mod_proxy.so . . . LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests. so . . . LoadModule proxy_balancer_module modules/mod_proxy_balancer.so . . . LoadModule proxy_http_module modules/mod_proxy_http.so . . .
Для того, чтобы изменения вступили в силу, сохраните файл и перезапустить Apache.
sudo systemctl restart httpd
Apache теперь готов действовать в качестве обратного прокси-сервера для HTTP-запросов. На следующем шаге мы создадим два самых основных внутренних сервера. Это поможет нам проверить, если конфигурация работает правильно.
Шаг 2 — Создание внутренних тестовых серверов
Запуск некоторых простых внутренних серверов является простой способ проверить, что ваша конфигурация Apache работает должным образом . Здесь мы создадим два тестовых сервера, которые отвечают HTTP — запросам с печатью строки текста. Один сервер будет сказать
Примечание
В настоящих установках, Backend серверы, как правило, возвращают один и тот же тип содержимого. Тем не менее, для этого теста, в частности, имея два сервера, которые возвращают различные сообщения, позволяет легко проверить, что механизм балансировки нагрузки использует оба.
Flask является microframework Python для создания веб — приложений. Мы используем Flask для создания тестовых серверов, так как основное приложение требует всего несколько строк кода. Вам не нужно знать Python, чтобы настроить их.
Давайте установим пакет файлов IUS репозитория в первую очередь. IUS (Inline with Upstream Stable) является сообществом проект, который создает современные версии программного обеспечения для CentOS, в том числе на Python 3.
sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
Затем установите Python 3 и pip, рекомендуемый менеджер пакетов Python.
sudo yum -y install python35u python35u-pip
Используйте pip, чтобы установить Flask.
sudo pip3.5 install flask
Теперь, когда все необходимые компоненты установлены, начните с создания нового файла, который будет содержать код для первого сервера бэкэнда в домашнем каталоге текущего пользователя.
nano ~/backend1.py
Скопируйте следующий код в файл, а затем сохраните и закройте его.
~ / Backend1.py
from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'Привет мир!'
Первые две строки инициализации Flask framework. Существует одна функция, home()
, которая возвращает строку текста (Привет мир!
). Строка @app.route('/')
над home()
говорит Flask использовать home()
возвращаемое значение в качестве ответа на HTTP — запросы, направленных на /
корневой URL приложения.
Второй сервер Бэкэнд точно так же, как и первый, кроме возвращения другой строки текста, поэтому начните путем дублирования первого файла.
cp ~/backend1.py ~/backend2.py
Откройте вновь скопированный файл.
nano ~/backend2.py
Измените сообщение, которое будет возвращено, не Привет, мир! а Мой мир! , затем сохраните и закройте файл.
~ / Backend2.py
from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'Мой мир!'
Используйте следующую команду, чтобы запустить первый фоновый сервер на порту 8080
.
FLASK_APP=~/backend1.py flask run --port=8080 >/dev/null 2>&1 &
Здесь мы использовали команду flask
, установив переменную окружения FLASK_APP
в той же строке. Переменные окружения представляют собой удобный способ передачи информации о процессах, которые порождаются из оболочки.
В этом случае, используя переменную окружения гарантирует, что параметр применим только к запущенной команде и не будет оставаться доступным после того, как мы будет использовать другое имя файла точно так же использовать команду flask
, чтобы запустить второй сервер
Аналогичным образом, используйте эту команду, чтобы запустить второй сервер на порту
. Обратите внимание на другое значение для переменной окружения FLASK_APP
.
FLASK_APP=~/backend2.py flask run --port=8081 >/dev/null 2>&1 &
Вы можете проверить, что оба сервера работают с использованием curl
. Тестирование первого сервера:
curl http://127.0.0.1:8080/
Это выведет Привет, мир! в терминале. Проверка второго сервера:
curl http://127.0.0.1:8081/
Это выведет Мой мир!
Примечание
Для того, чтобы закрыть оба тестовых сервера после того, как вы больше не нуждаетесь в них, после того как вы закончите этот урок, вы можете просто выполнить killall flask.
На следующем шаге мы будем изменять конфигурационный файл Apache, чтобы включить его использование в качестве обратного прокси-сервера.
Шаг 3 — Изменение конфигурации по умолчанию. Включение обратного прокси-сервера
В этом разделе мы настроим виртуальный хост Apache по умолчанию, чтобы использовать в качестве обратного прокси-сервера для одного сервера бэкэнда или массива с балансировкой нагрузки внутренних серверов.
Примечание
В этом руководстве мы применяем настройки на уровне виртуального хоста. При установке по умолчанию Apache, нет настроенных виртуальных хостов. Мы будем создавать единый виртуальный хост по умолчанию, который будет ловить весь трафик. Тем не менее, вы можете использовать все эти фрагменты конфигурации на других виртуальных хостов.
Если ваш сервер работает на Apache как HTTP и HTTPS-сервер, ваша конфигурация обратного прокси-сервера должна быть размещена как в HTTP и HTTPS виртуальных хостов.
Создание нового виртуального хоста по умолчанию, создав новый пустой файл конфигурации Apache в каталоге /etc/httpd/conf.d
, используя nano
или ваш любимый текстовый редактор.
sudo nano /etc/httpd/conf.d/default-site.conf
В первом примере ниже показано, как настроить виртуальный хост по умолчанию для обратного прокси-сервера для одного сервера, а второй устанавливает балансировку нагрузки обратного прокси для нескольких внутренних серверов.
Пример 1 — Обратное проксирование сервера. Один бэкэнд.
Вставьте следующее содержимое в файл default-site.conf
, так что ваш файл конфигурации выглядит следующим образом:
/etc/httpd/conf.d/default-site.conf
<VirtualHost *:80> ProxyPreserveHost On ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ </VirtualHost>
Если вы следовали вместе с серверами, например, на шаге 2, используйте 127.0.0.1:8080
как написано в блоке выше. Если у вас есть свои собственные серверы приложений, используйте их адреса вместо этих.
Есть три директивы здесь:
ProxyPreserveHost
передают Apache оригинальныйHost
заголовок на внутренний сервер. Это полезно, так как это делает сервер бэкенд осознаный адрес, используемый для доступа к приложению.ProxyPass
главная директива конфигурации прокси. В этом случае, он указывает, что все в корневом URL (
) должен быть отображен на внутренний сервер по указанному адресу. Например, если Apache получает запрос на/example
, он будет подключаться и вернет ответ на оригинальный клиент.http://your_backend_server/example
ProxyPassReverse
должен иметь ту же конфигурацию, что иProxyPass
. Это говорит Apache, чтобы изменить заголовки ответа от сервера бэкэнда. Это гарантирует, что если внутренний сервер возвращает заголовок перенаправления местоположения, браузер клиента будет перенаправлен на адрес прокси – сервера и не адреса сервера, бэкенда, который не будет работать, как предполагалось.
Чтобы изменения вступили в силу, перезапустите Apache.
sudo systemctl restart httpd
Теперь, если вы получаете доступ к http://your_server_ip через веб – браузер, вы увидите ответ сервера бэкэнда вместо стандартной страницы приветствия Apache. Если вы следовали инструкциям Шаг 2, то вы будете видеть Привет мир!
Пример 2 — балансировки нагрузки между несколькими серверами Backend
Если у вас есть несколько внутренних серверов, хороший способ, чтобы распределить трафик между ними, когда проксирование заключается в использовании балансировки нагрузки функцией mod_proxy
.
Заменить все содержимое внутри блока VirtualHost
следующими, так чтобы ваш файл конфигурации выглядел следующим образом:
/etc/httpd/conf.d/default-site.conf
<VirtualHost *:80> <Proxy balancer://mycluster> BalancerMember http://127.0.0.1:8080 BalancerMember http://127.0.0.1:8081 </Proxy> ProxyPreserveHost On ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ </VirtualHost>
Конфигурация аналогична предыдущей, но вместо указания одного сервера бэкэнд напрямую, мы использовали дополнительный блок Proxy
для определения нескольких серверов. Блок с именем balancer://mycluster
(имя может быть свободно изменено) и состоит из одного или нескольких BalancerMember
, которые определяют, лежащие в основе адреса бэкенда сервера. ProxyPass
и директива ProxyPassReverse
используют пул балансировки нагрузки с именем mycluster
вместо конкретного сервера.
Если вы следовали примеру на шаге 2, используя 127.0.0.1:8080
и 127.0.0.1:8081
для директивы BalancerMember
, как написано в блоке выше. Если у вас есть свои собственные серверы приложений, используйте их адреса вместо этих.
Чтобы изменения вступили в силу, перезапустите Apache.
sudo systemctl restart httpd
Зайдите в веб – браузере по адресу http://your_server_ip, вы увидите бэкэнд сервера вместо стандартной страницы Apache. Если вы следовали инструкциям на Шаге 2, обновите страницу несколько раз должен показать Привет, мир! и AndreyEx мир!, То есть обратный прокси – сервер работал и балансировка нагрузки между обоими серверами.
Теперь вы знаете, как настроить Apache в качестве обратного прокси – сервера для одного или нескольких основных серверов приложений. mod_proxy
можно эффективно использовать для настройки обратного прокси – сервера для серверов приложений, написанных на широкий спектр языков и технологий, таких как Python и Django или Ruby, и Ruby On Rails. Он может также использоваться для балансировки трафика между множеством внутренних серверов для сайтов с большим количеством трафика или для обеспечения высокой доступности через несколько серверов, или для обеспечения безопасной поддержки SSL на серверах, не поддерживающих SSL изначально.
В то время как mod_proxy
с mod_proxy_http
это, возможно, наиболее часто используемые комбинации модулей, существует несколько других модулей, которые поддерживают различные сетевые протоколы. Мы не использовали их здесь, но и некоторые другие популярные модули включают в себя:
mod_proxy_ftp
для FTP.mod_proxy_connect
для SSL туннелирования.mod_proxy_ajp
для AJP (Apache JServ Protocol), на основе Tomcat.mod_proxy_wstunnel
для веб-сокетов.
Чтобы узнать больше о mod_proxy
, вы можете прочитать на официальном сайте Apache документацию о mod_proxy
.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Apache, CentOS, mod_proxy, Установка ПО на CentOS ПО для CentOS Кол-во комментариев: 0
Обратный прокси — Apache
mod_proxy работает заставить Apache выполнять «обратный прокси» — когда приходит запрос на определенные URL-адреса, Apache становится прокси-сервером и перенаправляет этот запрос на Дженкинс, а затем пересылает ответ от Дженкинса обратно клиенту.
Должны быть установлены следующие модули Apache:
прокси-сервер a2enmod a2enmod proxy_http Заголовки a2enmod
Типичная настройка для mod_proxy будет выглядеть так:
ProxyPass /jenkins http://localhost:8081/jenkins nocanon ProxyPassReverse/jenkins http://localhost:8081/jenkins Прокси-запросы выключены Алловэнкодедслэшес # Переопределение авторизации локального обратного прокси # Большинство дистрибутивов unix по умолчанию запрещают использование прокси # См. /etc/apache2/mods-enabled/proxy. conf в Ubuntu <Прокси-сервер http://localhost:8081/jenkins*> Отклонить заказ, разрешить Разрешить от всех прокси>
Предполагается, что вы запускаете Jenkins на порту 8081.
Чтобы эта настройка работала, контекстный путь Jenkins должен быть таким же между вашим Apache и Jenkins (то есть вы не можете запустить Jenkins на
http://localhost:8081/ci и открыть его по адресу
http://localhost:80/jenkins).
Задайте контекстный путь в Windows, изменив файл jenkins.xml
файл конфигурации и добавив —prefix=/jenkins (или аналогичный) в <аргументы> запись.
Установите контекстный путь при использовании пакета Linux
запустив systemctl отредактируйте jenkins
и добавьте следующее:
[Service] Environment="JENKINS_PREFIX=/jenkins"
При работе на выделенном сервере и использовании контекста / make убедитесь, что вы добавили косую черту в конце всех URL-адресов в параметрах прокси в apache. В противном случае вы можете столкнуться с ошибками прокси. Итак,
ProxyPass / http://localhost:8080/ nocanon
вместо
ProxyPass / http://localhost:8080 nocanon # не работает
Обратите внимание, что это делает 9/(?\!.well-known) http://localhost:8080 nocanon
ProxyRequests Off предотвращает работу Apache в качестве переадресации прокси-сервер (кроме ProxyPass ), рекомендуется его включать если сервер не должен работать как прокси.
Как вариант nocanon
, так и ProxyPass
, и AllowEncodedSlashes NoDecode
требуются для некоторых Jenkins
особенности для работы.
Если вы используете Apache в Linux с повышенной безопасностью (SE-Linux) машине необходимо заставить SE-Linux поступать правильно, выдавая как корень
setsebool -P httpd_can_network_connect true
Если это не выдано, Apache не будет разрешено пересылать прокси запросы к Jenkins, и будет отображаться только сообщение об ошибке.
Поскольку Jenkins уже сжимает свой вывод, вы не можете использовать обычный фильтр proxy-html для изменения URL-адресов:
SetOutputFilter proxy-html
Вместо этого вы можете использовать следующее:
SetOutputFilter INFLATE;proxy-html;DEFLATE ПроксиHTMLURLMap http://ваш_сервер:8080/jenkins /jenkins
Но поскольку Дженкинс ведет себя хорошо, лучше просто не используйте SetOutputFilter и ProxyHTMLURLMap.
При проблемах с Дженкинсом иногда обслуживает случайный мусор страниц, то может помочь следующее:
SetEnv proxy-nokeepalive 1
Некоторые плагины определяют URL-адреса из клиентских запросов из заголовка хоста, поэтому
если у вас возникли проблемы с неправильными URL-адресами, вы можете попробовать переключиться
on Директива ProxyPreserveHost
, которая по умолчанию отключена:
ProxyPreserveHost On
mod_proxy с HTTPS
Вы можете добавить дополнительную директиву ProxyPassReverse
для перенаправления URL-адресов без SSL, сгенерированных Jenkins, на сторону SSL.
Предполагая, что ваш веб-сервер your.host.com
, поместите следующее в
определение виртуального хоста SSL поможет:
ProxyRequests Off ProxyPreserveHost включен Алловэнкодедслэшес <Прокси-сервер http://localhost:8081/jenkins*> Отклонить заказ, разрешить Разрешить от всех прокси> ProxyPass/jenkins http://localhost:8081/jenkins nocanon ProxyPassReverse/jenkins http://localhost:8081/jenkins ProxyPassReverse/jenkins http://your. http://www.example.com/jenkins/ https://www.example.com/jenkins/
Но также может работать простая переадресация, как указано выше ( первый фрагмент HTTPS) и добавьте
RequestHeader set X-Forwarded-Proto "https" RequestHeader устанавливает X-Forwarded-Port «443»
в конфигурации сайта HTTPS, как это делает демонстрация Docker (ниже).
( X-Forwarded-Port
не интерпретируется Дженкинсом до
JENKINS-23294 так это
также может быть желательно настроить контейнер сервлетов для указания
исходящий порт.)
NameVirtualHost *:80 NameVirtualHost *:443 <Виртуальный хост *:80> Веб-мастер администратора сервера@localhost Перенаправление постоянное / https://www.example.com/ виртуальный хост> <Виртуальный хост *:443> SSLEngine включен SSLCertificateFile /etc/ssl/certs/cert.pem Веб-мастер администратора сервера@localhost Прокси-запросы выключены ProxyPreserveHost включен Алловэнкодедслэшес <Прокси *> Отклонить заказ, разрешить Разрешить от всех прокси> ProxyPass / http://localhost:8080/ nocanon ProxyPassReverse / http://localhost:8080/ ProxyPassReverse / http://www. example.com/ RequestHeader устанавливает X-Forwarded-Proto "https" RequestHeader устанавливает X-Forwarded-Port "443" Виртуальный хост>
Руководство по использованию Apache в качестве обратного прокси-сервера
Введение
Расширения сторонних производителей являются чрезвычайно полезными дополнениями. Это значительно упрощает настройку и работу с сервером, таким как Apache HTTP. В случае необходимости вы даже можете использовать некоторые из этих модулей в Apache для запуска обратного прокси-сервера. Вы можете либо удалить слой из настройки вашего сервера, либо использовать модуль для перенаправления соединений.
В этом руководстве мы обсудим Apache и различные модули, связанные с серверной платформой, такие как mod_proxy. Мы также увидим, как вы можете использовать его в качестве обратного прокси-сервера для перенаправления подключений к вашим внутренним серверам приложений.
Что такое Apache?
Apache — это HTTP-сервер, который очень часто используется для веб-приложений. Но вы можете использовать его по разным причинам и на нескольких платформах. Вы можете установить веб-сервер Apache в Ubuntu, следуя нашему пошаговому руководству. Кроме того, следуйте этому руководству, чтобы узнать, как защитить свой сервер Apache с помощью Let’s Encrypt. Вы также можете узнать, как настроить виртуальные хосты Apache в Ubuntu 20.04.
Вы можете дополнительно изучить функции и реализацию Apache с помощью внешних модулей. Это сторонние модули, которые можно использовать для выполнения различных задач, связанных с подключениями и настройками. Например, вы можете использовать модуль mod_rewrite для перезаписи URL-адресов на основе правил. Еще один из этих модулей — mod_proxy. Последний модуль в значительной степени недоиспользуется в сообществе. В первую очередь потому, что многие люди не знают о масштабах его функциональности и приложений. Mod_proxy, как следует из названия, может помочь вам установить шлюз или прокси для внутренних серверов.
Давайте подробно рассмотрим mod_proxy и то, как вы можете использовать его в качестве обратного прокси.
Mod_proxy: использование Apache в качестве обратного прокси-сервера
Как вы, наверное, уже догадались, mod_proxy — это модуль. Это модуль в Apache, который вы можете использовать для создания и перенаправления различных соединений. Вы также можете активировать и настроить его, как и любой другой модуль в вашей системе. Уникальность mod_proxy в том, что это не один модуль. Фактически, он представляет собой набор различных модулей, которые вы найдете ниже. Каждый из них выполняет свою функцию. Таким образом, mod_proxy дает вам большое разнообразие функций.
Взгляните на следующие модули mod_proxy:
mod_proxy
Это основной модуль прокси. В Apache вы можете использовать этот модуль для настройки и управления различными соединениями. Это также может помочь вам перенаправить соединения.
mod_proxy_http
Как следует из названия, этот модуль работает с протоколами HTTP и HTTPS. Вы можете использовать этот модуль для реализации прокси-функций этих протоколов.
mod_proxy_ftp
Mod_proxy_ftp работает, когда вы имеете дело с протоколом FTP.
mod_proxy_connect
Этот модуль полезен при выполнении туннелирования SSL.
mod_proxy_ajp
Вы можете использовать mod_proxy_ajp при работе с протоколом AJP.
mod_proxy_wstunnel
Это полезно, когда вы работаете с веб-сокетами, такими как WS и WSS.
mod_proxy_balancer
Если вы хотите получить доступ к функциям балансировки нагрузки и кластеризации, вы можете использовать этот модуль.
mod_cache
Модуль mod_cache, как и ожидалось, полезен для целей кэширования.
mod_headers
Вы можете использовать этот модуль для управления заголовками, которые вы создаете с использованием протокола HTTP.
mod_deflate
Этот модуль используется для сжатия.
Если вы хотите узнать больше об этих модулях, вы можете посетить официальный веб-сайт Apache. Официальная документация также дает вам больше информации о mod_proxy и самом Apache.
Как установить Apache и mod_proxy?
Вот несколько простых шагов для установки Apache и mod_proxy в вашей системе:
- Подготовка сервера
Прежде всего, вам нужно убедиться, что ваш облачный сервер подготовлен. Для этого вам необходимо обновить операционную систему и связанное с ней программное обеспечение до последних версий.
Используйте следующие команды для обновления ваших приложений:
способ установить способность обновление способностей aptitude -y обновить
apt install aptitude обновление aptitude aptitude -y upgrade |
- Установка пакета Essentials
После того, как вы подготовили свой сервер, вам необходимо оснастить его необходимыми инструментами. Для этого вам необходимо установить пакет build-essential. Этот пакет состоит из всех основных инструментов, необходимых для установки из исходного кода. Вы можете установить его с помощью этой команды:
aptitude install -y build-essential
aptitude install -y build-essential |
- Захват модулей и зависимостей
Наконец, вам необходимо установить модули и зависимости. Вы можете сделать это, выполнив следующую команду:
установка aptitude -y apache2 apache2-bin libxml2-dev
aptitude install -y apache2 apache2-bin libxml2-dev |
Активация модулей: как настроить Apache с прокси-подключениями?
Прежде чем вы приступите к настройке Apache, вам нужно активировать свои модули. Эти модули помогут вам сделать необходимые настройки и выполнить различные задачи.
Для начала нужно проверить, какие модули уже работают в вашей системе. Не только это, но вам также необходимо убедиться, что все модули установлены правильно и могут быть включены. Выполнение этой команды покажет все доступные модули на вашем сервере Apache:
а2енмод
а2енмод |
Как видите, в ответе показаны все доступные модули в виде подробного списка. Просмотрите этот список и определите, какие модули вы хотите активировать. Чтобы сообщить Apache, вы можете использовать следующую команду и ввести нужные модули вместо примеров:
proxy proxy_ajp proxy_http переписать заголовки deflate proxy_balancer proxy_connect proxy_html lbmethod_byrequests
proxy proxy_ajp proxy_http переписать заголовки deflate proxy_balancer proxy_connect proxy_html lbmethod_byrequests |
С другой стороны, вы также можете активировать каждый модуль по отдельности. Для этого вы должны использовать следующие команды:
прокси a2enmod a2enmod proxy_http a2enmod proxy_ajp a2enmod переписать a2enmod выкачать заголовки a2enmod a2enmod proxy_balancer a2enmod proxy_connect a2enmod proxy_html a2enmod lbmethod_byrequests
1 2 3 4 5 6 7 8 10 3 9 3 | a2enmod proxy a2enmod proxy_http a2enmod proxy_ajp a2enmod rewrite a2enmod deflate a2enmod headers a2enmod proxy_balancer a2enmod proxy_connect a2enmod proxy_html a2enmod lbmethod_byrequests |
Некоторые модули, вероятно, будут активированы по умолчанию на вашем сервере. Вы можете задаться вопросом, как вы можете подтвердить, что они включены. Чтобы убедиться, что нужный модуль активен, можно попробовать активировать его дважды. Это гарантирует, что модуль включен.
- Изменить параметры конфигурации по умолчанию
Во-первых, необходимо изменить параметры конфигурации по умолчанию. Для этого вы должны получить доступ к файлу конфигурации по умолчанию, который называется 000-default.conf. Этот файл находится внутри /etc/apache2/sites-enabled. Нам нужно изменить его как таковой, чтобы он выполнял прокси-функцию.
Вы начнете с открытия текстового редактора nano для редактирования виртуального хоста по умолчанию. Вы можете сделать это, выполнив эту команду:
нано /etc/apache2/sites-enabled/000-default.conf
нано /etc/apache2/sites-enabled/000-default.conf |
Мы вместе будем называть mod_virtual host и mod_proxy виртуальным хостом-прокси. Теперь вы можете реализовать следующие параметры конфигурации. Вы можете внести необходимые изменения по своему усмотрению для вашей системы и ваших требований:
<Виртуальный хост *:*> ProxyPreserveHost включен ПроксиПасс / http://0.0.0.0:8080/ ПроксиПассРеверс / http://0.0.0.0:8080/ имя_сервера
1 2 3 4 5 6 7 | ProxyPreserveHost On ProxyPass / http://0.0.0.0:8080/ ProxyPassReverse / http://0.0.0.0:8080/
ServerName localhost
|
Вы можете сохранить и выйти, нажав Ctrl + X и подтвердив Y.
- Активировать функцию балансировки нагрузки
Балансировка нагрузки помогает эффективно распределять соединения на прокси-сервере. Это очень полезная идея, когда вы используете несколько внутренних серверов приложений вместо одного. Функция балансировки нагрузки распределяет соединение или «нагрузку».
Чтобы включить эту функцию, вы должны повторить шаги, упомянутые ранее в этом руководстве. Однако при настройке виртуального хоста необходимо использовать следующие параметры конфигурации:
. <Виртуальный хост *:*> <Прокси балансировщик://mycluster> # Определить внутренние серверы: # Сервер 1 BalancerMember http://0.0.0.0:8080/ # Сервер 2 BalancerMember http://0.0.0.0:8081/ прокси> # Примените настройки VH по желанию # Однако настройте аргумент ProxyPass на # использовать «mycluster» для балансировки нагрузки ProxyPass/балансировщик://mycluster Виртуальный хост>
1 2 3 4 5 6 7 8 10 110003 12 13 14 9000 15 | <Прокси-баланс: // myCluster> # Определите задние серверы: # Сервер 1 Balancermember http://0. 0.0.0:8080/ # сервер 2 Balancermember http://0.0.0.0:8081/
# Применить настройки VH по желанию # Однако настройте аргумент Proxypas / балансировщик://mycluster
|
- Активировать поддержку обратного прокси
Если вы работаете с SSL-соединениями и сертификатами, вам нужно будет настроить виртуальный хост на поддержку вашего обратного прокси-сервера. Этот вторичный виртуальный хост должен иметь следующие настройки. Вам нужно будет выполнить инструкции из предыдущих шагов. Все, что вам нужно сделать, это заменить параметры конфигурации на указанные ниже:
<Виртуальный хост *:443> SSLEngine включен # Указываем путь к SSL-сертификату # Использование: SSLCertificateFile /path/to/cert.pem SSLCertificateFile /etc/apache2/ssl/file.pem # Серверы для проксирования соединения или; # Список серверов приложений: # Применение: # ProxyPass / http://[IP-адрес]:[порт]/ # ProxyPassReverse / http://[IP-адрес]:[порт]/ # Пример: ПроксиПасс / http://0. 0.0.0:8080/ ПроксиПассРеверс / http://0.0.0.0:8080/ # Или сбалансируйте нагрузку: # ProxyPass/балансировщик://balancer_cluster_name Виртуальный хост>
1 2 3 4 5 6 7 8 10 110003 12 13 14 1999911110001 9000 214 9000 3 9000 3 9000 3 9000 2 9000 214 9000 3 9000 3 9000 29000 3 9000 3 9000 3 18 19 20 | SSLEngine On
# Укажите путь к SSL-сертификату # Использование: SSLCertificateFile /path/to/cert.pem SSLCertificateFile /etc/apache2/ssl/file.pem
# Серверы для прокси-соединения или; # Список серверов приложений: # Использование: # ProxyPass / http://[IP-адрес]:[порт]/ # ProxyPassReverse / http://[IP-адрес]:[порт] / # Пример: ProxyPass / http://0. 0.0.0:8080/ ProxyPassReverse / http://0.0.0.0:8080/ # Или сбалансируйте нагрузку: # ProxyPass / balancer://balancer_cluster_name
|
Вам также необходимо включить модуль SSL для работы вышеуказанной конфигурации:
судо a2enmod SSL
судо a2enmod SSL |
- Перезапустите Apache
Все настройки выполнены. Наконец, вы можете перезапустить сервер Apache, чтобы изменения вступили в силу. Вы можете перезапустить Apache, выполнив следующую команду:
служба apache2 перезапуск
перезапуск службы apache2 |
Вывод
Вуаля! Вы только что успешно настроили обратный прокси-шлюз на своем сервере Apache. Теперь Apache будет перенаправлять входящие соединения на ваши серверы приложений в бэкенде.