使用Nginx实现同一固定IP上,多个Web站点访问不加端口号

2017-03-11 01:20:39 +0000

       一直以来在外网访问公司的内部系统都需要带端口号,原因是公司仅有一根带固定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或关闭运行窗口。