网站如何快速推广,如何提高网站收录,电脑培训速成班多少钱,西安公众号开发公司Nginx源码编译 关于nginx的搭建配置具体参考笔者之前的一篇文章#xff1a;实时流媒体服务器搭建试验#xff08;nginxrtmp#xff09;_如何在线测试流媒体rtmp搭建成功了吗-CSDN博客中的前半部分#xff1b;唯一变化的是编译参数#xff08;添加stream模块并添加其对应ss…Nginx源码编译 关于nginx的搭建配置具体参考笔者之前的一篇文章实时流媒体服务器搭建试验nginxrtmp_如何在线测试流媒体rtmp搭建成功了吗-CSDN博客中的前半部分唯一变化的是编译参数添加stream模块并添加其对应ssl模块
./configure --prefix/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --with-stream --with-stream_ssl_module \
--with-stream_realip_module --with-openssl../openssl-1.0.1f --without-http_gzip_module
Tcp代理配置实验 在配置文件nginx.conf中增加stream模块的配置具体如下
# lijd add 2023-11-4
stream {upstream backend {server 192.168.97.50:54321;}server {listen 12345 ssl;proxy_connect_timeout 60s;proxy_timeout 60s;proxy_pass backend;}
}
# lijd add end 说明真是的tcp服务器为192.168.97.50端口54321nginx代理服务器地址为192.168.97.51端口12345。实验结果截图如下 当本地客户端192.168.80.67连接代理服务器192.168.97.51的12345端口时nginx的代理进程会与真实的后台服务器192.168.97.50的54321端口创建一个tcp连接如下图 客户端与服务器之间的通信成功连接并发送数据演示如下图 Tcp加密通道配置实验
生成CA 首先通过系统自带的openssl生成一套自己的CA跟服务器证书、客户端证书具体命令如下
生成CA相关内容
# 为CA生成私钥
openssl genrsa -out private/ca.prikey 2048# 为CA机构生成公钥
openssl rsa -in ca.prikey -pubout -out ca.pubkey# 为CA生成自签名证书
openssl req -new -x509 -days 3650 -key private/ca.prikey -out ca.cert生成服务器证书相关内容
# 生成服务器私钥
openssl genrsa -out server/ser.prikey 2048# 生成服务器证书申请文件
openssl req -new -key server/ser.prikey -out server/ser.csr# 生成由CA签名过的服务器证书
openssl x509 -req -days 365 -in server/ser.csr -CA ca.cert -CAkey private/ca.prikey -CAcreateserial -out server/ser.cert生成客户端证书相关内容
# 生成客户端私钥
openssl genrsa -out client/cli.prikey 2048# 生成客户端证书申请文件
openssl req -new -key client/cli.prikey -out client/cli.csr# 生成由CA签名过的客户端证书
openssl x509 -req -days 365 -in client/cli.csr -CA ca.cert -CAkey private/ca.prikey -CAcreateserial -out client/cli.cert 生成的所有证书如下 TLS代理实验 实验的环境跟上面的tcp代理配置实验相同nginx.conf的配置文件添加SSL的一些基本配置具体如下
# lijd add 2023-11-4
stream {upstream backend {server 192.168.97.50:54321;}server {listen 12345;proxy_connect_timeout 60s;proxy_timeout 60s;proxy_pass backend;# 设置nginx与后台代理服务直接的tcp通信是否为SSL协议加密proxy_ssl off;# 设置使用的SSL协议版本ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2; ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;# 设置服务端使用的密码套件ssl_certificate /lijd/CA/server/ser.cert;ssl_certificate_key /lijd/CA/server/ser.prikey;ssl_session_cache shared:SSL:10m; # SSL TCP会话缓存设置共享内存区域名为# SSL区域大小为10MBssl_session_timeout 10m; # SSL TCP会话缓存超时时间为10分钟 }
}
# lijd add end 注意proxy_ssl参数开关表示nginx代理与后台真是的tcp服务器直接是否需要SSL加密。 由于实验需要tcp客户端通道加密支持tcp客户端TLS加密工具比较难找到因此用单纯的tcp协议认证测试相对麻烦。笔者在这里想了一个办法由于http、https协议是基于tcp协议之上的协议利用浏览器的https的请求特性模拟一个tcp加密客户端此时后台的真实服务器用系统自带的IIS服务http服务器充当一个tcp服务端。后台的真实服务器如下 通过nginx代理的tcp服务去访问后台服务器浏览器页面如下 可以看到浏览器能通过nginx代理访问到真实的后台服务器并收到网页回复数据。通过抓两条链路的数据包分析如下 1、浏览器充当tcp客户端与nginx代理之间的加密链路抓包分析如下 2、nginx与后台真实服务器之间的纯tcp链路抓包分析如下 至此通过nginx代理TLS加密通道实验已经完结。本章主要讨论的是如下图结构 有兴趣的同学可以研究一下nginx代理与客户端、服务器双向都为TLS加密通道。此时nginx的配置中proxy_ssl参数需要设置成on默认为on实验时在这卡了半天这时就需要后台TCP服务器支持TLS加密。