反向代理

配置请访问官方说明http://nginx.org/en/docs/http/ngx_http_proxy_module.html

proxy_pass

  • 描述:指定代理服务器的地址和端口,以及可能的 URI。

    1
    2
    3
    4
    # 语法
    proxy_pass URL;
    # 示例
    proxy_pass http://backend_servers;

proxy_set_header

  • 描述:设置发送到代理服务器的请求头。这常用于设置 Host、X-Real-IP、X-Forwarded-For 等头信息。

    1
    2
    3
    4
    5
    6
    # 语法
    proxy_set_header field value;
    # 示例
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_hide_header

  • 描述:隐藏来自代理服务器的响应头。

    1
    2
    3
    4
    # 语法
    proxy_hide_header field;
    # 示例
    proxy_hide_header X-Powered-By;

proxy_pass_header

  • 描述:允许传递来自代理服务器的特定响应头。

    1
    2
    3
    4
    # 语法
    proxy_pass_header field;
    # 示例
    proxy_pass_header Server;

proxy_connect_timeout

  • 描述:设置与代理服务器建立连接的超时时间。

    1
    2
    3
    4
    # 语法
    proxy_connect_timeout time;
    # 示例
    proxy_connect_timeout 60s;

proxy_send_timeout

  • 描述:设置向代理服务器发送请求的超时时间。

    1
    2
    3
    4
    # 语法
    proxy_send_timeout time;
    # 示例
    proxy_send_timeout 60s;

proxy_read_timeout

  • 描述:设置从代理服务器读取响应的超时时间。

    1
    2
    3
    4
    # 用法
    proxy_read_timeout time;
    # 示例
    proxy_read_timeout 60s;

proxy_buffer_size

  • 描述:设置从代理服务器读取响应的第一部分缓冲区的大小。

    1
    2
    3
    4
    # 用法
    proxy_buffer_size size;
    # 示例
    proxy_buffer_size 4k;

proxy_buffers

  • 描述:设置用于从代理服务器读取响应的缓冲区数量和大小。

    1
    2
    3
    4
    # 用法
    proxy_buffers number size;
    # 示例
    proxy_buffers 8 4k;

proxy_busy_buffers_size

  • 描述:当响应被快速发送时,Nginx 会尝试使用更大的缓冲区来存储响应。这个指令设置这些“忙碌”缓冲区的大小。

    1
    2
    3
    4
    5

    # 用法
    proxy_busy_buffers_size size;
    # 示例
    proxy_busy_buffers_size 8k;

proxy_temp_path

  • 描述:设置用于存储来自代理服务器的临时文件的路径。

    1
    2
    3
    4
    5

    # 用法
    proxy_temp_path path [level1 [level2 [level3]]];
    # 示例
    proxy_temp_path /var/nginx/proxy_temp

proxy_max_temp_file_size

  • 描述:设置允许存储到临时文件的响应的最大大小。超过这个大小的响应将不会被保存到磁盘上。

    1
    2
    3
    4
    # 用法
    proxy_max_temp_file_size size;
    # 示例
    proxy_max_temp_file_size 1024m;

示例

  • 修改Nginx配置,添加静态目录及反向代理配置,此时访问则会代理到tomcat8080服务上

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    [root@RockyLinux9 ~]# cat /usr/local/nginx/conf/nginx.conf
    http {
    ...

    server {
    listen 80;
    #server_name localhost;
    server_name fulsun.com;

    #charset koi8-r;

    #access_log logs/host.access.log main;

    location /fulsun {
    root /var/www;
    index index.html index.htm;
    expires max;
    add_header Cache-Control public;
    }

    location / {
    proxy_pass http://localhost:8080; # 假设Tomcat在本地8080端口上运行
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # 其他的Nginx代理设置...
    }

    # location / {
    # root html;
    # index index.html index.htm;
    # }
    ...
    }
    }

负载均衡

Nginx的负载均衡配置主要通过nginx.conf配置文件中的upstream模块server模块的配合使用来实现。

upstream模块用于定义后端服务器组,这些服务器组可以被proxy_passfastcgi_passuwsgi_passscgi_passmemcached_pass等指令引用,以实现负载均衡。

参数说明

官方说明:http://nginx.org/en/docs/http/ngx_http_upstream_module.html

