ngx_http_proxy_module

ngx_http_proxy_module

1.proxy_pass

Syntax:

proxy_pass URL;

Context:

location, if in
location, limit_except

这条指令将来是用的相当多的指令。

v  附加1proxy_pass后面的路径不带uri时,其会将locationuri传递给后端主机;

       location  /uri/{

              proxy_pass  http://HOST;

              ##
proxy_pass  http://HOST[:port];
这样可以指定转发到的端口了

## HOST后面一定不能带/,如果带上了,就是下面这种情况了。

       }

http://HOSTNAME/uri à http://host/uri

v  替换1roxy_pass后面路径是一个uri时,其会将客户请求的locationuri替换为proxy_pass后端主机的uri

       location  /uri/{

              proxy_pass  http://HOST/new_uri/;

       }

Http://HOSTNAME/uri/ à http://HOST/new_uri

v  附加2:如果location定义其uri时使用了正则表达模式匹配机制,则proxy_pass后的路径必须不能使用uri;用户请求时传递的uri将直接附近代理的到的服务的之后。

location~|~*  PATTERN {

       proxy_pass  http://HOST;

## 这里也不能够在HOST后面加”/”,不但不能带,带了会报错

}

       http://www.magedu.com/bbs/  –>http://172.16.100.7/bbs/

       http://www.magedu.com/bbs/  –>http://172.16.100.7/

                                         

ngx_http_proxy_module

这两个服务器可以在同一个局域网,也可以不在。

实战: proxy_pass

2.proxy_set_header

Syntax:

proxy_set_header field value;

Default:

proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

Context:

httpserverlocation

 

重新定义或者是扩展(有可能会删除)向后端主机发送的请求报文的首部(field)及其值(value);“value”可以为text, variables,也可以为他们的组合。

 

如果客户端发来的请求报文中,包含Host首部和Connection首部,代理服务器发送给后端服务器的报文中,默认包含如下两项:

proxy_set_header Host       $proxy_host;

proxy_set_header Connection close;

但是,如果客户端请求报文中不包含Host首部,上面的写法就会出现问题(不应该传递本机的host给后端主机了)。所以这里最好像下面这么写,因为$host和客户端发来的请求报文中的Host首部相同。(类似于x-Forwarded-For的信息。Nginx在收到报文时,如果包含Host首部,就将收到的报文中的Host首部保存到变量$host中)。

proxy_set_header Host       $host;

也可以将使用的后端服务器的端口写在这里:

proxy_set_header Host       $host:$proxy_port;

 

如果开启了缓存的功能,Nginx将在给后端服务器发送报文时,不发送收到报文中的如下首部:

If-Modified-Since

If-Unmodified-Since

If-None-Match

If-Match

Range

If-Range

示例:Proxy_set_header

3.proxy_cache_path

Syntax:

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]

Context

http

定义Nginx缓存的路径及其他变量。

v  path”这个路径是用哈希指令proxy_cache_key提供的值,来确定的。

v  level”定义缓存的存储目录的级别,变化范围:1~3,每一级缓存的值为12(使用哈希值的一位或者是两位作为该级目录的目录名。)。

v  “use_tmp_path=on|off”

0.8.9版本开始,临时文件和缓存可以放在不同的文件系统上。但是注意,如果放在不同的文件系统,文件需要在两个文件系统间拷贝,而不是简单的重命名。因此建议缓存和临时文件放在同一个文件系统上。如果这个值为on(默认),指令proxy_temp_path所设置的目录有效,若为off,则proxy_temp_path为无效

v  “keys-zone=name:size”

所有活动的keys以及数据信息(元数据)都储存在一个共享的存储区域中。1M的存储区域可以存储8kkeys

u  注意:每个定义的ZONE都需要有唯一的路径,比如:

proxy_cache_path  /data/nginx/cache/one    levels=1      keys_zone=one:10m;

proxy_cache_path  /data/nginx/cache/two    levels=2:2    keys_zone=two:100m;

