Назад | Перейти на главную страницу

Может ли nginx прослушивать порт 80, но отправлять восходящий поток на бэкэнд с использованием SSL на 443?

Для соответствия PCI мое приложение вынуждено использовать безопасное / зашифрованное соединение между обратным прокси-сервером и внутренним сервером приложений, тогда как соединение, поступающее в обратный прокси-сервер, находится на порту 80, то есть обратный прокси-сервер должен действовать как http-to -https конвертер.

Простая схема:

IIS7 <--- порт 443 --- nginx <---- порт 80 ---- Интернет

Я оцениваю использование nginx вместо squid для этого, и это то, что у меня есть в моем nginx.conf до сих пор:

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream backend {
        server mybackendserver:443;
    }

    server {
        server_name www.mysite.com
        listen       80;
        ssl on;
        ssl_certificate /etc/nginx/server.crt;
        ssl_certificate_key /etc/nginx/server.key;
        ssl_verify_client off;
        location = / {
                    proxy_pass  https://backend;
                proxy_set_header Host $http_host;
            proxy_set_header X_FORWARDED_PROTO https;
        }

    }

}

Приведенное выше дает: «400 Bad Request. Обычный HTTP-запрос был отправлен на порт HTTPS», когда я перехожу на www.mysite.com.

Где я ошибаюсь? Это вообще выполнимо? Nginx лучше для этой цели squid?

Заранее спасибо, G

proxy_pass может проксировать HTTPS, это не проблема.

У вас есть ошибка в вашей конфигурации. Удалить строки

ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_verify_client off;

Они включают SSL-сервер на стороне Nginx, что означает, что ваш Nginx ожидает SSL-соединение на порту 80. Поскольку браузеры отправляют обычный HTTP на порт 80, Nginx жалуется: «400 Bad Request. Обычный HTTP-запрос был отправлен на порт HTTPS»