使用Nginx实现同一固定IP上,多个Web站点访问不加端口号
一直以来在外网访问公司的内部系统都需要带端口号,原因是公司仅有一根带固定IP的宽带。现用路由器只能根据端口号(不能根据域名)转发到对应的Web系统,80端口只能分配给公司官网。经过研究发现在不增加宽带数量和费用的情况下,可以通过Nginx代理解决此问题。原理是在Nginx转发规则中配置不同的域名,让Nginx根据域名将请求转发到不同的内部服务器上。
之前除官网外在访问OA和订单系统都要加端口号,访问过程:浏览器请求------>路由器------>服务器。
访问OA:www.oa.abc.com:8080
访问订单系统:www.abc-order.com:8019
虚拟一个简单的公司内部网络如下图,配置过程参考step1~6。实现访问过程:浏览器请求------>路由器------>Nginx服务器------>路由器。
Step 1. 域名解析配置;将上图的所有域名解析到公司的固定IP上。
Step 2. Nginx安装;
找一台服务器安装Nginx,正好有一台空置的Linux 服务器(IP:192.168.1.100),就在上面安装的Nginx服务器;Nginx可以在windows和linux上安装,根据实际情况下载不同的版本,下载地址:http://nginx.org/en/download.html 。Nginx的安装不复杂,可以百度,这里先略过。
Tips:windows版本的nginx是不随系统重启而启动,需要 winsw 将其包装成一个系统服务,实现随机启动。Linux则不用最初在配置winsw也遇到一些坑,可以参考我的另一篇《使用winsw将Nginx配置为windows系统服务可随机启动》
Step 3. Nginx服务测试,访问你的Nginx服务器地址(可能跟我的不同):http://192.168.1.100,出现如下页面安装成功;
Step 4. 配置路由器转发;
使所有的80端口的请求都经路由器,转发到Nginx服务器(192.168.1.100)的80端口。访问固定IP,出现Step 3.中页面配置成功;
公司使用的是华为的路由器,如下图:
Step 5. 配置Nginx域名转发规则;
进入nginx安装目录,新建后缀名为*.conf的配置文件:abc.conf 、oa.conf 、order.conf。
Tips:Windows中的配置与Linux有小差异,如下面所有 server{... ...} 均配置在nginx.conf中。nginx.conf见安装目录: D:\download\nginx-1.11.3\conf\nginx.conf
Nginx:
安装目录:/etc/nginx/
日志目录:/var/log/nginx
-------------------------------------
文件:abc.conf
server {
listen 80;
server_name www.abc.com abc.com;
#charset koi8-r;
access_log /var/log/nginx/abc.access.log;
location / {
proxy_pass http://192.168.1.101:80;
proxy_read_timeout 180s;
break;
}
}
文件:oa.conf
server {
listen 80;
server_name www.oa.abc.com oa.abc.com;
#charset koi8-r;
access_log /var/log/nginx/oa.access.log;
location / {
proxy_pass http://192.168.1.102:8080;
proxy_read_timeout 180s;
break;
}
}
文件:order.conf
server {
listen 80;
server_name www.abc-order.com abc-order.com;
#charset koi8-r;
access_log /var/log/nginx/order.access.log;
location / {
proxy_pass http://192.168.1.103:8019;
proxy_read_timeout 180s;
break;
}
}
Step 6. 重新启动Nginx服务,如果启动正常就可以使用域名(不加端口号)访问各系统了。
Linux:
service nginx start
service nginx stop
Windows双击nginx.exe或关闭运行窗口。