Web服务NginxNginx禁用https证书实现转发
王先森前言
最近有一个需求,如何禁用ssl证书,只用于Nginx 443端口转发流量?https服务器A和B 有 https 服务并提供两个 IP 以实现高可用。 例如https服务器 A[ip1:443] 和 B[ip2:443] 被路由到Nginx代理服务器上。 Nginx代理服务器没有 ssl_certificate
和 ssl_certificate_key
使用 Nginx 代理模块将请求代理到实际的https服务器上。如何在没有SSL验证的情况下将443端口流量简单转发到后端。
使用nginx的stream、 stream_ssl_preread模块
参考资料
准备工作
- nginx版本1.11.5及以上
- 由于stream和stream_ssl_preread模块非默认引入,需要在编译安装nginx时引入;编译时添加配置参数
--with-stream
、--with-stream_ssl_preread_module
。
配置stream
惊为天人的Nginx Stream配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| stream { upstream default_backend_traefik_tls { server 10.1.1.130:30443 max_fails=3 fail_timeout=10s; } upstream default_backend_apisix_tls { server 10.1.1.120:31443 max_fails=3 fail_timeout=10s; } map $ssl_preread_server_name $upstream { default default_backend_traefik_tls; ~\.od\.com$ default_backend_traefik_tls; ~\.boysec\.cn$ default_backend_apisix_tls; } upstream mongo_server { server 10.1.1.130:37017 max_fails=3 fail_timeout=30s; } upstream udpep_server { server 10.1.1.130:39300 max_fails=3 fail_timeout=30s; } server { listen 9300 udp; proxy_connect_timeout 1s; proxy_timeout 9s; proxy_pass udpep_server; } server { listen 27017; proxy_connect_timeout 1s; proxy_timeout 9s; proxy_pass mongo_server; }
server { listen 443; ssl_preread on; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; proxy_ssl_server_name on; proxy_pass $upstream; proxy_ssl_verify off; proxy_ssl_name default_backend_traefik_tls; } }
|
stream
是在根这一层的,和什么 http
、events
是一个层级的。
[emerg] “stream” directive is not allowed 解决
在 nginx.conf 插入 stream 代码的时候报错, 显示的是nginx: [emerg] "stream" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:86
解决办法:
1 2 3 4 5 6 7
| # 安装相关依赖 yum -y install nginx-mod-stream
# 如果安装了则需要 find / -name "ngx_stream_module.so" cat /etc/nginx/nginx.conf load_module /usr/local/nginx-1.18.0/modules/ngx_stream_module.so; # 在nginx.conf第一行添加。
|