为了符合 PCI 要求,我的应用程序被迫在反向代理服务器和后端应用服务器之间使用安全/加密连接,而进入反向代理的连接位于端口 80,即反向代理需要充当 http 到 https 的转换器。
一个简单的图:
IIS7<---端口 443---nginx<----端口 80----Internet
我正在评估使用 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;
}
}
}
当我浏览 www.mysite.com 时,出现上述信息:“400 错误请求,普通 HTTP 请求已发送至 HTTPS 端口”。
我哪里做错了?这可行吗?就此目的而言,nginx 比 squid 更好吗?
提前致谢,G
答案1
proxy_pass
能够代理到HTTPS,这不是问题。
您的配置有错误。删除以下行
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_verify_client off;
这些是在 Nginx 端打开 SSL 服务器,这意味着你的 Nginx 需要 80 端口的 SSL 连接。由于浏览器将普通 HTTP 发送到 80 端口,因此 Nginx 会抱怨“400 错误请求,普通 HTTP 请求已发送到 HTTPS 端口”