一、正向代理与反向代理

正向代理:是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。VPN就是这样的代理,通过VPN更改自己的IP,进而可以访问Google等一些正常情况下不能访问的网站
  反向代理:反向代理也是位于客户端与服务器之前,但对用户而言,真正的服务器就是代理服务器,用户通过访问代理服务器,进而访问真正的服务器,从而获得资源。
  正向代理与反向代理区别:正向代理代理的是客户端,反向代理代理的是服务端。

二、Nginx配置反向代理

  这里通过一个例子来演示反向代理:我们通过访问一个nginx服务器,进而访问到tomcat服务器,即通过nginx代理tomcat服务器,访问tomcat资源。此处示例均在linux上进行。
  1.首先启动tomcat。

cd /usr/src/apache-tomcat-8.5.50/bin
./startup.sh

  2.配置nginx

cd /usr/local/nginx/conf
vi ./nginx.conf

修改server下的配置

server {
        listen       80;
        server_name  127.0.0.1;
        location / {
            root   html;
            index  index.html index.htm;
            # 被代理服务器的地址
            proxy_pass http://127.0.0.1:8080;
        }
}

三、Nginx反向代理配置指令说明

3.1 listen

  listen指令用来配置要监听的端口及IP,如

listen *:8080 | *:8081  # 监听所有8080端口及8081端口
listen IP # 监听该IP的所有端口
listen port # 监听该端口的所有IP连接
listen IP:port # 监听IP地址的端口

3.2 server_name

  server_name用来指定虚拟主机的配置,通常分为两种:
1.基于名称的server_name

server_name www.xxx.com
# 可指定多个name,中间使用空格分隔,也可使用*通配符,*只能用在收尾
server_name *.xxx.com www.xxx.*
# 使用正则匹配name
server_name ~^www\.xxx\.com$;

以上匹配顺序优先级为:准确匹配>通配符在前的server_name>通配符在结尾的server_name>正则表达式的server_name 2.基于IP地址的server_name

server_name 127.0.0.1

3.3 location

  location用来匹配URL
语法结构

location [ = | ~ | ~* | ^~ ] uri {

}

1、=:用于不含正则表达式的 uri 前,要求请求字符串与uri严格匹配
2、~:用于表示uri包含正则表达式,区分大小写
3、~*:用于表示uri包含正则表达式,不区分大小写
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~*标识。

3.3.1 proxy_pass

  该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。
语法结构

proxy_pass URL;

3.3.2 index

  该指令用来配置网站的默认首页。

index index.html index.jsp;