Apps: Apache, Nginx.
Задача: обеспечить простейшее прозрачное проксирование всего трафика сайта на обслуживающий в действительности этот сайт сторонний сервер (например на время переноса web-сервисов в другую инфраструктуру, до полного обновления DNS-записей).
Пример проксирования посредством "Apache".
# vi /etc/apache2/sites-available/site.example.net.conf
# Блок отлова HTTP-обращений и перенаправления их на HTTPS
<VirtualHost *:80>
ServerName site.example.net
....
Redirect / https://site.example.net/
</VirtualHost>
# Блок описание параметров web-сайта как такового
<VirtualHost *:443>
ServerName site.example.net:443
....
# Блок описания параметров SSL/TLS-шифрования
<IfModule mod_ssl.c>
SSLEngine on
....
</IfModule>
....
# Явно включаем модуль проксирования HTTPS-трафика
SSLProxyEngine on
# Забираем в модуль проксирования весь трафик
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# Задаём целевой сервер и параметры проксирования
ProxyPass / https://web.example.net/
ProxyPassReverse / https://web.example.net/
#
ProxyPreserveHost On
ProxyRequests off
</VirtualHost>
<VirtualHost *:80>
ServerName site.example.net
....
Redirect / https://site.example.net/
</VirtualHost>
# Блок описание параметров web-сайта как такового
<VirtualHost *:443>
ServerName site.example.net:443
....
# Блок описания параметров SSL/TLS-шифрования
<IfModule mod_ssl.c>
SSLEngine on
....
</IfModule>
....
# Явно включаем модуль проксирования HTTPS-трафика
SSLProxyEngine on
# Забираем в модуль проксирования весь трафик
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# Задаём целевой сервер и параметры проксирования
ProxyPass / https://web.example.net/
ProxyPassReverse / https://web.example.net/
#
ProxyPreserveHost On
ProxyRequests off
</VirtualHost>
Проверяем средствами web-сервера конфигурацию и применяем таковую:
# apachectl configtest
# /etc/init.d/apache2 reload
# /etc/init.d/apache2 reload
Пример проксирования посредством "Nginx".
# vi /etc/nginx/sites-available/site.example.net.conf
# Блок отлова HTTP-обращений и перенаправления их на HTTPS
server {
listen 80;
server_name site.example.net;
rewrite ^ https://site.example.net$request_uri permanent;
}
# Блок описание параметров web-сайта как такового
server {
listen 443 ssl http2;
server_name site.example.net;
....
# SSL/TLS Configuration
ssl on;
....
# Задаём целевой сервер и параметры проксирования
location / {
proxy_pass https://web.example.net:443;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_ssl_session_reuse on;
proxy_set_header X-Scheme https;
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-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl on;
}
}
server {
listen 80;
server_name site.example.net;
rewrite ^ https://site.example.net$request_uri permanent;
}
# Блок описание параметров web-сайта как такового
server {
listen 443 ssl http2;
server_name site.example.net;
....
# SSL/TLS Configuration
ssl on;
....
# Задаём целевой сервер и параметры проксирования
location / {
proxy_pass https://web.example.net:443;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_ssl_session_reuse on;
proxy_set_header X-Scheme https;
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-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl on;
}
}
Проверяем средствами web-сервера конфигурацию и применяем таковую:
# nginx -t
# /etc/init.d/nginx reload
# /etc/init.d/nginx reload