nginx 可以在端口 80 上监听,但使用 443 上的 SSL 将上行数据发送到后端吗?

nginx 可以在端口 80 上监听,但使用 443 上的 SSL 将上行数据发送到后端吗?

为了符合 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 端口”

相关内容