server

  • 描述:指定后端服务器的地址和端口,格式为 address[:port] 。若省略端口,则默认为80端口。

    1
    2
    # 语法
    server address [parameters];
    1
    2
    3
    4
    upstream backend_servers {  
    server backend1.example.com;
    server backend2.example.com:8080;
    }

weight

  • 指定服务器的权重,默认为1。权重越大,被分配到的请求就越多。

    1
    weight=number
    1
    2
    3
    4
    upstream backend_servers {  
    server backend1.example.com weight=5;
    server backend2.example.com weight=1;
    }

max_fails

  • 描述:在fail_timeout指定的时间段内,达到此失败次数后,服务器将被标记为不可用。默认值为1。

    1
    max_fails=number
    1
    2
    3
    upstream backend_servers {  
    server backend1.example.com max_fails=3;
    }

fail_timeout

  • 描述:指定在将服务器标记为不可用之前,服务器应连续失败的次数的时间段。默认值为10秒。

    1
    fail_timeout=time
    1
    2
    3
    upstream backend_servers {  
    server backend1.example.com fail_timeout=30s;
    }

状态参数:down

  • 描述:标记服务器为永久不可用。该参数不能与backup参数一起使用。

    1
    2
    3
    4
    upstream backend_servers {  
    server backend1.example.com down;
    server backend2.example.com;
    }

状态参数:backup

  • 描述:标记服务器为备份服务器。当所有非备份服务器都不可用时,才会使用备份服务器。

    1
    2
    3
    4
    upstream backend_servers {  
    server backend1.example.com;
    server backup1.example.com backup;
    }

hash、ip_hash、least_conn、random 和 least_time

  • 描述:指定负载均衡的分配方法。

    • hash $request_uri:基于请求的URI进行哈希,然后分配到特定的服务器。

    • ip_hash:基于客户端的IP地址进行哈希,确保来自同一IP地址的请求始终被发送到同一台服务器(用于保持会话一致性)。

    • least_conn:将请求分配给当前连接数最少的服务器。

    • random:随机分配请求到各个服务器。

    • least_time header|last_byte|last_byte(Nginx Plus版本):基于服务器处理请求的平均时间分配请求。

      1
      2
      3
      4
      5
      upstream backend_servers {  
      hash $request_uri consistent;
      server backend1.example.com;
      server backend2.example.com;
      }

keepalive

  • 描述:在upstream块中启用或禁用长连接(persistent connections)。默认情况下,长连接是启用的。

    1
    keepalive connections;
    1
    2
    3
    4
    5
    6
    upstream backend_servers {  
    server backend1.example.com;
    server backend2.example.com;

    keepalive 32;
    }

示例

  • 创建测试目录及文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    [root@RockyLinux9 ~]# mkdir -p /var/www/{fulsun8081,fulsun8082}

    [root@RockyLinux9 ~]# cat /var/www/fulsun8081/index.html
    <html>
    This directory is /var/www/fulsun8081.
    </html>

    [root@RockyLinux9 ~]# cat /var/www/fulsun8082/index.html
    <html>
    This directory is /var/www/fulsun8082.
    </html>
  • 修改配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 添加两个server段,监听8081和8082端口,并分别执行对应的测试文件
    [root@RockyLinux9 ~]# vim /usr/local/nginx/conf/nginx.conf
    http {

    ...

    server {
    listen 8081;
    root /var/www/fulsun8081;
    }

    server {
    listen 8082;
    root /var/www/fulsun8082;
    }

    ...

    }
  • 继续修改配置文件, 添加upstream段,定义两个server指向8081和8082端口,修改默认server段中的location,指向定义的upstream。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    [root@RockyLinux9 ~]# vim /usr/local/nginx/conf/nginx.conf
    http {
    ...

    upstream backup {
    server 192.168.199.152:8081 weight=1 fail_timeout=10s;
    server 192.168.199.152:8082 weight=3;
    }

    server {
    listen 8081;
    root /var/www/fulsun8081;
    }

    server {
    listen 8082;
    root /var/www/fulsun8082;
    }

    server {
    listen 80;
    #server_name localhost;
    server_name fulsun.com;

    location / {
    proxy_pass http://backup;
    }
    }
    }
  • nginx -s reload后,可以看到访问80端口,显示了8081和8082端口对应页面。定义参数weight分别为1和3,则表示每访问4次,其中1次会访问到8081端口页面,剩余3次会访问到8082端口页面。