Nginx笔记——代理服务配置

正向代理

介绍

正向代理是客户端A和原始服务器B(origin server)之间的代理服务器Z,其中只有代理服务器Z才能访问到原始服务器。为了从原始服务器取得内容,客户端A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端,如下图所示:
在这里插入图片描述
总结来说:正向代理就是顺着请求的方向进行的代理,即代理服务器他是由你配置为你服务,去请求目标服务器地址,不直接访问资源,而是通过代理访问资源。

正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2)可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

配置

主要的三个指令

  1. resolver指令,用于指定DNS服务器的IP地址。DNS服务器的主要工作是进行域名解析,将域名映射为对应IP地址。语法结构为:
resolver address ... [valid=time];

address: DNS服务器IP地址
time:设置数据包在网络中的有效时间

  1. resolver_timeout指令,用于设置DNS服务器域名解析超时时间,语法结构为:
resolver_time time;
  1. proxy_pass指令,用于设置代理服务器的协议和地址,语法结构为:
proxy_pass URL; #例子 proxy_pass http://$http_host$request_uri;

在代理服务器配置中,该指令的设置相对固定,具体配置如上面的例子

例子

#正向代理
    server {

        listen 81;   #监听端口 
        resolver 8.8.8.8;   #DNS
        resolver_timeout 10s;  # DNS解析超时时间
        access_log  logs/proxy/access.log;

        location / {
            proxy_pass http://$http_host$request_uri;
            proxy_set_header Host $http_host;
            proxy_buffers 256 4k;
            proxy_max_temp_file_size 0;
            proxy_connect_timeout 30;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 301 1h;
            proxy_cache_valid any 1m;
        }
    }  


查看端口是否监听成功
在这里插入图片描述

测试

打开另外一台虚拟机,保持两台虚拟机能互相访问,使用如下命令进行测试:

curl -I --proxy xxx:xxx:xxx:81 www.baidu.com

在这里插入图片描述
在这里插入图片描述

反向代理

介绍

反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,其中只有代理服务器对外开放了防火墙,如下图:
在这里插入图片描述
反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载

配置

反向代理的基本设置21个指令

1. proxy_pass

用于设置被代理服务器的地址,可以是主机名称、IP地址加端口等形式,语法结构为:

proxy_pass URL;

其中,URL为要设置的被代理服务器的地址,包含传输协议、主机名称或IP加端口、URI等要素。例如:

proxy_pass http://www.xxx.com/uri;
proxy_pass http://127.0.0.1:8080/uri;

如果被代理服务器是一组服务器的话,可以使用upstream指令配置后端服务器组。例如:

#服务器组
upstream proxy_svrs {
server http://IP或域名:8080/api;
server http://IP或域名:8080/api;
server http://IP或域名:8080/api;
}

server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass proxy_svrs; #使用服务器组的名称
        }
    }

在上述中,在组内的各个服务器中都指明了传输协议“http://”,从而在proxy_pass指令中就不需要指明了,如果未指明则需要在proxy_pass指令中指明传输协议“http://”,如下:

proxy_pass http://proxy_svrs; 

在使用该指令的过程中还要注意,URL中是否包含URI,Nginx服务器的处理方式是不同的。如果URL中不包含URI,Nginx服务器不会改变原地址的URI;如果包含了URI,Ngxin服务器将会使用新的URI替换原来的URI。例如:

server {
        listen       80;
        server_name  localhost;
        location /api/ {
            # 配置1: proxy_pass http://127.0.0.1:8080;
            # 配置2: proxy_pass http://127.0.0.1:8080/uri;
        }
}

访问http://127.0.0.1/api,使用配置1则会转向http://127.0.0.1:8080/api;使用配置2则会转向http://127.0.0.1:8080/uri。通过上述例子总结出,如果我们不想改变原地址中的URI,就不要在URL变量中配置URI。

2. proxy_hide_header

用于设置Nginx服务器发送HTTP响应时,隐藏一些消息头信息,语法结构如下:

proxy_hide_header field;

fiedld为需要隐藏的消息头。该指令可以在http块、server块或者location块中进行配置

3. proxy_pass_header

默认情况,Nginx服务器在发送响应报文时,报文头中不包含Date、Server、X-Accel等来自被代理服务器的消息头信息。该指令可以设置这些信息是否被发送,语法结构如下:

