Keep on going, never give up.

使用SSH 配置APACHE反向代理

当我们需要通过外网访问内网时,有很多种解决办法,一般反向代理是最常用的(反向代理和正向代理的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端),随着使用工具软件不同,配置方法也不同,本文描述如何通过ssh方法配置apache反向代理,从而实现通过外网访问内网。

预设环境:

内网机器:192.168.0.88,内网端口80,外网机器 :12.34.56.78,外网绑定域名:abc.com,预期实现把通过外网访问abc.com的请求转发到内网的80 端口,本文我们就通过ssh转发+apache反向代理实现。

所以,工作也分两步实现:

一、开启apache反向代理

1、apache需要加载下面两个代理模块,且默认并没加载。

手动加载方法:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

或,自动加载方法(命令行执行创建链接即可):

ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load

2、为apache配置网站

打开/etc/apache2/sites-available/000-default.conf,编辑参考如下:

<VirtualHost 12.34.56.78:80>
ServerName  abc.com
ServerAlias abc.com
ProxyRequests Off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

3、重启apache2

service apache2 restart

二、创建ssh转发

由于内网的机器IP地址可能发生变化,并且外网机器也无法直接访问内网机器,所以最简单方法是内网机器直接连接外网机器。

1、在内网机器192.168.0.88 上执行

ssh -N -v -R 8080:127.0.0.1:80 root@12.34.56.78

此时会提示输入root密码,通过后即建立了ssh链接。

此时通过内网机器通过 ssh 连接到外网机器的8080端口(外网机器监听其 8080端口),并且所有通过 8080端口数据都通过 ssh 转发到 127.0.0.1 的 80 端口。

 

三、断开重连

使用上面方法临时用途还是可以的,但有个问题,就是连接被断开。所以,为了防止反向的Tunnel断开,我们可使用autossh工具,可帮助断线后自动重连。

1、在内网主机上生产公钥和私钥

$ ssh-keygen

此时,会在当前目录./ssh下面生成公私钥。

2、把生成的id_rsa.pub公钥推送到外网主机上

$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@12.34.56.78

上述方法会自动把当前公钥加入授权KEY中,如果是自己手动拷贝过去,则需要手动把将公钥加入到~/.ssh/authorized_keys中,方法如下:

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

此时,内网主机连接外网主机时,就不再提示输入密码验证了

3、创建代理隧道,并自动断开重连

$ autossh -M 5678 -NR 8080:localhost:80 root@12.34.56.78

执行上面这句后应该是命令行卡在监听状态(说明已后台执行,可关闭当前终端,不关也可以),如果执行后马上就退出并返回命令状态,说明当天系统5678端口可能被占用,可重启系统试试。

4、手动启动daemon

/bin/su -c '/usr/bin/autossh -M 5678 -NR 8080:localhost:80 root@12.34.56.78' - root

usr/bin/autossh也可能在usr/local/autossh下面,视实际安装位置而定。

5、开机启动

CENTOS上启动脚本参考下面地址,把该脚本添加到/etc/init.d/autossh中。

https://surniaulula.com/2012/12/10/autossh-startup-script-for-multiple-tunnels/

然后执行:chkconfig --add autossh

手动控制方法:$ /etc/init.d/autossh {start|stop|restart|status}

参考资料:

http://www.server110.com/apache/201309/1177.html

http://blog.csdn.net/willvc123/article/details/4449277

http://blog.csdn.net/smstong/article/details/48976333

 

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.