У меня есть задача, связанная с маршрутизацией трафика. У меня есть один IP-адрес, на который настроены семь доменных имен, и за ним находятся семь серверов, работающих на различных операционных системах и веб-серверах (включая NGINX и Apache), каждый из которых имеет свои уникальные настройки. Я хочу, чтобы один обратный прокси управлял всем входящим трафиком, действуя как маршрутизатор, но маршрутизировал по доменным именам, а не по IP-адресам.
Я уже настроил такой прокси на NGINX и прописал конфигурацию для всех сайтов. Вот пример конфигурации:
<pre><code>server {
listen 443 ssl;
server_name sd-info.ru www.site1.ru;
access_log /var/log/nginx/site1.ru.access.log;
error_log /var/log/nginx/site1.ru.error.log notice;
ssl_certificate /etc/letsencrypt/live/site1.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/site1.ru/privkey.pem; # managed by Certbot
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
location ~* {
proxy_ignore_client_abort on;
proxy_pass https://192.168.88.111;
proxy_redirect https://192.168.88.111 ~*;
proxy_set_header Host $host;
proxy_max_temp_file_size 0;
proxy_ssl_server_name on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header HTTPS YES;
# WebSocket support
proxy_http_version 1.1;
proxy_set_head
Чтобы настроить HTTPS-прокси-сервер на NGINX так, чтобы серверная часть могла видеть реальный IP-адрес клиента, вам нужно правильно передавать заголовки `X-Real-IP` и `X-Forwarded-For`, как вы уже начали делать в вашем конфигурационном фрагменте. Однако для полной конфигурации важно удостовериться, что серверная часть (backend) правильно обрабатывает эти заголовки.
Вот несколько шагов для реализации этой задачи:
### 1. Настройка NGINX как обратного прокси
Ваш текущий конфигурационный файл имеет правильные строки для передачи информации о клиенте. Убедитесь, что он завершён корректно и выглядит примерно так:
```nginx
server {
listen 443 ssl;
server_name sd-info.ru www.site1.ru;
access_log /var/log/nginx/site1.ru.access.log;
error_log /var/log/nginx/site1.ru.error.log notice;
ssl_certificate /etc/letsencrypt/live/site1.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/site1.ru/privkey.pem; # managed by Certbot
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'HIGH:!aNULL:!MD5:!3DES:!RC4';
location / {
proxy_pass https://192.168.88.111; # Ваш backend адрес
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # Передача реального IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Добавляем IP
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_ssl_server_name on;
# Опционально, для поддержки WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
### 2. Настройка вашего backend-сервера
На стороне вашего backend-сервера (например, на Apache или NGINX) вам нужно убедиться, что он правильно обрабатывает заголовки, передаваемые от прокси:
#### Для NGINX как backend:
```nginx
http {
...
set_real_ip_from 192.168.88.1; # IP вашего NGINX-прокси
real_ip_header X-Forwarded-For;
real_ip_recursive on;
...
}
```
#### Для Apache как backend:
В конфигурации Apache можно использовать модуль `mod_remoteip`. Вам необходимо добавить следующее в конфигурацию вашего виртуального хоста:
```apache
<IfModule mod_remoteip.c>
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 192.168.88.1 # IP-адрес вашего NGINX-прокси
</IfModule>
```
### 3. Тестирование конфигурации
После внесения всех изменений перезапустите NGINX и ваш backend-сервер. Проверьте логи на наличие реальных IP-адресов клиентов:
- Для NGINX проверяйте файл `/var/log/nginx/site1.ru.access.log`.
- Для вашего backend-сервера проверьте соответствующий лог-файл.
### 4. Заключение
С учетом этих шагов настройка вашего HTTPS-прокси-сервера должна быть правильна и позволит вашему backend-серверу видеть реальные IP-адреса клиентов. Не забудьте протестировать все сценарии, чтобы убедиться в корректной работе системы в целом.
Ну так Nginx настройте, под каждый домен свой конфиг отдельный и всё...
если от <a href="https://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html" rel="nofollow">https://nginx.org/en/docs/stream/ngx_stream_ssl_pr...</a> и <a href="https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html" rel="nofollow">https://nginx.org/en/docs/stream/ngx_stream_proxy_...</a> (через <code>proxy_protocol on</code> ) не получится добиться желаемого, то на одном ip-адресе ваше "нужно" идёт в пешее эротическое <br/> <br/> да и то оно хоть как-то имеет смысл если не используется EncryptedHello и "серверы" согласятся использовать PROXY-протокол <br/> <br/> и с https по-другому никак, в этом его суть, что на уровне ниже 7 до расшифровки (терминирования tls-сессии) это просто набор зашифрованных данных, на который можно медитировать до посинения, но так не узнать что там есть