一、什么是反向代理?
先做一个比喻来说明一下:
一个小区里,如果有两户人同名同姓,若不写明是哪栋楼那一层住户,恐怕光通过姓名,是很难找到正确的目标对象的。
上述情况如果反映到服务器和局域网中:
即一个局域网内,可能存在两台或者两台以上的服务器都在使用同一端口(如HTTP标准端口80等)。这种情况下,由于两台服务器都在路由器之后(路由器才拥有公网IP),要么就强迫其中一台服务器改用默认的80端口(如换成81,然后路由器映射外网的81端口到内网目标服务器的80端口),要么就将所有指向80端口的请求转发到同一部代理服务器上,再由该代理服务器进行分配(根据不同条件不同网址来选择不同的服务器)
而上面提到的代理服务器就是本文中需要架设的“反向代理”。之所以称为“反向”,是因为该服务器先获得外部请求,然后再将请求正确引向内网服务器,这过程被称为“反向”。反而为之,如果先是内网电脑将上网请求发给代理服务器,然后代理服务器再将正确的外网网址和网站信息转发给内网电脑,这一过程就被称为“正向”,即我们常规理解的“代理服务器”(就是可以帮助大家×××的那种)。
二、平台选择
知道何谓“反向代理”以后,接下来就是系统平台、软件平台的选择。我的情况如前面所说,只需要简单的反向代理功能。这一大前提下,我决定选择最简单最稳定的平台就好——这首先就排除了Windows + ISA的搭配。
说到稳定,一般会让人想到Linux,我也不例外。但即使是Linux,也有带UI和不带UI之分(即图形界面)。考虑到一旦设置好反向代理以后,基本上不再需要进行维护(除非服务器IP改变,我一般都固定的),所以最后断然决定放弃Windows平台,采用Ubuntu Server(不是那个桌面版,这个系统没有图形界面,不过也可以装)
Linux下可以实现反向代理的软件有两个(比较出名的):Apache和NginX
后者以轻便简单闻名,所以我选择了后者。
于是,总结一下我的反向代理服务器运行环境:
硬件平台:Hyper-V上面的虚拟机,512MB内存(动态)
系统平台:Ubuntu Server 12.04.1 (无图形界面,安装时选择OpenSSH环境)
软件平台:NginX + OpenSSL
三、安装软件
OpenSSH应该是在选择环境时就已经安装好了,如果没有,请执行以下指令完成安装:
sudo apt-get install openssh-server
安装服务器端就可以了,主要是为了方便传文件(习惯在Windows下面编辑文档)……
OpenSSH安装完成后不需要任何设置就能直接使用。但如果考虑安全等方面问题,建议更换默认端口22和使用Public/Private Key(但这不在本文讨论范围)
接下来是安装NginX,执行以下命令:
sudo apt-get install nginx
安装完成后,服务直接启用,我们需要做的只是编辑控制文件(下一篇再介绍),现在我们先做其他准备工作。
将Windows Home Server的域名证书进行格式转换,目的是为了在NginX中提供SSL支持(就是那个Https)
WHS的域名证书到处方法请见:http://cnbeta.blog.51cto.com/1234897/1032880
导出后的文件,通过SSH上传至Linux服务器中(我用SSH Secure File Transfer这个软件)
注意:如果上传失败,或报错,通常是你没有更改权限(就是那个Chmod指令)
我将whs2011.pfx域名证书放在Linux下的$home目录,然后执行以下操作:
openssl pkcs12 -in whs2011.pfx -nokeys -out whs.pem
openssl pkcs12 -in whs2011.pfx -out whs.key -nocerts -nodes
如图所示,其中要求输入的密码是在导出证书时自己设置的那个密码。
完成上述文件生成后,请将这些文件复制到、etc\nginx\ssl\下(ssl文件夹不存在,请自己创建)