附002.Nginx代理相关模块解析
一 ngx_http_proxy_module模块
1.1 proxy_pass配置
proxy_pass URL;
Context: location, if in location, limit_except
注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机。
1 server {
2 …
3 server_name HOSTNAME;
4 location /uri/ {
5 proxy http://hos[:port];
6 }
7 …
8 }
http://HOSTNAME/uri –> http://host/uri
proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri
1 server {
2 …
3 server_name HOSTNAME;
4
5 location /uri/ {
6 proxy http://host/new_uri/;
7 }
8 …
9 }
http://HOSTNAME/uri/ –> http://host/new_uri/
如果location定义其uri时使用了正则表达式的模式,则proxy_pass之后必须不能使用uri; 用户请求时传递的uri将直接附加代理到的服务的之后
1 server {
2 …
3 server_name HOSTNAME;
4 location ~|~* /uri/ {
5 proxy http://host;
6 }
7 …
8 }
1.2 proxy_set_header配置
proxy_set_header field value; #设定发往后端主机的请求报文的请求首部的值;
Context: http, server, location
proxy_set_header X-Real-IP $remote_addr;
$remote_addr:记录的是上一台主机的IP,而上一台主机有可能也是代理服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$proxy_add_x_forwarded_for:记录的是源IP地址
在http客户端还有修改/etc/httpd/conf/httpd.conf文件
LogFormat "%{X-Real-IP}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
通过上述方法则可以在后端主机上记录真实的httpd资源请求者,而不再是只记录前端代理服务器的IP地址
1.3 proxy_cache_path
proxy_cache_path #定义可用于proxy功能的缓存;Context: http
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];
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2:1 keys_zone=gmtest:20M max_size=1G;
1.4 proxy_cache
proxy_cache zone | off; #指明要调用的缓存,或关闭缓存机制;
Context: http, server, location
proxy_cache gmtest;
1.5 proxy_cache_key
proxy_cache_key string; #缓存中用于“键”的内容;
默认值:proxy_cache_key $scheme$proxy_host$request_uri;
建议定义成方法和url
1.6 proxy_cache_valid
proxy_cache_valid [code …] time; #定义对特定响应码的响应内容的缓存时长;
定义在http{…}中;
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=gmtest:20m max_size=1g;
定义在需要调用缓存功能的配置段,例如server{…},或者location中;
proxy_cache gmtest;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
1.7 proxy_cache_use_stale
proxy_cache_use_stale
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403
| http_404 | off …;
Determines in which cases a stale cached response can be used when an error occurs during communication with the proxied server.
后端服务器的故障在那种情况下,就使用缓存的功能对客户的进行返回
1.8 proxy_cache_methods
proxy_cache_methods GET | HEAD | POST …;
If the client request method is listed in this directive then the response will be cached. “GET” and “HEAD” methods are always
added to the list, though it is recommended to specify them explicitly.
默认方法就是GET HEAD方法
1.9 proxy_hide_header
proxy_hide_header field;
By default, nginx does not pass the header fields “Date”, “Server”, “X-Pad”, and “X-Accel-…” from the response of a proxied server
to a client. The proxy_hide_header directive sets additional fields that will not be passed.
1.10 proxy_connect_timeout
proxy_connect_timeout time;
Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75
seconds.
默认为60s
1.11 buffer
buffer相关的配置
a:proxy_buffer_size size;
Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains
a small response header. By default, the buffer size is equal to one memory page.
默认为4k|8k
b:proxy_buffering on | off;
Enables or disables buffering of responses from the proxied server.
默认为on
c:proxy_buffers number size;
Sets the number and size of the buffers used for reading a response from the proxied server, for a single connection. By default, the buffer size is equal to one memory page.
默认为8 4k|8k
d:proxy_busy_buffers_size size;
When buffering of responses from the proxied server is enabled, limits the total size of buffers that can be busy sending a response to the client while the response is not yet fully read.
默认为8k|16k
二 ngx_http_headers_module模块
The ngx_http_headers_module module allows adding the “Expires” and “Cache-Control” header fields, and arbitrary fields,
to a response header.
向由代理服务器响应给客户端的响应报文添加自定义首部,或修改指定首部的值;
2.1 add_header
add_header name value [always]; #添加自定义首部;
add_header X-Via $server_addr; #经由的代理服务器地址
add_header X-Accel $server_name;
2.2 expires
expires [modified] time;
expires epoch | max | off;
用于定义Expire或Cache-Control首部的值;
可以把服务器定义的缓存时长修改了;
三 ngx_http_upstream_module模块
The ngx_http_upstream_module module is used to define groups of servers that can be referenced by the proxy_pass, fastcgi_pass,
uwsgi_pass, scgi_pass, and memcached_pass directives.
3.1 upstream
1 upstream name { … } #定义后端服务器组,会引入一个新的上下文;
2 Context: http
3 upstream httpdsrvs {
4 server …
5 server…
6 …
7 }
3.2 server address
server address [parameters];
在upstream上下文中server成员,以及相关的参数;Context: upstream
address的表示格式:
unix:/PATH/TO/SOME_SOCK_FILE
IP[:PORT]
HOSTNAME[:PORT]
parameters:
weight=number
权重,默认为1;默认算法是wrr
max_fails=number
失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用
fail_timeout=time
设置将服务器标记为不可用状态的超时时长
max_conns
当前的服务器的最大并发连接数
backup
将服务器标记为“备用”,即所有服务器均不可用时此服务器才启用
down
标记为“不可用”
先在nginx前端配置down,然后在下架后端服务器,上架新的web程序,然后上架,在修改配置文件立马的down
3.3 least_conn
least_conn;
最少连接调度算法,当server拥有不同的权重时其为wlc
要在后端服务器是长连接时,效果才好,比如mysql
3.4 ip_hash
ip_hash;
源地址hash调度方法
3.5 hash
hash key [consistent];
基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者的组合
作用:将请求分类,同一类请求将发往同一个upstream server
If the consistent parameter is specified the ketama consistent hashing method will be used instead.
示例:
hash $request_uri consistent;
hash $remote_addr;
hash $cookie_name; 对同一浏览器的请求,发往同一个upstream server
3.6 keepalive
keepalive connections;
为每个worker进程保留的空闲的长连接数量
四 ngx_stream_core_module模块
模拟反代基于tcp或udp的服务连接,即工作于传输层的反代或调度器
4.1 stream
stream { … }
定义stream相关的服务;Context: main
1 stream {
2 upstream sshsrvs {
3 server 192.168.22.2:22;
4 server 192.168.22.3:22;
5 least_conn;
6 }
7 server {
8 listen 10.1.0.6:22022;
9 proxy_pass sshsrvs;
10 }
11 }
stream模块中管的upstream模块的用法同上
4.2 listen
listen
listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [bind] [ipv6only=on|off] [reuseport]
[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
提示:本文摘录自:https://cloud.tencent.com/developer/article/1027563。
- PyMC3和Theano代码构建贝叶斯深度网络,61页PPT探索贝叶斯深度学习以及实现
- 男程序员是不是都不会和女生表达交流?程序员的回答歪了
- Silverlight Telerik控件学习:主题Theme切换
- Silverlight自定义类库实现应用程序缓存
- Silverlight Telerik控件学习:TreeView数据绑定并初始化选中状态、PanelBar的Accordion效果、TabPanel、Frame基本使用
- 这或许是对小白最友好的python入门了吧——4,列表
- 每个人都应该知道的十个机器学习常识
- 重新带你了解React.js
- WebService又一个不爽的地方
- 劲爆!小程序又增新功能!为落地微信智慧零售方案做铺垫!
- 5G光传送网技术
- 突破封闭 Web 系统的技巧之正面冲锋
- 建立本地的Blast数据库
- [biztalk笔记]-1.Hello World!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 3分钟短文 | Laravel模型关联删除表记录,用观察者还是事件钩子
- 原理+代码|深入浅出Python随机森林预测实战
- 3分钟短文 | Laravel复杂SQL超多WHERE子句,本地作用域你没用过
- 3分钟短文 | Laravel同时连接多个数据库,你用啥办法?
- 3分钟短文 | PHP 连接2个字符串的8个方法,新手常犯错
- nodejs源码分析之connect
- 你应该了解的Nacos配置中心
- Jenkins CLI 命令行 v0.0.30
- 2020新鲜出炉的“面筋”,够刁钻
- Spring注解配置应该怎么玩
- 算法篇:链表之倒数第k个节点
- 彻底搞懂 Java 线程池,干啥都不再发憷
- Android Camera1中的对焦与测光
- 使用R语言获得16S物种丰度
- 二叉树的基础---四种遍历方式的 Java 实现