proxy_pass_header field;

field为需要发送的信息。该指令可以在http块、server块或者location块中进行配置

4. proxy_pass_requestbody

该指令用于配置是否将客户端请求的请求体发送给代理服务器,语法结构如下:

proxy_pass_requestbody on|off; 

默认设置为开启on,开关。该指令可以在http块、server块或者location块中进行配置

5. proxy_pass_request_headers

该指令用于配置是否将客户端请求的请求头发送给代理服务器,语法结构如下:

proxy_pass_request_headers on|off; 

默认设置为开启on,可以在http块、server块或者location块中进行配置。

6. proxy_set_header

该指令可以更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给被代 理的服务器。其语法结构为:

proxy_set_header field value;
  • field,要更改的信息所在的头城。
  • valve,更改的值,支持使用文本、变量或者变量的组合
    默认情况下,该指令的设置为:
proxy_set_header Host $proxy host;
proxy_set_header Connection close;

一些设置实例:

#将目前 Host 头城的值填充成客户端的地址
proxy_set_header Host $http_host;
#将当前location 块的server_name 指令值填充到Host消息头
proxy_set_header Host $host;
#将当前1ocation块的server_name 指令值和1istener指令值一起填充到Host头城
proxy_set_header Host $host:$proxy_port;
7. proxy_set_body

该指令可以更改Nginx服务器接收到的客户端请求的请求体信息,然后将新的请求体发送给被代理的服务器。其语法结构为:

proxy_set_body value;

其中,valve为更改的信息,支持使用文本、交量或者变量的组合。

8. proxy_bind

官方文档中对该指令的解释是,强制将与代理主机的连接绑定到指定的IP地址。通俗来讲就是,在配置了多个基于名称或者基于IP的主机的情况下,如果我们希望代理连接由指定的主机处理,就可以使用该指令进行配置,其语法结构为:

proxy_bind address;

其中,address为指定主机的IP地址。 注意Nginx 0.8.22及以上版本支持该指令。

9. proxy_connect_timeout

该指令配登Nginx服务器与后端被代理服务器尝试建立连接的超时时间,其语法结构为:

proxy_connect_timeout time;

其中,time为设置的超时时间,默认为60s。

10. proxy_read_timeout

该指令配置Nginx服务器向后端被代理服务器(组)发出read请求后,等待响应的超时时间,其语法结构为:

proxy_read_timeout time;

其中,time 为设置的超时时间,默认为 60s

11. proxy_send_ timeout

该指令配置Nginx服务器向后端被代理服务器(组)发出write诸求后,等待响应的超时时间, 其语法结构为:

proxy_send_ timeout time; 

其中,time 为设置的超时时间,默认为 60s。

12. proxy_http_version

该指令用于设置用于Nginx服务器提供代理服务的HTTP协议版本,其语法结构为:

proxy_http_version 1.0 | 1.1;

默认设置为1.0版本。1.1版本支持 upsteam 服务器组设置中的keepalive 指令。

13. proxy_method

该指令用于设置Nginx服务器请求被代理服务器时使用的请求方法,一般为POST或者GET。设置了该指令,客户编的清求方法将被忽路。其诉法结构为:

proxy_method method;

其中,method 的值可以设置为 POST 或者 GET,注意不加引号;

14. proxy_ignore_client_abort

该指令用于设置在客户端中断两络请求时,Nginx服务器是否中断对被代理服务器的请求,其语法结构为:

proxy_ignore_client_abort on|off;

默认设置为off,当客户端中断网络请水时。Nginx服务器中断对被代理服务器的请求

15. proxy_ignore_headers

该指令用于设置一些HTTP响应消息头。Nginx服务器接收到被代理服务器的响应数据后不会处理被设置的消息头。其语法结构为:

proxy_ignore_headers field...;

其中,field为要设置的 HTTP 响应消息头,例如X-Accel-Redirect 、X-Accel-Expires、Expires、Cache-Control或 Set-Cookie等。

16. proxy_redirect

该指令用于修改被代理服务器返回的响应头中的Location消息头和Refresh消息头。与proxy_pass指令配合使用。比如Nginx 服务器通过proxy_pass指令将客户端的请求地址重写为被代理服务器的地址,那么 Nginx服务器返回给客户端的响应头中Location消息头显示的地址就应该和客户端发起请求的地址相对应,而不是代理服务器直按返回的地址信息,否则就会出向题。该指令解决了这个向 题,可以把代理服务器返回的地址信息更改为需要的地址信息。其语法结构为:

proxy_redirect redirect replacement;
proxy_redirect default;
proxy_redirect off;
  • redirect,匹配Locarion消息头的字符串,支持变量的使用和正则表达式。
  • replacement,用于替换redirect变量内容的字符串,支持变量的使用。
  1. 结构1,假设被代理服务器返回的啊应头中Location消息头为:
    Location: http://192.168.xx.xx:8080/proxy/
    该指令设置为:
server {
       listen       80;
       server_name www.mydomain.com;
       location /proxy/ {
            proxy_pass http://192.168.xx.xx:8080;
            proxy_redirect http://192.168.xx.xx:8080/proxy/ http://www.mydomain.com/proxy/;
            #或者使用/proxy/,这样就使用服务器的基本名称和端口,即使它来自非80端口
            #proxy_redirect http://192.168.xx.xx:8080/proxy/ /proxy/;
       }
}

Nginx 服务器会将Location消息头的信息更改为:
Location:http://www.mydomain.com/proxy/

  1. 结构2使用default,代表使用location块的uri变量作为replacement,并使用proxy_pass 变量作为 redirect。下面两段配置,它们的配置效果是等同的,都会Location消息头的信息更改为:
    Location:http://www.mydomain.com/one/
#配置1
location /one/ {
            proxy_pass http://www.mydomain.com:8080/two/; 
            proxy_redirect default;
}
#配置2
location /one/ {
     proxy_pass http://www.mydomain.com:8080/two/;
     proxy_redirect http://www.mydomain.com/two/ /one/; 
}
  1. 结构3可以将当前作用城下所有的proxy_redirect指令配置全部设置为无效。
17. proxy_intercept_errors

该指令用于配置一个状态是开启还是关闭。在开启该状态时,如果被代理的服务器返回的HTTP状态代的为400或者大于400,则 Nginx 服务器使用自己定义的错误页(使用error_page 指令 );如果是关闭该状态,Nginx 服务器直接将被代理服务器返回的HTTP 状态返回给客户端。其语法结构为:

proxy_intercept_errors on|off
18. proxy_headers_hash_max_size

该指令用于配置存放HTTP报文头的哈希表的容量,其语法结构为:

proxy_headers_hash_max_size size; 

其中,size为HTTP报文头哈希表的容量上限,默认为512个字符。即:

proxy_headers_hash_max_size 512;

Nginx服务器为了能够快速检索HTTP报文头中的各项信息。比如服务器名称, MIME 类型、请求头名称等,使用哈希表存储这些信息。Nginx服务器在申请存放 HTTP 报文头的空问时,通常以固定大小为单位申请,该大小由proxy _headers _hash_max_size指令配置。
在Nginx配置中,不仅能够配置整个哈希表的大小上限,对大部分的内容项,也可以配置其大小上限,比如 server_names_hash_max_size指令和server_names_hash_bucket_size指令用来设置服务器名称的字符数长度。

19. proxy_headers_hash_bucket_size

该指令用于设置Nginx服务器申请存放HTTP报文头的哈希表容量的单位大小。该指令的具体作用在上面 proxy_headers_hash_max_size指令的使用中巳经说明。其语法结构为:

proxy_headers_hash_bucket_size size;

其中,size为设置的容量,默认为64 个字符。

20. proxy_next_upstream

在配置Nginx服务器反向代理功能时,如果使用upstream指令配置了一组服务器作为被代理服务,服务器组中各服务器的访问规则遵循upstream指令配置的轮训规则,同时可以使制该指令配置在发生哪些异常情况时,将请求顺次交由下一个组内服务器处理。该指令的语法结构为:

proxy_next_upstream status ...;

找中,status为设置的服务器返回状态,可以是一个或者多个。这些状态包括:

  • error, 在建立连接、间被代理的取务器发送请求或者读取啊应头时服务器发生连接错误。
  • timeout.,在建立连接、向被代理的服务器发送请求或者读取响应头时服务器发生连接超时。
  • invalid_header,被代理的服务器返回的响应头为空或者无效。
  • http_500|http_502|http_503|http_504|http_404, 被代理的服务器返回 500、502、503、 504 或者404 状态代码。
  • off,无法将请求发送给被代理的服务器。
    注意与被代理的服务器进行数据传榆的过程中发送错误的清求,不包含在该指令支持的状态之内。
20. proxy_ssl_session_ reuse

该指令用于配置足否使用基于 SSL安全协议的会话连孩(https:)被代理的服务器,其语法结 构为:

proxy_ssl_session_ reuse on|off;

缺认设置为开启(on狀态,如果我们在错误日志中发现SSL3_GET_FINISHED:digest check failed的情况,可以将该指令配置为关闭(off)状态。

Proxy Buffer的配置指令

Proxy Buffer启用以后,Nginx服务器会异步地将被代理服务器的响应数据传逃给客户端。
Nginx服务器首先尽可能地从被代理殿务器那里接收响应数据,放置在Proxy Buffer中,Buffer的大小由 proxy_ buffer_size指令和proxy_buffers指令决定。如果在接收过程中,发现Buffer没有足够大小来按收一次响应的数据,Nginx服务器会将部分接收到的数据临时存放在磁盘的临时文件中,磁盘上的临时文件路径可以通过proxy_temp_path指令进行设置,临时文件的大小由proxy_ max_temp_ file_size 指令和proxy_temp_file_ write_size指令决定。 一次响应数据被接收完成或者Buffer已经装满后。Nginx殿务器开始向客户端传输数据。
每个Proxy Buffer装满数据后。在从开始向客户端发送一直到Proxy Buffer中的数据全部传输给客户端的整个过程中,它都处于BUSY状态,期间对它进行的其他操作都会失败。同时处于BUSY状态的Proxy Buffer总大小由 proxy_ busy_buffers_size 指令限制,不能超过该指令设置的大小。
当Proxy Buffer关闭时,Nginx服务器只要接收到响应数据就会同步地传递给客户端,它本身不会读取完整的响应数据。

1.proxy_buffering

该指令用于配置是否启用或者关闭Proxy Buffer,其语法结构为:

proxy_buffering on|off;

默认设置为开启状态
开启和关用Proxy Buffer还可以通过在HTTP响应头的X-Accel-Buffering字段设置yes或者no来实现,但Nginx中proxy_ignore_headers指令的设置可能导致该消息头设置失效。

2. proxy_buffers

该指令用于配置接收一次被代理服务器响应数据的Proxy Buffer个数和每个Buffer的大小,其语法结构为:

proxy_buffers number size;
  • number,Proxy Buffer的个数
  • size,每个Buffer的大小, 一般设置为内存页的大小。根据平台的不同,可能为 4KB 或者 8KB,。
    由这个指令可以得到接收一次被代理服务器响应数据的Proxy Buffer总大小为 number*size。该指令默认设置为:
proxy_buffers 8 4k|8k;
3. proxy_buffer_size

该指令用于配置从被代理服务器获取的第一部分响应数据的大小,该数据中一般包含了 HTTP响应头,Nginx服务器通过它来获取响应数据和被代理服务器的一些必要信息。该指令的语法结构为:

proxy_buffer_size size;

其中,size为设置的缓存大小,默认设置为4KB或者8KB,保持与proxy_ buffers指令中的size变量相同,当然也可以设置得更小。 注意该指令不要和proxy_buffers指令混淆。

4. proxy_ busy_ buffers_size

该指令用于限制同时处于BUSY状态的Proxy Buffer的总大小,该指令的订法结构为:

proxy_busy_ buffers_size size;

其中,size为设置的处于BUSY状态的缓存区总大小。默认设置为8KB或者16KB。

5. proxy_temp_path

该指令用于配置磁盘上的一个文件路径,该文件用于临时存放代理服务器的大体积中应数据。如果 Proxy Buffer被裝满后,响应数据仍然没有被Nginx服务器完全接收。响应数据就会被临时存放在该文件中。该指令的语法结构为:

proxy_temp_path path [level1 [level2 [level2] ] ];
  • path,设置磁盘上存放临时文件的路径。
  • levelN, 设置在path变量设置的路径下第几级hash目录中存放临时文件。
6. proxy_max_temp_file_size

该指令用于配置所有临时文件的总体积大小,存放在磁盘上的临时文件大小不能超过该配置值, 这避免了响应数据过大造成磁盘空间不足的问题,其语法结构为:

proxy_max_temp_file_size size;

其中,size 为设置的临时文件总体积上限值,默认设置为1024MB。

7. proxy_temp_file_write_size

该指令用于配置同时写人临时文件的数据量的总大小,合理的设置可以避免磁盘IO负载过重导致系统性能下降的问题,其语法结构为:

proxy_temp_file_write_size size;

其中,size 为设置的数据量总大小上限值,默认设置根据平台的不同,可以为8KB或16KB,一般与平台的内存页大小相同。

Proxy Cache的配置指令

Proxy Cache机制与缓存数据的产生和使用有很大关系。Proxy Cache机制实际上是Nginx服务器提供的 web级存机制的一部分。
Buffer和Cache虽然都是用手提供IO吞吐效率的,但是它们是一对不同的概念,翻译成中文分别“缓冲”和“缓存”两个词。Buffer,主要用于传输效率不同步或者优先级別不相同的设备之间间传递数据。一般通过对一方数据进行临时存放。再统一发送的办法传递给另一方,以降低进程之间的等待时间,保证速度较快的进程不发生间断,临时存放的数据一旦传送给另一方,这些数据本身也就没有用处了;Cache,主要用于将硬盘上已有的数据在内存中建立缓存数据,提高数据的访问效率。对于过期不用的缓存可以随时销毀,但不会销毁硬盘上的数据。
在Nginx服务器中,Porxy Buffer和Proxy Cache都与代理服务相关,主要用来提供客户端与被代理服务器之问的交互效率。Porxy Buffer实现了被代理服务器响应数据的异步传输,Proxy Cache则主要实现 Nginx服务器对客户端数据请求的快速响应。Nginx服务器在接收到被代理服务器的响应数据之后,一方面通过Porxy Buffer机制将数据传递给客户端,另一方面根据Proxy Cache的配置将这些数据缓存到本地硬盘上。当客户端下次要访问相同的数据时,Nginx服务器直接从硬盘检索到相应的数据返回给用户,从而减少与被代理服务器交互的时间。
特别需要说明的是,Proxy Cache机制依赖于Porxy Buffer机制,只有在Porxy Buffer机制开启的情况下proxy Cache的配置才发挥作用。

1. proxy_cache

该指令用于配置一块公用的内存区城的名称,该区域可以存放缓存的索引数据。这些数据在Nginx服务器启动时由级存索引重建进程负责建立,在Nginx服务器的整个运行过程中由级存管理进程负责定时检查过期数据、检索等管理工作。其语法结构为:

proxy_cache zone|off;
  • zone,设置的用于存放缓存索引的内存区城的名称。
  • off,关闭proxy_cache功能,是默认设置。
2. proxy_cache_bypass

该指令用于配置Nginx服务器向客户道发送响应数据时,不从级存中获取的条件。这些条件支持使用 Ngin 配置的常用变量。其语法结构为:

proxy_cache_bypass string ...;

其中,string为条件变量,支持设置多个,当至少有一个字符串指令不为空或者不等于0时,响应数据不从缓存中获取。

3. proxy_cache_key

该指令用于设置Nginx服务器在内存中为缓存数据建立家引时使用的关键字,其语法结构为:

proxy_cache_key string;

共中,string为设置的关键字,支特变量。在 Nginx 0.7.48之前的版本中默认的设置为:

proxy_cache_key "$scheme$proxy_host$request_uri";

如果我们希望缓存数据包含服务器主机名称等关键字,则可以将该指令设置为:

proxy_cache_key "$scheme$proxy_host$request_uri";

在 Nginx 0.7.48 之后的版本中,通常使用以下配置:

proxy_cache_key "$scheme$proxy_host$uri$is_args$args";
4. proxy_cache_lock

该指令用于设置是否开启缓存的锁功能。在缓存中,某些数据项可以同时被多个请求返回的响应数据填充。开启该功能后,Nginx服务器同时只能有一个请求填充缓存中的某一数据项,这相当于给该数据项上锁,不允许其他请求操作。其他的请求如果也想填充该项,必领等待该数据项的锁被释放。 这个等待时间由proxy_cache_ lock_timeout指令配置。 该指令的语法结构为:

proxy_cache_lock on|off;

该指令在Nginx 1.1.2及之后的版本中可以使用,默认情况下,设置为关闭状态。

proxy_cache_lock_timeout

该指令用于设置级存的锁功能开启以后锁的超时时间。该指令的语汰结构为:

proxy_cache_lock_timeout time;

其中,time为设置的时间,默认为 5s。

6. proxy_cache_min_uses

该指令用于设置客户端清求发送的次数,当客户端向被代理服务器发送相同请求达到指定次数后, Nginx服务器才对该请求的响应数据做缓存。合理设置该值可以有效地降低硬盘上缓存数据的数量,井提高缓存的命中率。该指令的语法结构为:

proxy_cache_min_uses number;

其中,number为设置的次数。默认设置为 1。

7. proxy_cache_path

该指令用于设置Nginx服务器存储缓存数据的路径以及和缓存索引相关的内容,其语法结构为:

proxy_cache_path path [levels-levels] keys_zone=name:size1 [inactive-time1] [max_size=size2] [loader_files=number] [loader_sleep=time2] [loader_threshold=time3]; 
  • path,设置级存数据存放的根路径,该路径应该足预先存在于磁盘上的。
  • levels,设置在相对于path指定目录的第几级hash目录中缓存数据。levels=1,表示一级hash目录;levels=1:2,表示两级,依次类推。目录的名称是基于请求URL通过哈爷算法获取到的
  • name:size1,Nginx服务器的缓存索引重建进程在内存中为缓存数据建立素引,这一对变量用来设置存放缓存素引的内存区城的名称和大小。
  • time1,设置强制更新缓存数据的时间,当硬盘上的缓存数据在设定的时间内没有被访向时,Nginx服务器就强制从硬盘上将其删除,下次客户端访问该数据时重新缓存。该指令默认设置为10s。
  • size2,设置硬盘中缓存数据的大小限制。我们知道,硬盘中的缓存源数据由Nginx服务器的绶存管理进程进行管理,当缓存的大小超过该变量的设置时,缓存管理进程将根据最近最少被访向的策略删除缓存。
  • number,设置缓存索引重建进程每次加载的数据元素的数量上限。在重建缓存索引的过程中,进程通过一系列的递归遍历读取硬盘上的缓存数据目录及缓存数据文件,对每个数据文件中的缓存数据在内存中建立对应的素引,我们称每建立一个素引为加载一个数据元素。进程在每次遍历过程中可以同时加载多个数据元素,该值限制了每次遍历中同时加载的数据元素的数量。默认设置为 100。
  • time2,设置缓存索引重建进程在一次通历结束、下次遍历开始之间的暂停时长。默认设置为50ms。
  • time3,设置遍历一次磁盘缓存源数据的时间上限。默认设置为200ms。
    该指令设置比较复杂,一般需要设置前面三个指令的情形比较多,后面的几个变量与Nginx 服务器缓存索引重建进程及管理进程的性能相关,一般情况下保持默认设置就可以了。简单的配置实例:
proxy_cache_path /nginx/cache/a levels=1 keys_zone=a:10m;
proxy_cache_path /nginx/cache/b levels=2:2 keys_zone=b:100m;
proxy_cache_path /nginx/cache/c levels=1:1:2 keys_zone=c:1000m;

注意该指令和共他指令不同,只能放在http块中。

8. proxy_cache_use_stale

如果Nginx在访向被代理服务器过程中出现被代理的服务器无法访问或者访向错误等现象时, Nginx服务器可以使用历史缓存响应客户端的请求,这些数据不一定和被代理服务器上最新的数据相一致,但对于更新频率不高的后端服务器来说,Nginx服务器的该功能在一定程度上能够为客户端提供不间断访向。该指令用来设置一些状态,当后端被代理的服务器处于这些状态时,Nginx服务器启用该功能。该指令的语法结构为:

proxy_cache_use_atale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off ...;

该指令可以支持的状态如语法结构中所示。
需要注意其中的updating状态的含义。该状态并不是指被代理服务器在updating状态,而是指客户端请求的数据在Nginx服务器中正好处于更新状态。该指令的默认设置为off。

9. proxy_cache_valid

该指令可以针对不同的HTTP响应状态设登不同的缓存时间,其语法结构为:

proxy_cache_valid [code ...] time; 
  • code,设置HTTP响应的状态代码。该指令可选,如果不设置。Nginx服务器只为 HTTTP 状态代码为200、301和302的响应数据做缓存。可以使用“any”表示缓存所有该指令中未设置的其他响应数据。
  • time, 设置级存时间。几个例子:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;

该例子中,对返回状态为200和302的响应数据缓存10分钟,对返回状态为301的数据缎存1小时,对返回状态为非200、302和301的响应数据缓存1分钟

10. proxy_no_cache

该指令用于配置在什么情况下不使用cache功能,其语法结构为:

proxy_no_cache string ...;

其中,string可以是一个或者多个变量。当sting的值不为空或者不为0时。不启用cache功能。

11. proxy_store

该指令配置是否在本地磁盘缓存来自被代理服务器的响应数据。这是Nginx缓存数据的方法,但是该功能相对Proxy Cache简单一些,它不提供缓存过期更新、内存索引建立等功能,不占用内存空间,对静态数据的效果比较好。该指令的语法结构为:

proxy_store on | off | string;
  • on | off,设置是否开启Proxy Store功能。如果使用变量on,功能开启,缓存文件会存放到alias指令或 root指令设置的本地路径下。默认设置为off。
  • sting,自定义缓存文件的存放路径。如果使用变量string,Proxy Store功能开启。缓存文件会存放到指定的本地路径下。
    Proxy Store方法名使用在被代理服务器端发生错误的情况下,用来缓存被代理服务器的响应数据。
12. proxy_store_access

该指令用于设置用户或用户组对Proxy Store缓存的数据的访问权限,其语法结构为:

proxy_store_access users:permissions ...;
  • user,可以设置为user、group或者all.。
  • permissions, 设置权限。

负载均衡配置

网络负载均衡技术的大致原理是利用一定的分配策略将网络负载平衡地分推到网络集群的各个操作单元上,使得单个重负载任务能够分担到多个单元上并行处理,或者使得大量并发访向或数据流量分担到多个单元上分别处理,从而减少用户的等待响应时间。
在实际应用中,负载均衡会根据网络的不同层次 (一般按照 OSI 的七层参考模型)进行划分现代的负载均街均衡技术主要实现和作用于网络的第四层或第七层,完全独立于网络基础硬件设备,成为单独的技术设备。Nginx服务器实现的负我均衡一般认为是七层负载。

例子
# 最少连接均衡方法
upstream backend {
    least_conn;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}
# ip_hash
upstream backend {
    ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}
# 不同权重weight越大优先级越高
upstream backend {
    server 127.0.0.1:8080 weight=2;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}
server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
配置nginx代理多台服务器的步骤如下: 1. 在nginx服务器上安装nginx软件。 2. 编辑nginx配置文件,一般为/etc/nginx/nginx.conf。 3. 在http段中添加upstream配置,定义多个后端服务器的IP和端口。例如: ``` upstream backend { server 192.168.1.1:80; server 192.168.1.2:80; } ``` 4. 在server段中添加location配置,指定要代理的URL和后端服务器的地址。例如: ``` server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 这个配置表示,当访问example.com时,nginx会将请求转发给upstream配置中定义的后端服务器,即192.168.1.1和192.168.1.2。 5. 保存配置文件并重启nginx服务,使配置生效。例如: ``` sudo service nginx restart ``` 6. 测试代理是否生效。在浏览器中访问example.com,观察是否能正常访问后端服务器的内容。 注意事项: - 如果后端服务器使用HTTPS协议,需要使用proxy_pass https://backend;配置代理。 - 如果后端服务器使用HTTP协议,可以使用proxy_http_version 1.1;配置HTTP版本。 - 如果后端服务器使用WebSocket协议,需要使用proxy_set_header Upgrade $http_upgrade;和proxy_set_header Connection "upgrade";配置WebSocket头信息。 - 如果后端服务器使用HTTP长连接,需要使用proxy_set_header Connection "";配置Connection头信息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值