# yunAIYI_nginxUpdate
**Repository Path**: MemoryFast/yunAIYI_nginxUpdate
## Basic Information
- **Project Name**: yunAIYI_nginxUpdate
- **Description**: yunAIYI_nginxUpdate 协助部署动态公网ip+云服务器
- **Primary Language**: Go
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2021-07-07
- **Last Updated**: 2021-07-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# yunAIYI_nginxUpdate
## 业务背景
使用第三方提供的内网穿透服务,还是有明显的网络延迟,如果有阿里云或腾讯云,可以自己结合宽带动态公网ip部署自己的内网穿透。没有过多的流量损耗,速度肯定比第三方内网
穿透快和稳定,同时又可以最大程度的使用个人服务器的硬件性能优势。
原理:TCP长连接状态处理,当宽带动态公网ip变化,实时更新到阿里云web服务器,更新nginx,从而完成内网穿透。
> 站点: https://homeapp.top
## 前置条件
1. 电信宽带下的服务器 PCserver1。有电信公网ip但动态变化,且无80 443端口权限。
2. 阿里云web服务器例 PCserver2,固定公网ip如:1.1.1.1 。部署web服务会nginx。
(测试环境服务器配置:5m宽带,1核2g内存。)
nginx配置,把80 443都代理到一个变量ip,内容随便写,会自动更新。
set @mydynamicIP "111.1.1.1"。
配置信息参考后面示例。
3. 域名如 mydomain.top,a记录绑定到1.1.1.1。
## 最终效果
核心业务系统部署在宽带环境下的pc服务器上。(自己的pc服务器硬件性能远超这台云服务器)
访问 https://mydomain.top ,仅通过PCserver2 nginx进行代理,业务服务器还是在PCserver1上。
## 和第三方提供的内网穿透比对测试
测试数据
以下三张图片分别是下面三种方式测试结果:
测试图如下:
> 动态公网ip+云服务器:

> natapp vip2内网穿透:

> 动态公网ip直连:

经测试这三种模式下的网速:
1. 动态公网ip+云服务器 速度排行第二
2. natapp vip2内网穿透 速度排行第三
3. 动态公网ip 直连(非80端口) 速度排行第一
第二种,慢的离谱,但是当你自己访问,非并发访问,感觉不出来慢,大并发访问时候上层流量是有瓶颈的!
具体,可以再亲测,yunAIYI_nginxUpdate 就是协助部署动态公网ip+云服务器。
使用第一种方案后,域名访问速度提升测试图:
> 升级后测试图:

## 使用说明:
Aliyun_nginxServer Aliyun_nginxClient 启动顺序可以随意 。
1. 云服务器 PCserver2 下载运行 document/build/aliyun_nginxServer or aliyun_nginxServer.exe 和配置文件config。
双击运行即可。
访问: 有内容,说明启动成功。
nohup aliyun_nginxServer > /dev/null 2>&1 &
2. 自己的pc PCserver1 下载运行 document/build/aliyun_nginxClient or aliyun_nginxClient.exe 和配置文件config。
保障8999端口没有被占用。
配置文件中修改 aliyunip 为自己的阿里云web服务器ip。
双击运行即可。
访问: 有内容,说明启动成功。
## 升级日志
> 2020年6月14日 12:43:41
1. 发现问题,电信刷新动态公网ip,等待13分钟才恢复。
问题现象: 动态公网ip更新后第一时间推送到云服务器了,但是链接成功后,send和recv有超时可能性,因为动态公网那边网络不是瞬间完成ip更新,需要等10多钟才可以。
问题处理: 路由器设置定时重启完成ip刷新,防止随机性刷新ip,电信刷新ip的时候,有10多分钟的网络故障。读写超时日志优化,读写超时缩短,及时响应日志,发起重连。
目前 send recv没超时时间设置,先不处理。
## todo
1. 获取路由器api 获取公网ip
2. 路由器api 重新拨号 定时拨号刷新ip,防止换ip随机性。
> 2020年6月14日电信刷新公网ip报错日志:

解决方案:
1. 可能换ip 就需要等15分钟 ,定时每天晚上1点刷新ip。防止随机性刷新ip。
路由器就有定时重启功能,或者通过api重启。选前面的方案吧。更通用。
## nginx配置文件示例
```
#homeapp.top.conf
server {
set $myip "111.113.215.87";
listen 443 ssl http2;
server_name homeapp.top;
# SSL
ssl_certificate /usr/local/nginx/mywebsiteconf/www.homeapp.top.pem;
ssl_certificate_key /usr/local/nginx/mywebsiteconf/www.homeapp.top.key;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
# additional config
location / {
proxy_pass http://$myip:99;
index index.html index.htm index.jsp;
}
error_page 400 401 402 403 405 408 410 412 413 414 415 500 501 502 503 504 506 /505.html;
location = /502.htm {
root html/;
}
error_page 404 https://homeapp.top;
}
# subdomains redirect
server {
listen 443 ssl http2;
server_name *.homeapp.top;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
# SSL
ssl_certificate /usr/local/nginx/mywebsiteconf/www.homeapp.top.pem;
ssl_certificate_key /usr/local/nginx/mywebsiteconf/www.homeapp.top.key;
return 301 https://homeapp.top$request_uri;
error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 504 506 /505.html;
location = /502.htm {
root html/;
}
}
# HTTP redirect X-Forwarded-For 和 X-Real-IP
server {
listen 80;
server_name .homeapp.top;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
return 301 https://homeapp.top$request_uri;
}
```