Nginx反向代理TCP

全屏阅读
  • 基本信息
  • 作者:
  • 作者已发布:920篇文章
  • 发布时间:2022年05月06日 11:09:56
  • 所属分类:Linux, Nginx
  • 阅读次数:844次阅读
  • 标签:
文章目录

前言

由于历史原因,我司公网的80端口与443端口并不指向同一台机器,这就导致了https和http不能在同一台机器上做,而且我司公网的443端口还被一个tcp站点占用了。针对这个问题,需要进行改进和优化,要将443端口进行分流转发,如果是带TSL类型的请求转发到二级nginx上去,如果是tcp类型的请求继续转发到之前机器的443端口上。后来选择了使用Nginx作为解决方案来

Nginx反向代理Tcp

Nginx的反向代理是由Stream模块来实现的,这个在老版本是没有的,但是现在新版本是一定有的。
详细解释可以参照Nginx官网的stream章节

image.png


具体实现

首先要加载stream模块的配置文件

修改nginx.conf文件,添加stream模块支持和配置

在nginx.conf文件末尾添加如下代码,开启stream的配置文件引用(这个文件的位置一般在/etc/nginx/nginx.conf)

stream {
    include /etc/nginx/tcp.conf.d/*.conf;
    }

配置tcp转发

在/etc/nginx/tcp.conf.d/文件夹下添加redis.conf,内容如下,就实现了将redis的6379端口转发为8888的功能

 upstream redis{
       server 192.168.0.1:6379;
       server 192.168.0.2:6379;
    }

   server {
        listen 8888;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass redis;
    }

配置https安装域名转发到不同的地址

首先如果是http的话可以直接配置转发就行,因为不需要证书,比较简单,教程网上一抓一大把;
但是https就比较特殊了,如果采用传统的方式去进行转发nginx就会要求你配置证书,但是如果你有多个网站,而且证书都已经配置好了就可以使用tcp转发,这样比较方便,免得在这个nginx中也配置证书了。

这个功能需要用到ngx_stream_ssl_preread_module模块

map $ssl_preread_server_name $host_name {
    baidu.aaa.com      baidu;
    nginx.aaa.com      nginx;
}

upstream baidu{
    server www.baidu.com;
    # server 192.168.1.1:443 # 可以使用域名,也可以使用IP+端口
}

upstream nginx{
    server  nginx.org:443;
}

server {
    listen      443;
    proxy_pass  $host_name;
    ssl_preread on; #必须要开了这个才会有$ssl_preread_server_name这个参数
}

配置https端口转发到二级nginx,其他的转发到之前的那台机器的443端口上

这个的实现逻辑就是使用通配符来通配https的域名,然后转发到二级nginx上去,没有域名的就直接转发到预定机器上去。

map $ssl_preread_server_name $server {
    default default_server; # 默认转发到之前机器的443上

    ~*.xxx.com xxx_com;# 通配符转发到二级nginx上}upstream default_server {
    server 192.168.1.2:443;}upstream xxx_com {
    server 192.168.1.1:443;}server {
    listen 443;
    ssl_preread on;
    proxy_pass $server;
    proxy_connect_timeout 5s;}

顶一下
(0)
100%
订阅 回复
踩一下
(0)
100%
» 固定链接:恒富网 » 《Nginx反向代理TCP》
» 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。

目前有 0 条留言 其中:访客:0 条, 博主:0 条

给我留言

您必须 [ 登录 ] 才能发表留言!