Для соответствия 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»