u  ZONE必须根据页面的多少来设置合适的大小.一个页面(文件)的元数据大小取决于操作系统,当前 FreeBSD/i386 64 bytes, FreeBSD/amd64128 bytes ZONE满了以后,key将按照LRU算法来替换

v  “inactive=time”:

默认为10minutes,在这段时间内没有被访问过的缓存,将会被从缓存空间中清除。

v  About “cache manager”:

“cache manager” 进程监控磁盘缓存的大小,该最大值在”max_size” 参数中定义。 当超出大小后最少使用的数据将被删除。数据的删除是在由”manager_files””manager_threshold””manager_sleep”参数所定义的循环中删除的。

u  “manager_files”:每次删除循环中最多能够删除的条数。默认为100

u  “manager_threshold”:每个删除循环所使用的时长限制。默认为200milliseconds

u  “manager_sleep”:每两个删除循环之间的暂停时间。默认为50milliseconds

v  About ”cache loader”:在Nginx启动后一分钟,”cache
loader”
进程就会被激活。该进程从存储在文件系统这的当前的缓存加载到缓存区域。这个操作也是在循环中进行的。类似”cache manager”,它也有如下参数:

u  “loader_files”: 每次加载循环中最多能够加载的条数。默认为100

u  “loader_threshold”: 每个加载循环所使用的时长限制。默认为200milliseconds

u  “loader_sleep”: 每两个加载循环之间的暂停时间。默认为50milliseconds

v  purgerpurger_filespurger_sleeppurger_threshold:这几个参数在付费版中,才能够用到。

4.proxy_cache

Syntax:

proxy_cache zone | off;

Default:

proxy_cache off;

Context:

httpserverlocation

 

指明要调用的缓存,或关闭缓存机制。

v  在调用时,仅仅指定这个是不够的,还要指定:key

v  如果proxy_buffers 设为off,将无法使用proxy_cache

5.proxy_cache_key

Syntax:

proxy_cache_key string;

Default:

proxy_cache_key
$scheme$proxy_host$request_uri;

Context:

httpserverlocation

缓存中用“键”的内容,定义缓存键(如果给定必须显示给定,);

proxy_cache_key  $request_uri

proxy_cache_key  $scheme$proxy_host$request_uri

v  如果不打算区分协议(httphttpd),可以只是用$request_uri

也可以分浏览器进行缓存:

proxy_cache_key “$host$request_uri
$cookie_user”;

v  为保证私人信息不会无意中被缓存并发给所有用户,后端服务器可以设置 “no-cache” 或者 “max-age=0”,或者proxy_cache_key中必须包含用户识别信息(比如$cookie_xxx).但是,proxy_cache_key中使用cookie会降低公共缓存对象的命中率,所以不同的location使用不同的 proxy_cache_key,在区分私人和公共缓存对象时是必要的

6.proxy_cache_valid

Syntax:

proxy_cache_valid [code …] time;

Context:

httpserverlocation

 

为不同的响应码设定其缓存的时长;示例如下:

proxy_cache_valid  200 302 10m;

proxy_cache_valid  301 1h;

proxy_cache_valid  any 1m;

Note: you must set this option for any
persistent caching to occur.

7.proxy_cache_use_stale

Syntax:

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 |http_503 | http_504 | http_403 | http_404 | off …;

Default:

proxy_cache_use_stale off;

Context:

httpserverlocation

 

Determines in which cases a stale cached
response can be used when an error occurs during communication with the proxied
server.

 

后端服务器故障,后端的服务器故障为哪几种情况时,缓存服务器可以响应给客户端。

(就是还是要访问后端服务器的。)

这里应该有一些代理时时长的定义。比如:

8.buffering buffers

相关的指令有:

proxy_bindproxy_buffer_sizeproxy_bufferingproxy_buffersproxy_busy_buffers_size

9.proxy_cache_methods

Syntax:

proxy_cache_methods GET | HEAD | POST …;

Default:

proxy_cache_methods GET HEAD;

Context:

