@sevnet
Системный аналитик, бизнес-консультант

Как настроить nginx сервер-посредник (прокси сервер) для проксирования https (ssl)?

Здравствуйте, коллеги!
Использую следующую схему работы NGINX Reverse Proxy Server:
67167def9b620507624287.jpeg

Ни как не могу добиться передачи сертификата от конечных Web Server'ов, у меня постоянно приходит сертификат от главного NGINX Reverse Proxy Server'a.

Использую следующие записи:

server {
        listen       12.77.0.221:80;
        server_name crm.at5.su www.crm.at5.su;
        access_log /var/www/httpd-logs/crm.at5.su.access.log;
        error_log /var/www/httpd-logs/crm.at5.su.error.log notice;

        location ~* {

                proxy_ignore_client_abort on;
                proxy_pass https://12.77.0.213:80;
                proxy_redirect https://12.77.0.213:80 ~*;
                proxy_set_header Host $host;
                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;
         }
}

server {
        listen       12.77.0.221:443;
        server_name crm.at5.su www.crm.at5.su;
        access_log /var/www/httpd-logs/crm.at5.su.access.log;
        error_log /var/www/httpd-logs/crm.at5.su.error.log notice;

        location ~* {

                proxy_ignore_client_abort on;
                proxy_pass https://12.77.0.213:443;
                proxy_redirect https://12.77.0.213:443 ~*;
                proxy_set_header Host $host;
                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;
         }
}

server {
        listen       12.77.0.221:8893;
        server_name crm.at5.su www.crm.at5.su;
        access_log /var/www/httpd-logs/crm.at5.su.access.log;
        error_log /var/www/httpd-logs/crm.at5.su.error.log notice;

        location ~* {

                proxy_ignore_client_abort on;
                proxy_pass https://12.77.0.213:8893;
                proxy_redirect https://12.77.0.213:8893 ~*;
                proxy_set_header Host $host;
                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;
         }
}

server {
        listen       12.77.0.221:8894;
        server_name crm.at5.su www.crm.at5.su;
        access_log /var/www/httpd-logs/crm.at5.su.access.log;
        error_log /var/www/httpd-logs/crm.at5.su.error.log notice;

        location ~* {

                proxy_ignore_client_abort on;
                proxy_pass https://12.77.0.213:8894;
                proxy_redirect https://12.77.0.213:8894 ~*;
                proxy_set_header Host $host;
                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;
         }
}
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
У вас все работает как и должно.
То, что вы задумали - возможно только через проксирование с использованием модуля nginx_stream.
А вообще вам нужно изучить, для чего сертификаты, как они работают.
Ну и nginx он reversE proxy, а не revers.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
Зачем вам nginx, если вы собрались TCP проксировать? Поставьте, не знаю, haproxy какую-нить...

Ну или наоборот - зачем вам тридцать "внутренних" nginx'ов, если можно всё сделать на одном "внешнем"?
Ответ написан
@sevnet Автор вопроса
Системный аналитик, бизнес-консультант
Необходимо в файле nginx.conf, ну или через связанные конфигурации, заменить нотацию
http { ... }
на
stream {
    map $ssl_preread_server_name $name {
        site1.ru  site1;
        site2.ru  site2;
    }
    upstream site1p80 {
            server 192.168.88.231:80;
            }
    upstream site1p443 {
            server 192.168.88.231:443;
            }
    upstream site1p8893 {
            server 192.168.88.231:8893;
            }
    upstream site1p8894 {
            server 192.168.88.231:8894;
            }

    upstream site2p80 {
            server 192.168.88.180:80;
            }
    upstream site2p443 {
            server 192.168.88.180:443;
            }
    upstream site2p8893 {
            server 192.168.88.180:8893;
            }
    upstream site2p8894 {
            server 192.168.88.180:8894;
            }
    server {
             listen 443;
             proxy_pass ${name}p443;
             ssl_preread on;
         }
    server {
             listen 80;
             proxy_pass ${name}p80;
          }
    server {
               listen 8893;
               proxy_pass ${name}p8893;
           }
    server {
               listen 8894;
               proxy_pass ${name}p8894;
            }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы