本文最后更新于2022年7月9日,已超过 1 年没有更新,如果文章内容失效,请 反馈 给我们,谢谢!
前提条件:因种种原因自身被封锁了80端口但没有封锁其它端口例如:8181,但又想通过80端口访问的情况。例如你的路由器里面设置了DDNS它是http://ceshi.tpddns.cn,然后在当前服务器下建一个运行环境在其它电脑(非局域网下)输入此DDNS它能够被访问。如果满足即可操作。
一:外网服务器、VPS等操作
1、正常添加域名
2、反向代理(注意:这里的http://ceshi.tpddns.cn:8181是你的DDNS域名很多路由器都有带,发送域名是对外开放供用户访问的域名;小技巧如果本地当前DDNS服务器下有多个网站多个域名可以在本地服务器中的host中添加例如[127.0.0.1 http://www.ceshi.com
127.0.0.1 http://www.buceshi.com
127.0.0.1 http://www.woceshi.com]
发送的哪个域名就代理哪个域名。)
127.0.0.1 http://www.buceshi.com
127.0.0.1 http://www.woceshi.com]
发送的哪个域名就代理哪个域名。)
二:被代理的服务器端操作(本地服务器)
1、安装运行环境如PHPstudy同样正常新建站点www.ceshi.com端口默认80
然后就结束了,此时在被代理的服务器访问www.ceshi.com能够被访问的情况下(自产自销产得勤忙得欢就是卖不出去),在其它公网非局域网电脑访问www.ceshi.com应该也能够被访问到(自产他销产得再勤忙得再欢没有代理帮你卖也是白干,代理不出力损失得还是自己)。
最后这里有一个问题因为通过DDNS一般IP都是会变化的不然也不用多此一举了,那么IP变了nginx是有缓存的,虽然nginx里是域名而不是IP。那么还得在nginx里设置一下DNS的缓存有效期。从网上找了以下两种方案还没有测试先记一下。
第一种方案利用nginx的resolver:
通过nginx自身设置DNS服务器,而不用去找操作系统的DNS,配置文件如下:
server { listen 80; server_name localhost; resolver 114.114.114.114 223.5.5.5 valid=3600s; resolver_timeout 3s; set $qq "**"; location / { proxy_pass http://$qq; } }
参数说明:
# resolver 可以在http全局设定,也可在server里面设定
# resolver 后面指定DNS服务器,可以指定多个,空格隔开
# valid设置DNS缓存失效时间,自己根据情况判断,建议600以上
# resolver_timeout 指定解析域名时,DNS服务器的超时时间,建议3秒左右
# resolver 可以在http全局设定,也可在server里面设定
# resolver 后面指定DNS服务器,可以指定多个,空格隔开
# valid设置DNS缓存失效时间,自己根据情况判断,建议600以上
# resolver_timeout 指定解析域名时,DNS服务器的超时时间,建议3秒左右
#注意:当resolver 后面跟多个DNS服务器时,一定要保证这些DNS服务器都是有效的,因为这种是负载均衡模式的,当DNS记录失效了(超过valid时间),首先由第一个DNS服务器(114.114.114.114)去解析,下一次继续失效时由第二个DNS服务器(223.5.5.5)去解析,亲自测试的,如有任何一个DNS服务器是坏的,那么这一次的解析会一直持续到resolver_timeout ,然后解析失败,且日志报错解析不了域名,通过页面抛出502错误。
#重点:如上例,在代理到后端域名http://**时,千万不要直接写在proxy_pass中,因为server中使用了resolver,所以必须先把域名定义到一个变量里面,然后在 proxy_pass http://$变量名,否则nginx语法检测一直会报错,提示解析不了域名[/v_tips%5D
2019-10-19实际测试以上方案可行测试代码如下:
server { listen 80; server_name www.ceshi.com; #以下新增三行(指定DNS服务器两个+DNS缓存失效时间10分钟、DNS解析超时时间3秒、DDNS域名[必须能访问的]) resolver 114.114.114.114 8.8.8.8 valid=600s; resolver_timeout 3s; set $qq "ceshi.tpddns.cn:8181"; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/www.ceshi.com; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; #SSL-END #ERROR-PAGE-START 错误页配置,可以注释、删除或修改 error_page 404 /404.html; error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注释或修改 #PROXY-START location / { #以下修改第一行把域名换成上面定义的变量 proxy_pass http://$qq;proxy_set_header Host www.ceshi.com; proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr; #持久化连接相关配置
图片丢失
第二种方案:不直接使用nginx改用tengine 2.1.2,没错淘宝就是用的这个环境
[v_tips]Tengine的模块ngx_http_upstream_dynamic_module,此模块提供了在运行时动态解析upstream中server域名的功能。配置如下:upstream backend { dynamic_resolve fallback=stale fail_timeout=30s; server a.com; server b.com; } server { … location / { proxy_pass http://backend; } }
说明:指定在某个upstream中启用动态域名解析功能。fallback参数指定了当域名无法解析时采取的动作:fail_timeout参数指定了将DNS服务当做无法使用的时间,也就是当某次DNS请求失败后,假定后续多长的时间内DNS服务依然不可用,以减少对无效DNS的查询。