回答
收藏
分享
举报
nginx tcp proxy疑惑
提问于2021-10-26 09:15

浏览 1.1k

对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 加密的 ?

非常感谢!


已修改于2023-03-16 21:24



写下您的回答
发表回答
全部回答(1)

按点赞数排序

按时间排序

proxy_ssl on;意思为连接到代理服务器启用 SSL/TLS 协议‎,需要使用客户端证书(proxy_ssl 开头均为客户端ssl配置),进行数据解密后转发,可实现https ->http转发,未配置该项,则直接透传TCP流量,不做业务处理,故使用的证书为上游服务证书。Listen 开启ssl为加密到下游客户端TCP流量,需配置server 端证书(ssl_开头即为服务端证书配置)。

赞同

0

回复举报

回答于2022-10-31 14:00



回复ld7941
回复
提问者
sm3511
这家伙很懒还未留下介绍~
0
文章
1
问答
0
粉丝
相关问答

建议采用configmap

点赞 0
浏览 691

多个字段在http协议是允许的,浏览器可以忽略重复的字段,检查一下是否nginx里多加了字段,否则就是后端服务器的问题

点赞 0
浏览 648
就像前面的人说的一样。我说一句总结性的话:
人们只会看到他想看到的那部分。这就够了。你的关注点在C所以,对于php,java,c++什么的你就没有去看。造成了。你看到的景色好美的故事
点赞 0
浏览 567