一、基础代理转发

最基础的代理转发:比如不想暴露自己应用所在的真实地址,可以通过nginx做反向代理。如下,访问127.0.0.1/admin/test/getUser其实最终访问的是127.0.0.1:8080/admin/test/getUser。

server {
        listen       80;
        server_name  127.0.0.1;#可配置成nginx所在服务器ip或者127.0.0.1

		location / {
            proxy_pass   http://127.0.0.1:8080;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

二、根据不同的路径,跳到不同的服务中

假如我现在有三个服务,分别是后台主系统、短信发送系统、oss附件存储系统。现在他们对应的地址分别是127.0.0.1:8110、127.0.0.1:8120、127.0.0.1:8130。如果前端想访问这三个服务,需要配置三个不同的地址,很不便于管理。如果对前台只暴露一个ip和端口就能访问所有的服务的话,更便于前端的交互。nginx可以实现该功能。

在后端进行开发时,先约定好每个服务的接口地址,比如后台主系统就是ip:port/admin/xx,短信就是ip:port/sms/xx,oss就是ip:port/oss/xx,这样就可以配置nginx,根据不同的请求路径,转发到不同的服务去。如下:

server {
        listen       80;
        server_name  127.0.0.1;

		location ~ /core/ {
            proxy_pass   http://127.0.0.1:8110;
        }
		location ~ /sms/ {
            proxy_pass   http://127.0.0.1:8120;
        }
        location ~ /oss/ {
            proxy_pass   http://127.0.0.1:8130;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

三、配置多server(适用于所有场景,不单单是反向代理)

同一个nginx还可以定义多个server,处理不同的情况。有如下三种情况:

1、通过监听不同的端口。如下所示,访问127.0.0.1:80其实最终访问的是127.0.0.1:8080;访问127.0.0.1:81其实最终访问的是127.0.0.1:8081。

server {
        listen       80;
        server_name  127.0.0.1;

		location / {
            proxy_pass   http://127.0.0.1:8080;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
server {
        listen       81;
        server_name  127.0.0.1;

		location / {
            proxy_pass   http://127.0.0.1:8081;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

2、通过配置不同的ip。一般我们服务器可以配置多个ip地址(不懂得自行百度),可以通过暴露不同的地址进行区分。假如我目前服务器配置了192.168.103.111、192.168.103.112两个地址,两个地址访问到的其实都是同一台服务器。那么nginx可以通过访问的ip不通进入到不同的server中。如下所示:访问192.168.103.111:80其实最终访问的是127.0.0.1:8080;访问192.168.103.112:80其实最终访问的是127.0.0.1:8081。

server {
        listen       80;
        server_name  192.168.103.111;

		location / {
            proxy_pass   http://127.0.0.1:8080;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
server {
        listen       80;
        server_name  192.168.103.112;

		location / {
            proxy_pass   http://127.0.0.1:8081;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

3、通过不同的域名区分。这样首先需要在本地hosts中配置ip映射。可以配置同一个ip多个域名或者如果服务器有多个ip可以配置不同ip不同域名。假如只有一个ip可以这样配置:

192.168.103.111 www.core.com
192.168.103.111 www.sms.com

假如和2一样有多个ip还可以这样配置:

192.168.103.111 www.core.com
192.168.103.112 www.sms.com

最终效果是一样的,如下所示:访问www.core.com:80其实最终访问的是127.0.0.1:8080;访问www.sms.com:80其实最终访问的是127.0.0.1:8081。

server {
        listen       80;
        server_name  www.core.com;

		location / {
            proxy_pass   http://127.0.0.1:8080;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
server {
        listen       80;
        server_name  www.sms.com;

		location / {
            proxy_pass   http://127.0.0.1:8081;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }