LB Cluster:
传输层:lvs、nginx、haproxy
应用层:nginx(http, https, smtp, pop, imap), haproxy(http), httpd(http/https), ats, perlbal, pound, …
nginx load balancer:
tcp/udp
nginx proxy:
reverse proxy:
应用程序发布:
灰度模型:
(1) 如果存在用户会话;
从服务器上拆除会话;
(2) 新版本应用程序存在bug;
回滚;
ngx_http_proxy_module
(1) proxy_pass URL;
location, if in location, limit_except
注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;
location /uri/ {
proxy_pass http://HOST;
}
proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri;
location /uri/ {
proxy_pass http://HOST/new_uri/;
}
如果location定义其uri时使用正则表达式的模式,则proxy_pass之后必须不能使用uri;
location ~|~* PATTERN {
proxy_pass http://HOST;
}
(2) proxy_set_header field value;
设定发往后端主机的请求报文的请求首部的值;
示例:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
练习步骤:
第一步:vim /etc/httpd/conf/httpd.conf
第二步:
第三步:刷新页面并,检查
(3) proxy_cache_path
proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
练习:
第一步:vim /etc/nginx/nginx.conf
第二步:vim /etc/nginx/conf.d/default.conf
(4) proxy_cache zone | off;
调用的缓存的名称,或禁用缓存;
(5) proxy_cache_key string;
缓存条目的键;
(6) proxy_cache_valid [code …] time;
对各类响应码的缓存时长;
使用示例:
定义在http{}中:
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2:1 keys_zone=pcache:10m max_size=1g;
定义在server{}及其内部的组件中:
proxy_cache pcache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
(7) proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off …;
(8) proxy_connect_timeout
proxy_read_timeout
proxy_send_timeout
(9) proxy_buffer_size
proxy_buffering
proxy_buffers
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.
(1) add_header name value [always];
向响应报文中添加自定义首部;
可用上下文:http, server, location, if in location
add_header X-Via $server_addr;
add_header X-Accel $server_name;
没有添加自定义首部之前的一些状态信息
添加了状态信息后
(2) expires [modified] time;
expires epoch | max | off;
用于定义Expire或Cache-Control首部的值,或添加其它自定义首部;
回顾:
nginx:
web server
http/https reverse proxy
tcp/udp upstream server
ngx_http_proxy_module
proxy_pass
proxy_set_header
proxy_cache_path
proxy_cache
proxy_cache_key
proxy_cache_valid
proxy_connect_timeout, proxy_read_timeout, proxy_send_timeout
ngx_http_headers_module
add_header
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.
(1) upstream name { … }
定义后端服务器组;引入一个新的上下文;只能用于http{}上下文中;
首先,在/etc/nginx/conf.d/default.conf中定义
然后在/etc/nginx/nginx.conf中定义
测试
(2) server address [parameters];
定义服务器地址和相关的参数;
地址格式:
IP[:PORT]
HOSTNAME[:PORT]
unix:/PATH/TO/SOME_SOCK_FILE
参数:
weight=number
权重,默认为1;
max_fails=number
失败尝试的最大次数;
fail_timeout=time
设置服务器为不可用状态的超时时长;
backup
把服务器标记为“备用”状态;
down
手动标记其为不可用;
(3) least_conn;
最少连接调度算法; 当server拥有不同的权重时为wlc;
(4) least_time header | last_byte;
最短平均响应时长和最少连接;
header:response_header;
last_byte: full_response;
仅Nginx Plus有效;
(5) ip_hash;
源地址hash算法;能够将来自同一个源IP地址的请求始终发往同一个upstream server;
(6) hash key [consistent];
基于指定的key的hash表实现请求调度,此处的key可以文本、变量或二者的组合;
consistent:参数,指定使用一致性hash算法;
示例:
hash $request_uri consistent
hash $remote_addr
hash $cookie_name
(7) keepalive connections;
可使用长连接的连接数量;
(8) health_check [parameters];
定义对后端主机的健康状态检测机制;只能用于location上下文;
可用参数:
interval=time:检测频率,默认为每隔5秒钟;
fails=number:判断服务器状态转为失败需要检测的次数;
passes=number:判断服务器状态转为成功需要检测的次数;
uri=uri:判断其健康与否时使用的uri;
match=name:基于指定的match来衡量检测结果的成败;
port=number:使用独立的端口进行检测;
仅Nginx Plus有效;
(9) match name { … }
Defines the named test set used to verify responses to health check requests.
定义衡量某检测结果是否为成功的衡量机制;
专用指令:
status:期望的响应码;
status CODE
status ! CODE
…
header:基于响应报文的首部进行判断
header HEADER=VALUE
header HEADER ~ VALUE
…
body:基于响应报文的内容进行判断
body ~ "PATTERN"
body !~ "PATTERN"
仅Nginx Plus有效;
原创文章,作者:178babyhanggege,如若转载,请注明出处:http://www.178linux.com/56352