• 原森林之家(foresthouse.cn)改为走私范(zousifan.com),只是改个名内容不变。
  • 网站图片自建立开始到19年全部丢失,血的教训时刻备份,多点备份!

BT面板nginx反代非80端口实例

心得笔记 5年前 (2019-10-15) 432次浏览 0个评论 扫描二维码
本文最后更新于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]
发送的哪个域名就代理哪个域名。)

二:被代理的服务器端操作(本地服务器)

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 后面跟多个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的查询。

版权所有丨如未注明 , 均为原创丨本网站采用 BY-NC-SA 协议进行授权 , 转载请注明 出处!
喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
    仅用来给您发送回复提醒。不会公开!
  • 网址