之前的那些临时账号都不能用了,我只能使用自己的账号来连到外网,这样,用内网穿透不可能在外面访问到多台web服务器,所以,想到了反向代理,用其中放moodle的那个web server充当反向代理网关。记录如下:
使能反向代理相关的apache2模块(使能用命令a2enmod,禁用使用命令a2dismod):
#a2enmod proxy
#a2enmod proxy_http
#a2enmod proxy_html 需要使用这个模块,不然网站上的那些链接(<a>标签)都不正确,用这个模块过滤那些链接,指向正确的位置
#a2enmod xml2enc 不确定这个模块是否必需
#a2enmod headers 因为配置中一条指令在这模块中,所以,没有它apache2服务无法启动
可以用 #apachectl configtest 检查配置文件有无语法错误,从网址 http://www.apachetutor.org/admin/reverseproxies 可以了解apache的反向代理是怎么回事,从 http://httpd.apache.org/docs/2.4/mod/mod_proxy_html.html 了解反向代理过滤链接的proxy_html模块的情况
因为同时使用了proxy_html模块,所以,proxy模块启用就好,不用配置,我们在/etc/apache2/mods-enabled/proxy_html.conf 配置文件的尾部,添加如下内容(目的是访问http://10.5.10.74/lab/时访问的其实是内网的http://10.5.10.200/)
ProxyRequests off
ProxyPass /lab/ http://10.5.10.200/
ProxyHTMLURLMap http://10.5.10.200 /lab
<Location /lab/>
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap / /lab/
RequestHeader unset Accept-Encoding
</Location>
#service apache2 restart
现在,我们应该已经做到了访问本服务器 /lab/ 目录,实际访问 http://10.5.10.200/,后者网站的链接都被“修正”了,例如 http://10.5.10.200/room/index 被修正为 http://..../lab/room/index
为了实现本服务器总是能连到外网,在cron里添加自动登录的任务
$crontab -e 修改用户的cron计划任务,在尾部添加 */50 * * * * sh -l -c '/home/sjg/ngrok_free/autologin.sh 我的工号 对应密码'
$crontab -l 查看计划任务设置情况(我们是每50分钟登录验证一次)
$ping -c 4 www.163.com 验证与外网的连通性
$screen ngrok.sh 用screen会话执行ngrok连接到外部ngrok server (ngrok.sh 可以替换成同类实现内网穿透的脚本)
观察内部的地址:端口 和外部地址:端口的绑定情况(外网用后者访问)
按 C-a d (即Ctrl+A D)从当前会话detach (C-a 相当于 screen 内部的按键指令,就跟emacs 的 C-x 一个道理)
$screen -ls 可以查看当前在进行的screen 会话,获取到会话<ID>后,可以用 screen -r <ID> 恢复会话
$ps -aux | grep ngrok 查看ngrok客户端是否在后台正常运行
$exit 从ssh server断开