Skip to content

Commit 3246149

Browse files
committed
Add stream-core section
1 parent 36a3d8e commit 3246149

File tree

4 files changed

+651
-4
lines changed

4 files changed

+651
-4
lines changed

SUMMARY.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
- [介绍](README.md)
33
- [安装 nginx](介绍/安装nginx.md)
44
- [初学者指南](介绍/初学者指南.md)
5-
- 管理指南
5+
- [管理指南(忽略)](https://docs.nginx.com/nginx/admin-guide/)
66
- [控制 nginx](介绍/控制nginx.md)
77
- [连接处理方式](介绍/连接处理方式.md)
88
- [设置哈希](介绍/设置哈希.md)
@@ -23,7 +23,7 @@
2323
- How-To
2424
- [从源码构建 nginx](How-To/从源码构建nginx.md)
2525
- [在 Win32 平台上使用 Visual C 构建 nginx](How-To/在Win32平台上使用VisualC构建nginx.md)
26-
- 设置 Amazon EC2 的 Nginx Plus 环境
26+
- [设置 Amazon EC2 的 Nginx Plus 环境(忽略)](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-plus-amazon-web-services/)
2727
- [使用 DTrace pid 提供程序调试 nginx](How-To/使用DTrace_pid提供程序调试nginx.md)
2828
- [转换重写规则](How-To/转换重写规则.md)
2929
- [WebSocket 代理](How-To/WebSocket代理.md)
@@ -101,7 +101,7 @@
101101
- [ngx_mail_pop3_module](模块参考/mail/ngx_mail_pop3_module.md)
102102
- [ngx_mail_smtp_module](模块参考/mail/ngx_mail_smtp_module.md)
103103
- Stream
104-
- ngx_stream_core_module
104+
- [ngx_stream_core_module](模块参考/stream/ngx_stream_core_module.md)
105105
- ngx_stream_access_module
106106
- ngx_stream_geo_module
107107
- ngx_stream_geoip_module

介绍/使用Nginx作为HTTP负载均衡器.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ upstream myapp1 {
9696
## 健康检查
9797
nginx 中的反向代理实现包括了带内(或者被动)服务器健康检查。如果特定服务器的响应失败并出现错误,则 nginx 会将此服务器标记为失败,并尝试避免为此后续请求选择此服务器而浪费一段时间。
9898

99-
[max_files](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 用于设置在 [fail_timeout](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 期间应该与服务器通信失败尝试的次数。默认情况下,[max_files](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 设置为 1。当设置为 0 时,该服务器的健康检查将被禁用。[fail_timeout](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 参数还定义了服务器被标记为失败的时间。在服务器发生故障后的 [fail_timeout](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 间隔后,nginx 开始以实时客户端的请求优雅地探测服务器。如果探测成功,则将服务器标记为活动。
99+
[max_fails](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 用于设置在 [fail_timeout](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 期间与服务器通信失败重新尝试的次数。默认情况下,[max_fails](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 设置为 1。当设置为 0 时,该服务器的健康检查将被禁用。[fail_timeout](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 参数还定义了服务器被标记为失败的时间。在服务器发生故障后的 [fail_timeout](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 间隔后,nginx 开始以实时客户端的请求优雅地探测服务器。如果探测成功,则将服务器标记为活动。
100100

101101
## 进一步阅读
102102
此外,还有更多的指令和参数可以控制 nginx 中的服务器负载均衡,例如,[proxy_next_upstream](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream)[backup](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server)[down](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server)[keepalive](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive)。有关更多的信息,请查看我们的参考文档。

模块参考/http/ngx_http_proxy_module.md

Lines changed: 283 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,289 @@ proxy_cache_key "$host$request_uri $cookie_user";
221221
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
222222
```
223223

224+
### proxy_cache_lock
225+
226+
|\-|说明|
227+
|------:|------|
228+
|**语法**|**proxy_cache_key** `on` | `off`;|
229+
|**默认**|proxy_cache_lock off;|
230+
|**上下文**|http、server、location|
231+
|**提示**|该指令在 1.1.12 版本中出现|
232+
233+
启用后,通过将请求传递给代理服务器,一次只允许一个请求填充根据 [proxy_cache_key](#proxy_cache_key) 指令标识的新缓存元素。同一缓存元素的其他请求将等待响应出现在缓存中或缓存锁定以释放此元素,直到 [proxy_cache_lock_timeout](#proxy_cache_lock_timeout) 指令设置的时间。
234+
235+
### proxy_cache_lock_age
236+
237+
|\-|说明|
238+
|------:|------|
239+
|**语法**|**proxy_cache_lock_age** `time`;|
240+
|**默认**|proxy_cache_lock_age 5s;|
241+
|**上下文**|http、server、location|
242+
|**提示**|该指令在 1.7.8 版本中出现|
243+
244+
如果传递给代理服务器以填充新缓存元素的最后一个请求在指定时间(`time`)内没有完成,则可以将另一个请求传递给代理服务器。
245+
246+
### proxy_cache_lock_timeout
247+
248+
|\-|说明|
249+
|------:|------|
250+
|**语法**|**proxy_cache_lock_timeout** `time`;|
251+
|**默认**|proxy_cache_lock_timeout 5s;|
252+
|**上下文**|http、server、location|
253+
|**提示**|该指令在 1.1.12 版本中出现|
254+
255+
设置 [proxy_cache_lock](#proxy_cache_lock) 的超时。 当时间到期时,请求将被传递给代理服务器,但是,响应将不会被缓存。
256+
257+
> 在1.7.8之前,可以缓存响应。
258+
259+
### proxy_cache_max_range_offset
260+
261+
|\-|说明|
262+
|------:|------|
263+
|**语法**|**proxy_cache_max_range_offset** `number`;|
264+
|**默认**|——|
265+
|**上下文**|http、server、location|
266+
|**提示**|该指令在 1.11.6 版本中出现|
267+
268+
设置字节范围请求的偏移量(以字节为单位)。 如果范围超出偏移量,则范围请求将传递到代理服务器,并且不会缓存响应。
269+
270+
### proxy_cache_methods
271+
272+
|\-|说明|
273+
|------:|------|
274+
|**语法**|**proxy_cache_methods** `GET` | `HEAD` | `POST ...`;|
275+
|**默认**|proxy_cache_methods GET HEAD;|
276+
|**上下文**|http、server、location|
277+
|**提示**|该指令在 0.7.59 版本中出现|
278+
279+
如果此指令中列出了客户端请求方法,则将缓存响应。 “GET”和“HEAD”方法总是添加到列表中,但建议明确指定它们。 另请参见proxy_no_cache指令。
280+
281+
### proxy_cache_min_uses
282+
283+
|\-|说明|
284+
|------:|------|
285+
|**语法**|**proxy_cache_min_uses** `number`;|
286+
|**默认**|proxy_cache_min_uses 1;|
287+
|**上下文**|http、server、location|
288+
289+
设置将缓存响应的请求数。
290+
291+
### proxy_cache_path
292+
293+
|\-|说明|
294+
|------:|------|
295+
|**语法**|**proxy_cache_path** `path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]`;|
296+
|**默认**|——|
297+
|**上下文**|http|
298+
299+
设置缓存的路径和其他参数。 缓存数据存储在文件中。 缓存中的文件名是将MD5功能应用于缓存键的结果。 levels参数定义高速缓存的层次结构级别:从1到3,每个级别接受值1或2.例如,在以下配置中
300+
301+
```
302+
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
303+
```
304+
缓存中的文件名如下所示:
305+
306+
```
307+
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
308+
```
309+
首先将缓存的响应写入临时文件,然后重命名该文件。 从版本0.8.9开始,临时文件和缓存可以放在不同的文件系统上。 但是,请注意,在这种情况下,文件将跨两个文件系统复制,而不是廉价的重命名操作。 因此,建议对于任何给定位置,缓存和保存临时文件的目录都放在同一文件系统上。 临时文件的目录是根据use_temp_path参数(1.7.10)设置的。 如果省略此参数或将其设置为on,则将使用proxy_temp_path指令为给定位置设置的目录。 如果该值设置为off,则临时文件将直接放入缓存目录中。
310+
311+
此外,所有活动密钥和有关数据的信息都存储在共享内存区域中,其名称和大小由keys_zone参数配置。 一兆字节区域可以存储大约8000个密钥。
312+
313+
> 作为商业订阅的一部分,共享存储器区域还存储扩展的高速缓存信息,因此,需要为相同数量的密钥指定更大的区域大小。 例如,一兆字节区域可以存储大约4000个密钥。
314+
315+
在非活动参数指定的时间内未访问的缓存数据将从缓存中删除,无论其新鲜度如何。默认情况下,非活动设置为10分钟。
316+
317+
特殊的“缓存管理器”进程监视max_size参数设置的最大缓存大小。超过此大小时,它会删除最近最少使用的数据。在manager_files,manager_threshold和manager_sleep参数(1.11.5)配置的迭代中删除数据。在一次迭代期间,不会删除manager_files项(默认情况下为100)。一次迭代的持续时间受manager_threshold参数限制(默认情况下为200毫秒)。在迭代之间,由manager_sleep参数(默认为50毫秒)配置的暂停。
318+
319+
启动一分钟后,激活特殊的“缓存加载程序”进程。它将有关存储在文件系统中的先前缓存数据的信息加载到缓存区。加载也是在迭代中完成的。在一次迭代期间,加载的loader_files项目不超过(默认情况下为100)。此外,一次迭代的持续时间受loader_threshold参数限制(默认为200毫秒)。在迭代之间,由loader_sleep参数(默认为50毫秒)配置暂停。
320+
321+
此外,以下参数作为我们商业订阅的一部分提供:
322+
323+
- `purger=on|off`
324+
325+
指示缓存清除程序是否将从磁盘中删除与通配符密钥匹配的缓存条目(1.7.12)。 将参数设置为on(默认为off)将激活“cache purger”进程,该进程将永久迭代所有缓存条目并删除与通配符键匹配的条目。
326+
327+
- `purger_files=number`
328+
329+
设置在一次迭代(1.7.12)期间将扫描的项目数。 默认情况下,purger_files设置为10。
330+
331+
- `purger_threshold=number`
332+
333+
设置一次迭代的持续时间(1.7.12)。 默认情况下,purger_threshold设置为50毫秒。
334+
335+
- `purger_sleep=number`
336+
337+
设置迭代之间的暂停(1.7.12)。 默认情况下,purger_sleep设置为50毫秒。
338+
339+
> 在版本1.7.3,1.7.7和1.11.10中,缓存头格式已更改。 升级到较新的nginx版本之前,缓存的响应将被视为无效。
340+
341+
342+
### proxy_cache_purge
343+
344+
|\-|说明|
345+
|------:|------|
346+
|**语法**|**proxy_cache_purge** `string ...`;|
347+
|**默认**|——|
348+
|**上下文**|http、server、location|
349+
|**提示**|该指令在 1.5.7 版本中出现|
350+
351+
定义将请求视为缓存清除请求的条件。 如果字符串参数的至少一个值不为空并且不等于“0”,则移除具有相应高速缓存键的高速缓存条目。 通过返回204(无内容)响应来指示成功操作的结果。
352+
353+
如果清除请求的缓存键以星号(“*”)结尾,则将从缓存中删除与通配符键匹配的所有缓存条目。 但是,这些条目将保留在磁盘上,直到它们被删除为不活动,或由缓存清除程序(1.7.12)处理,或者客户端尝试访问它们。
354+
355+
配置示例:
356+
357+
```nginx
358+
proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;
359+
360+
map $request_method $purge_method {
361+
PURGE 1;
362+
default 0;
363+
}
364+
365+
server {
366+
...
367+
location / {
368+
proxy_pass http://backend;
369+
proxy_cache cache_zone;
370+
proxy_cache_key $uri;
371+
proxy_cache_purge $purge_method;
372+
}
373+
}
374+
```
375+
376+
此功能作为我们商业订阅的一部分提供。
377+
378+
### proxy_cache_revalidate
379+
380+
|\-|说明|
381+
|------:|------|
382+
|**语法**|**proxy_cache_revalidate** `on` | `off`;|
383+
|**默认**|proxy_cache_revalidate off;|
384+
|**上下文**|http、server、location|
385+
|**提示**|该指令在 1.5.7 版本中出现|
386+
387+
使用具有“If-Modified-Since”和“If-None-Match”标头字段的条件请求启用过期缓存项的重新验证。
388+
389+
### proxy_cache_use_stale
390+
391+
|\-|说明|
392+
|------:|------|
393+
|**语法**|**proxy_cache_use_stale** `error` | `timeout` | `invalid_header` | `updating` | `http_500` | `http_502` | `http_503` | `http_504` | `http_403` | `http_404` | `http_429` | `off ...`;|
394+
|**默认**|proxy_cache_use_stale off;|
395+
|**上下文**|http、server、location|
396+
397+
确定在与代理服务器通信期间可以在哪些情况下使用过时的缓存响应。 该指令的参数与proxy_next_upstream指令的参数匹配。
398+
399+
如果无法选择代理服务器来处理请求,则error参数还允许使用过时的缓存响应。
400+
401+
此外,如果当前正在更新,则更新参数允许使用过时的缓存响应。 这允许在更新缓存数据时最小化对代理服务器的访问次数。
402+
403+
在响应变为失效后,也可以在响应头中直接启用过时的缓存响应指定的秒数(1.11.10)。 这比使用指令参数的优先级低。
404+
405+
- “Cache-Control”头字段的“stale-while-revalidate”扩展允许使用陈旧的缓存响应(如果当前正在更新)。
406+
407+
- “Cache-Control”头字段的“stale-if-error”扩展允许在出现错误时使用陈旧的缓存响应。
408+
409+
要在填充新缓存元素时最小化对代理服务器的访问次数,可以使用proxy_cache_lock指令。
410+
411+
### proxy_cache_valid
412+
413+
|\-|说明|
414+
|------:|------|
415+
|**语法**|**proxy_cache_valid** `[code ...] time`;|
416+
|**默认**|——|
417+
|**上下文**|http、server、location|
418+
419+
设置不同响应代码的缓存时间。 例如,以下指令
420+
421+
```nginx
422+
proxy_cache_valid 200 302 10m;
423+
proxy_cache_valid 404 1m;
424+
```
425+
426+
为代码为200和302的响应设置10分钟的缓存,为代码404的响应设置1分钟。
427+
428+
如果仅指定了缓存时间
429+
430+
```nginx
431+
proxy_cache_valid 5m;
432+
```
433+
434+
然后只缓存200,301和302个响应。
435+
436+
此外,可以指定any参数来缓存任何响应:
437+
438+
```nginx
439+
proxy_cache_valid 200 302 10m;
440+
proxy_cache_valid 301 1h;
441+
proxy_cache_valid any 1m;
442+
```
443+
444+
缓存的参数也可以直接在响应头中设置。 这比使用该指令设置缓存时间具有更高的优先级。
445+
446+
- “X-Accel-Expires”标题字段以秒为单位设置响应的缓存时间。 零值禁用响应的缓存。 如果值以@前缀开头,则设置自Epoch以来的绝对时间(以秒为单位),响应可以高速缓存。
447+
- 如果标题不包括“X-Accel-Expires”字段,则可以在标题字段“Expires”或“Cache-Control”中设置高速缓存的参数。
448+
- 如果标头包含“Set-Cookie”字段,则不会缓存此类响应。
449+
- 如果标题包含具有特殊值“*”的“Vary”字段,则不会缓存此类响应(1.7.7)。 如果标题包含具有另一个值的“Vary”字段,则将考虑相应的请求标题字段来缓存这样的响应(1.7.7)。
450+
451+
可以使用proxy_ignore_headers指令禁用这些响应头字段中的一个或多个的处理。
452+
453+
### proxy_connect_timeout
454+
455+
|\-|说明|
456+
|------:|------|
457+
|**语法**|**proxy_connect_timeout** `time`;|
458+
|**默认**|proxy_connect_timeout 60s;|
459+
|**上下文**|http、server、location|
460+
461+
定义与代理服务器建立连接的超时。 应该注意,此超时通常不会超过75秒。
462+
463+
### proxy_cookie_path
464+
465+
|\-|说明|
466+
|------:|------|
467+
|**语法**|**proxy_cookie_path** `off`; <br/> **proxy_cookie_path** `path replacement`;|
468+
|**默认**|proxy_cookie_path off;|
469+
|**上下文**|http、server、location|
470+
|**提示**|该指令在 1.1.15 版本中出现|
471+
472+
设置应在代理服务器响应的“Set-Cookie”标头字段的path属性中更改的文本。 假设代理服务器返回带有属性“path = / two / some / uri /”的“Set-Cookie”头字段。 指令
473+
474+
```nginx
475+
proxy_cookie_path /two/ /;
476+
```
477+
478+
将此属性重写为“path = / some / uri /”。
479+
480+
路径和替换字符串可以包含变量:
481+
482+
```nginx
483+
proxy_cookie_path $uri /some$uri;
484+
```
485+
486+
也可以使用正则表达式指定该指令。 在这种情况下,路径应该从用于区分大小写的匹配的“〜”符号开始,或者从用于区分大小写的匹配的“〜*”符号开始。 正则表达式可以包含命名和位置捕获,替换可以引用它们:
487+
488+
```nginx
489+
proxy_cookie_path ~*^/user/([^/]+) /u/$1;
490+
```
491+
492+
可能有几个proxy_cookie_path指令:
493+
494+
```nginx
495+
proxy_cookie_path /one/ /;
496+
proxy_cookie_path / /two/;
497+
```
498+
499+
off参数取消所有proxy_cookie_path指令对当前级别的影响:
500+
501+
```nginx
502+
proxy_cookie_path off;
503+
proxy_cookie_path /two/ /;
504+
proxy_cookie_path ~*^/user/([^/]+) /u/$1;
505+
```
506+
224507
**待续……**
225508

226509
## 原文档

0 commit comments

Comments
 (0)