我们在公司局域网建立一个服务器搭建网站,如果需要回家使用,那就需要做一些操作才能实现。
公司局域网可能具有如下特点:
1 外网IP随拨号会变动
2 部分端口不开放

对于外网IP固定的网络,操作起来很方便。
路由器上,把80端口映射到局域网的服务器ip即可
如果80端口不开放,那就映射一个自定义的端口即可,比如1080端口
然后把域名指向该IP即可

对于拨号变动IP的网络,这个问题就归结到如何知道现在的外网IP的问题了。
1 用花生壳之类的检测ip变化,可以绑定到你的域名
2 有外网服务器的话,可以定期报告给外网服务器,把域名指向外网服务器就可以轻松代理访问

下面举例说明:
局域网服务器A,公网服务器B

我们在B服务器做个接收的小脚本:
<?php        $ip = $_SERVER['REMOTE_ADDR'];
        $str = "server $ip:1080;#backend";
        $file = '/tmp/backend.log';
        file_put_contents($file, $str);
?>

这个PHP做成是可访问的地址即可,每次访问,就记录ip到文件里

nginx配置可以做一个backend,我们用脚本检查ip不同就可以重载nginx:

upstream welinkers{
server 1.2.254.97:1080;#backend
}

nginx配置里 backend字符是用来替换行的标记
你可以定义为自己独特的字符即可

B服务器做个脚本做定期检查,需要root权限,比如五分钟:
*/5 * * * * root /Data/scripts/backend.check.sh >/dev/null


/Data/scripts/backend.check.sh
#!/bin/bash

file="/tmp/backend.log"
file2="/path/to/your/nginx.conf"

a=`grep backend $file`
b=`grep backend $file2`

if [ "$a" != "$b" ]; then
  sed -i "s|$b|$a|" $file2
  echo "reload";
  /Data/apps/nginx/sbin/nginx -s reload
fi


我们在A上可以加一个计划任务:

#report ip
*/3 * * * * daemon curl http://your/visit/url >/dev/null


梳理一下:
A服务器每3分钟访问 http://your/visit/url ,完成报告IP的任务
B服务器获取到IP后,写入临时文件,留给计划任务做对比用
B服务器每5分钟检查配置文件里的backend是否和临时文件里的一致
如果不一致,就替换为新的backend,然后重载nginx

这样,访问B服务器,就可以正常访问到A服务器了

【如果没有任何端口可开放】
可以访问http://www.aslibra.com/doc...
ssh -R1080:localhost:80 some-server

我们可以建立一个ssh连接,把B服务器端的1080端口,映射为本机的80端口
然后B服务器直接代理本机的1080端口也就是相当于访问A服务器的80端口了
不过,网络会随着ssh连接的中断而需要重建


原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
xyz軟體 Homepage
2015/12/15 13:40
shy  謝謝哦!
分页: 1/1 第一页 1 最后页
发表评论
AD
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML 打开UBB 打开表情 隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写
 

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