• Nginx反向代理模块的指令是由ngx_http_proxy_module模块进行解析,该模块在安装Nginx的时候已经自己加装到Nginx中。

指令

proxy_pass指令

  1. 该指令用来设置被代理服务器地址,可以是主机名称、IP地址加端口号形式。
语法 proxy_pass URL;
默认值
位置 location
  1. URL:为要设置的被代理服务器地址,包含传输协议(http,https://)、主机名称或IP地址加端口号、URI等要素。
server {
    listen 80;
    server_name localhost;
    location / {
        # 客户端访问 http://localhost/index.html 效果一样没区别
        #proxy_pass http://192.168.200.146;
        #proxy_pass http://192.168.200.146/;
    }
}

server{
    listen 80;
    server_name localhost;
    location /server{
        # 客户端访问 http://localhost/server/index.html 地址不变
        #proxy_pass http://192.168.200.146;

        # 客户端访问 http://localhost/server/index.html 
        # 地址变为 http://localhost/index.html
        #proxy_pass http://192.168.200.146/;
    }
}

proxy_set_header指令

  1. 该指令可以更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给代理的服务器。
语法 proxy_set_header field value;
默认值 proxy_set_header Host $proxy_host; | proxy_set_header Connection close;
位置 http、server、location
server {
    listen  8080;
    server_name localhost;
    location /server {
        proxy_pass http://192.168.200.146:8080/;

        proxy_set_header username TOM;
    }
}

proxy_redirect指令

  1. 该指令是用来重置头信息中的"Location"和"Refresh"的值。
语法 proxy_redirect redirect replacement; | proxy_redirect default; | proxy_redirect off;
默认值 proxy_redirect default;
位置 http、server、location
server {
    listen  8081;
    server_name localhost;
    location / {
        proxy_pass http://192.168.1.146:8081/;
        # http://192.168.1.146 代码的地址
        # http://192.168.1.133 来源的地址
        proxy_redirect http://192.168.1.146 http://192.168.1.133;
    }
}
  1. proxy_redirect redirect replacement
    • redirect:目标,Location的值
    • replacement:要替换的值
  2. proxy_redirect default
    • 将location块的uri变量作为replacement
  3. proxy_redirect off:关闭proxy_redirect的功能。

示例

  1. nginx 代理三台内容不一的服务器。
server {
    listen          8082;
    server_name     localhost;

    location /server1 {
        proxy_pass http://192.168.1.146:9001/;
    }

    location /server2 {
        proxy_pass http://192.168.1.146:9002/;
    }

    location /server3 {
        proxy_pass http://192.168.1.146:9003/;
    }
}