nginx tcp proxy疑惑

对nginxproxy 有一些疑惑的地方,麻烦帮忙看下,谢谢!


1:架构为 nginx(通过tcp proxy)--->nginx(该机器是一个http 反向代理,在443 端口监听)-->tomcat(nginx通过http协议到内网的tomcat)
最外层nginx(tcp proxy)的配置如下,上游的nginx(https),就是普通的配置,就不贴配置了 :
events {
    use epoll;
    worker_connections 65535;
}

stream {
log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /var/log/nginx/access.log proxy ;
error_log /var/log/nginx/error.log warn ;

    upstream abccom {
        zone tcp_mem 64k;
        server 10.100.85.152:443 max_fails=3 fail_timeout=30s;
    }

    server {
        listen 443;
        proxy_connect_timeout 5s;
        proxy_timeout 10s;
        proxy_ssl off;
        proxy_pass abccom;

    }

}

我虽然指定了443端口,但我没有指定证书和key,也没有在443后面配置ssl,而且我指定了 proxy_ssl off; 为啥我https://111.abc.com 它work(111.abc.com 域名解析到最外层的nginx tcp proxy的地址,上游服务器上配置的是https,它使用的证书是我们购买的abc.com的证书)
这里我测试了一个参数,如果我将proxy_ssl 设置为on,页面就不工作了, 如果设置为 off, 页面是工作的,难道listen 443 默认就表示请求是加密的(就因为它是443 端口就表示需要加密吗?可是我没有指定证书和key如何来加密)?
listen 443 和下面的
        listen 443 ssl;
        ssl_certificate ssl/backend.crt;
        ssl_certificate_key ssl/backend.key; 有啥区别?

2:我的架构为 nginx(通过tcp proxy)--->nginx(该机器是一个http 反向代理,在443 端口监听)-->tomcat(nginx通过http协议到内网的tomcat) 
##和上面的架构一样!

1:最外层nginx(tcp proxy)的配置如下,上游的nginx(https),就是普通的配置,就不贴配置了!
events {
    use epoll;
    worker_connections 65535;
}

stream {
log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /var/log/nginx/access.log proxy ;
error_log /var/log/nginx/error.log warn ;

    upstream abccom {
        zone tcp_mem 64k;
        server 10.100.85.152:443 max_fails=3 fail_timeout=30s;
    }

    server {
        listen 443 ssl;
        ssl_certificate ssl/backend.crt;
        ssl_certificate_key ssl/backend.key;
        proxy_connect_timeout 5s;
        proxy_timeout 10s;
        proxy_ssl on;
        proxy_pass abccom;
    }
}
我的理解是,请求通过443端口,由ssl offloading ,变成了明文,然后由于配置了proxy_ssl on; 请求再次被加密,传给上游的10.100.85.152 机器,(这样不仅client 到最外层的nginx(tcp proxy)代理加密,而且nginx(tcp proxy)到https nginx也加密了,这样就更加安全了),
整个过程我理解的没问题吧?
我仅仅配置了proxy_ssl on ,而没有指定proxy_ssl_certificate 和 proxy_ssl_certificate_key ,这个请求是如何加密的(没使用证书咋加密的?)? 莫非它默认使用的是ssl_certificate 和 ssl_certificate_key 加密的 ?

非常感谢!


邀请回答
提问于 2021-10-26 09:15
128 次浏览
共0个回答

发表评论
提问者

sm3511

暂无个人介绍

  • 0

    文章

  • 0

    粉丝

  • 0

    被赞

sm3511
按Enter键发送
您已邀请位用户
Copyright 公安部网络安全保卫局 All Rights Reserved
京公网安备 11010502047880号    京ICP备05070602号