# Nginx 配置 stream 踩坑 - Nginx - 服务 - Linux | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎？为之，则难者亦易矣
Keywords: Nginx,stream,Tengine

#### # 引言

stream 模块一般用于 TCP/UDP 数据流的代理和负载均衡，可以通过 stream 模块代理转发 TCP 消息。我是用来转发 mysql、gitee 等连接的，有天 ip 发生了变动导致连接不上。前期试过配置 resolver 114.114.114.114 valid=60s; 来动态解析域名，结果 stream 模块不支持 set 函数，这就导致 ip 变动后必须手动重启或者 reload 一下 nginx 才能正常连接。后面经过搜索发现有人说用 Tengine 替代 nginx 可以实现就试了试，结果发现 Tengine 只能实现 http 下的动态域名解析，至此问题依旧。没办法，我只能通过定时任务加脚本判断 ip 是否变动，如果变动就 reload 一下 nginx。

    #!/bin/bash

    #使用 crontab -e 命令添加定时任务 */1 * * * * sh /home/xxx/autoReloadNginx.sh

    home="/home/xxx" #指定 home 路径，如果使用 `pwd` 则 domainIP.txt 生成在当前用户目录下

    domain=xxx.xxx.cn

    IP=`ping -4 -c 4 $domain | grep from | tail -n 1 | awk -F ' ' '{print $4}'`

    regex="\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\b"

    if [ `echo $IP | egrep $regex | wc -l` -eq 1 ]; then

            if [ ! -f "$home/domainIP.txt" ]; then

                    touch $home/domainIP.txt

                    echo $IP > $home/domainIP.txt

            else

                    oldIP=`cat $home/domainIP.txt`

                    if [ "$IP" != "$oldIP" ]; then

                            nginx -s reload

                            echo $IP > $home/domainIP.txt

                    else

                            echo "The domain name ip has not changed"

                    fi

            fi

    else

            echo "The domain name resolution is incorrect"

    fi

Nginx stream Tengine