httpserverlocation

为哪几种方法(报文请求方法)提供缓存功能,建议只是用gethead(默认也是这个),所以一般不需要特别指定。

10.proxy_hide_header

Syntax:

proxy_hide_header field;

Context:

httpserverlocation

响应的包中,首部中的信息需要隐藏。

默认,nginx也不会给部分headers的(包括:”Date””Server””X-Pad””X-Accel-…”),如果要隐藏更多的,就用这个命令来指定。

proxy_pass_header定义了允许代理服务器发送给客户端的首部。

平时nginx也可以通过在响应报文中,再添加一个header

11.proxy_connect_timeout

Syntax:

proxy_connect_timeout time;

Default:

proxy_connect_timeout 60s;

Context:

httpserverlocation

该参数定义了跟代理服务器连接的超时时间,必须留意这个time out时间不能超过75.

12.proxy_read_timeout time;

等待后端主机发送响应报文的超时时长,默认为60s

13.proxy_send_timeout time;

       向后端服务发送请求报文的超时时长,默认为60s

原创文章,作者:m20-吴清玲,如若转载,请注明出处:http://www.178linux.com/56078

(1)
m20-吴清玲m20-吴清玲
上一篇 2016-10-30 16:10
下一篇 2016-10-30 16:34

相关推荐

  • HAProxy基于Keepalived做高可用并简单实现Web站点的动静分离

    HAProxy简介   HAProxy 是一个免费的,非常快速和可靠的解决方案,提供 高可用性, 负载均衡和代理对TCP和HTTP的应用程序。它特别适用于非常大流量网站。多年来,它已成为标准开源的负载均衡,现在随最主流的Linux发行版,并且通常默认的云平台部署。 实验描述 1、本实验主要是在前端放置两台通过Keepalived做了高可用的HAProxy反向…

    Linux干货 2016-04-16
  • heartbeat2+crm+hb_gui接口,配置高可用httpd,mysql,lvs-director

    heartbeat2使用crm借助gui界面配置httpd服务     1. 服务大体资源构架:          1) 两台httpd服务,外加一台nfs共享存储服务。     &nbsp…

    Linux干货 2016-01-13
  • Linux运维不想早死的方法 一

    Linux运维不想早死的方法 一 为了提高工作效率,减少工作时间,爱惜生命,远离辐射;务必做好以下几点: 1,一定用快捷键         这里简单的说下几个常用的快捷按键。 Ctrl + l     清屏,相当于clear命令。 Ctrl…

    Linux干货 2017-03-26
  • 亿级用户下的新浪微博平台架构

    序言     新浪微博在2014年3月公布的月活跃用户(MAU)已经达到1.43亿,2014年新年第一分钟发送的微博达808298条,如此巨大的用户规模和业务量,需要高可用(HA)、高并发访问、低延时的强大后台系统支撑。 微博平台第一代架构为LAMP架构,数据库使用的是MyIsam,后台用的是php,缓存为Memcache。 随着应用规模…

    2015-03-16
  • python面向对象学习第一周

     面向对象的思想 一个具体对象的属性方法,都有各个来源,来源于类,比如消化类,有各种各样的消化模式,人类的只是其中一种 另一种思想方法,类有各种属性方法,人类有很多的属性,一个人应该包括其中的属性,只是值上可能有不同,不同人群也有他们的特征属性和方法     类是对象的抽象,但是类本身也是对象, 对象是一个类的实例. 类的属性:类变量,对象方法,类方法,静态…

    Linux干货 2017-11-13
  • 人志建,则无敌—网络基本知识加简单脚本练习

    马哥21期网络班-8周博客作业 1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:网桥就是把2个不同的网段桥接起来;可隔离冲突域。 集线器:集线器就是把多根以太网线或光纤集合连接在同一段物理介质下的装置;工作在物理层;不能隔离冲突域。 二层交换机:工作于OSI模型的第2层(数据链路层),故而称为二层交换机。二层交换技术的发…

    Linux干货 2016-08-29