Nginx相关配置及其应用

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;

}

1.jpgNginx相关配置及其应用2.jpg

Nginx相关配置及其应用3.jpg

(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

Nginx相关配置及其应用4.jpg

第二步:

Nginx相关配置及其应用5.jpg

第三步:刷新页面并,检查

Nginx相关配置及其应用6.jpg

(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

Nginx相关配置及其应用7.jpg

第二步:vim /etc/nginx/conf.d/default.conf

Nginx相关配置及其应用8.jpg

(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;

没有添加自定义首部之前的一些状态信息

Nginx相关配置及其应用9.jpg

添加了状态信息后

Nginx相关配置及其应用10.jpg

(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中定义

Nginx相关配置及其应用11.jpg

然后在/etc/nginx/nginx.conf中定义

Nginx相关配置及其应用12.jpg

测试

Nginx相关配置及其应用13.jpg

Nginx相关配置及其应用14.jpg

(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

(0)
178babyhanggege178babyhanggege
上一篇 2016-11-11 08:42
下一篇 2016-11-11 12:39

相关推荐

  • 磁盘管理

    回顾 {a..f} a b c d e f ]# arr=({a..z}) ]# echo ${#arr[*]} 26 ]# N1=N2 ]# N2=zhuchaoming ]# echo ${!N1} eval N1=\$$N2 echo $N1 创建临时文件 mktemp NAME.XXX 交互式登录 /etc/profile –> /…

    Linux干货 2016-09-07
  • 面向对象

    语言分类 面向机器:抽象成机器指令,机器容易理解。代表:汇编语言 面向过程:一件事情分步骤来完成,出现各种情况有解决办法一一对应,问题规模小可以步骤化、按部就班的处理。代表:C语言 面向对象oop(object Oriented Programming):随着计算机解决问题的规模扩大、情况更复杂,需要很多部分协作,面向过程编程就不合适了,演变出了面向对象编程…

    Linux干货 2017-11-13
  • vim的使用

    vim 编辑器  vim的模式:      编辑模式      输入模式      扩展编辑模式:在编辑模式中输入:  ====================================   编辑模式转换成输入模式 &nbs…

    Linux干货 2016-08-11
  • 访问控制列表ACL

     ACL是Access Control List的缩写,主要的目的是提供传统的owner、group、others的read、write、execute权限之外的具体权限设置。ACL可以针对单一用户、单一文件、单一目录来进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助。使用getfacl和setfacl来设置查看acl的权限。ACL权…

    Linux干货 2016-08-07
  • Linux 文本处理,文本工具,查看,分析,统计文本文件,grep,正则表达式

    文本处理 各种文本工具,查看,分析,统计文本文件 grep 正则表达式 扩展正则表达式 sed cat -n f1 加行号(空格行都计算) cat -b f1 加行号(只计算有字符的行) cat -ns f1 加行号(压缩空行) cat -v f1 能看windows文件的M`符号 cat -T f1 能够显示里面的tab空位,显示为^I cat -A f1…

    Linux干货 2016-08-07
  • vsftpd基于mysql进行虚拟用户管理

    概述:     FTP是我们日常工作中经常用到的一个服务,但是FTP对用户的管理却比较薄弱,默认状态下,FTP利用pam机制进行账号管理,默认情况下使用的是系统账号,如何提升FTP对用户管理的有效性,针对不同的用户设定不同的上传权限,这就要基于虚拟账号来管理了,本篇就介绍下在vsftpd利用pam机制,结合mysql实…

    Linux干货 2016-10-18