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

浏览 4.7k

对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
粉丝
相关问答

这个应该是找系统、网络方面去排查吧,nginx可以把日志级别调低,看看有什么有用的信息。

点赞 0
浏览 3.3k

其实当 TLS(Transport Layer Security)版本过时的时候,存在有安全隐患的话,看看这几个方法:


1. 升级 TLS 版本,老版本估计不太好用,估计升级到 TLS 1.2 或更高就应该差不多

2. 把不安全的加密套件都禁止掉

3. 设置监测和日志记录,后面要是有问题还能早点解决

4. 看看 SSL/TLS 证书是不是最新的,证书过期也可能有连接错误或安全问题,这个时候可以顺带着把防火墙配置,IDS,IPS 啥的更新一下。

最后也没啥别的办法,就是定期审查更新了。

点赞 0
浏览 5.4k

这个我理解IPv4和IPv6关于 transparent 的设置上是没有区别的,只是需要注意的是,IPv6的IP透传需要glibc版本达到一定的条件,我记得是glibc 2.26以上才支持。

查看命令 rpm -aq | grep glibc

然后配合路由表设置,在连路上抓包可看到真实的client ipv6地址,可以根据这个帖子 实际测一下,亲测有效,测试转发成功了 https://www.nginx.org.cn/article/detail/76

点赞 0
浏览 4.1k