设为首页 收藏本站
查看: 438|回复: 0

[经验分享] Nginx的几个重要模块

[复制链接]

尚未签到

发表于 2017-12-22 14:25:31 | 显示全部楼层 |阅读模式
  ngx_http_ssl_module
  让Nginx可以支持HTTPS的模块,此模块下的大多数指令都应用在http,server上下文
  ①ssl on | off;
  是否开启ssl功能
  ②ssl_certificate file;
  当前虚拟主机使用的PEM格式的证书文件
  ③ssl_certificate_key file;
  当前虚拟主机使用的证书中与公钥配对的私钥文件
  ④ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
  ssl协议的版本,SSLv2不安全,建议使用TLS,默认使用的是TLS
  ⑤ssl_session_timeout time;
  ssl会话超时时长,指ssl会话中缓存条目的有效时长,默认为5m
  ⑥ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
  指明ssl会话的缓存机制,默认是关闭的
  

builtin  //使用openssl内建的缓存机制,为worker独有  
shared  //由各worker共享的缓存
  name //缓存空间的名称
  size  //缓存空间的大小/单位字节,每1MB内存空间可缓存4000个会话
  

  ⑦ssl_prefer_server_ciphers on | off;
  倾向于使用服务器端的加密算法,默认是关闭的
  ngx_http_log_module
  此模块可以基于给定的格式记录请求于日志中
  ①access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
  access_log off;
  用在http,server,location,if in location,limit_except上下文
  默认值是access_log logs/access.log combined;
  ②log_format name string ...;
  定义日志格式
  用在http上下文中
  ③open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
  open_log_file_cache off;
  定义开启日志文件缓存功能
  用于http,server,location上下文,默认是关闭的
  

//最大缓存条目  
inactive= //非活动时长,默认为10s
  
min_uses //最少使用次数,默认为1次
  
valid= //验证缓存条目有效性的时长,默认为60s
  

  ngx_http_rewrite_module
  基于此模块实现对请求的URL进行重写、重定向
  ①rewrite regex replacement [flag];
  用在server,location,if上下文中
  

/*①把用户请求的URI基于regex做检查,匹配到时将替换为replacement指定的字符串  
②在同一个location中存在多个rewrite规则会自上而下逐个被检查(最多循环10次),可以使用flag控制此循环功能
  
③如果replacement中有以http或https开头,则替换结果会直接以重定向的方式返回客户端
*/  

  
[flag]
:  
last  
//重写完成后停止对当前url在当前Location中的后续其他重写操作,改为对新url的新一轮处理;  
break  //重写完成后停止对当前url在当前Location中的后续其他重写操作;(退出rewrite中的规则)
  
redirect  //重写完成后以临时重定向方式直接返回重写后生成的新的URL给客户端,由客户端对新的URL再次请求(响应码:302)
  
permanent  //重写完成后以永久重定向方式直接返回重写后生成的新的URL给客户端,由客户端对新的URL再次请求(响应码:301)
  

  ②rewrite_log on | off;
  是否启用重写日志;启用时,日志信息被发往错误日志,默认是关闭的
  用在http,server,location,if上下文
  ③if (condition) { ... }
  条件判断机制,在条件满足时,执行配置块中的配置,引入了一个新的配置上下文
  仅用在server,location上下文中
  

condition:  
//比较表达式:
  ==,!=
  ~  //模式匹配,区分字符大小写
  ~*  //模式匹配,不区分字符大小写
  !~  //模式不匹配,区分字符大小写
  !~*  //模式不匹配,不区分字符大小写
  
//文件及目录存在性判断:
  -f,!-f  //文件
  -d,!-d //目录
  -e,!-e  //存在
  -x,!-x  //执行权限
  

  
//示例:
  
if ($http_user_agent ~ MSIE) {
  rewrite ^(.*)$ /msie/$1 break;
  
}
  
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
  set $id $1;
  
}
  
if ($request_method = POST) {
  return 405;
  
}
  
if ($slow) {
  limit_rate 10k;
  
}
  
if ($invalid_referer) {
  return 403;
  
}
  

  ④return code [text];
  return code URL;
  return URL;
  以指定的响应码和URL回应客户端
  用在server,location,if上下文中
  ⑤set $variable value;
  用户自定义变量
  用在server,location,if上下文中
  ngx_http_gzip_module
  过滤器,对指定类型的资源压缩传输以节约带宽
  ①gzip on | off;
  启用或禁用gzip压缩响应报文
  用在http,server,location,if in location上下文中
  ②gzip_comp_level level;
  指定压缩比(1-9),默认为1
  用在http,server,location上下文
  ③gzip_disable regex ...;
  regex是匹配客户端浏览器类型的模式,表示对匹配到的浏览器不执行压缩响应报文
  用在http,server,location上下文
  ④gzip_min_length length;
  触发启用压缩功能的响应报文的最小长度
  用在http,server,location上下文
  ⑤gzip_http_version 1.0 | 1.1;
  设定启用压缩功能时,协议的最小版本,如果设置为1.1,1.0则不压缩
  用在http,server,location上下文
  ⑥gzip_types mime-type ...;
  指定仅执行压缩的资源内容类型,默认为text/html
  用在http,server,location上下文
  ⑦gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
  对代理的请求基于何种属性判断其是否应该启用压缩功能
  用在http,server,location上下文
  ngx_http_fastcgi_module
  基于此模块实现与php-fpm结合
  ①fastcgi_pass address;
  指明后端的服务器,address是fpm服务器监听的地址和端口
  用在location和if in location上下文
  ②fastcgi_index name;
  fastcgi应用的主页名称
  用在http,server,location上下文
  ③fastcgi_param parameter value [if_not_empty];
  传递给fpm服务器的参数及其值
  用在http,server,location上下文
  

fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;  
fastcgi_param QUERY_STRING   
$query_string;  
fastcgi_param REQUEST_METHOD  
$request_method;  
fastcgi_param CONTENT_TYPE   
$content_type;  
fastcgi_param CONTENT_LENGTH  
$content_length;  

  

//更多参数查阅fastcgi_params  

  ④fastcgi_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];
  定义fastcgi的缓存相关,仅能定义在http上下文
  

path //文件系统路径,用于存储缓存的文件数据  
max_size=size //定义此路径下的多大空间用于存储缓存数据
  
levels=#[:#[:#]] //缓存目录层级定义
  //如:levels=1:2
  
keys_zone=name:size //内存空间中用于缓存k/v映射关系的空间名称及大小
  
inactive= //非活动时间
  

  ⑤fastcgi_cache zone | off;
  启用缓存功能,存于哪个zone中,依赖于上个配置中的定义
  用在http,server,location上下文
  ⑥fastcgi_cache_key string;
  定义要使用的缓存键
  用在http,server,location上下文  
  

//示例  
fastcgi_cache_key localhost:9000$request_uri;
  

  ⑦fastcgi_cache_methods GET | HEAD | POST ...;
  缓存基于哪些请求方法的相关数据
  用在http,server,location上下文
  ⑧fastcgi_cache_min_uses number;
  指定时间内缓存的最少使用次数
  用在http,server,location上下文
  ⑨fastcgi_cache_valid [code ...] time;
  对不同响应码设定其可缓存时长
  

//示例  
fastcgi_cache_valid 200 302 10m;
  
fastcgi_cache_valid 404      1m;
  

  注意:启用缓存功能时,至少应该指定的三个参数:fastcgi_cache,fastcgi_cache_key,fastcgi_cache_valid
  

/*  
Nginx缓存的实现机制
  

  
分两部分存储缓存信息,
  
一部分放于内存中:key-value形式
  其中key是url,value是缓存信息文件的校验码(md5)
  
另一部分是将缓存信息的文件置于磁盘上,并基于md5校验码实现分级存储,以便查找
  

*/  

  ngx_http_proxy_module
  基于此模块实现反代客户端请求至后端服务器
  ①proxy_pass URL;
  代理指令,后跟后端主机的URL
  用在location,if in location,limit_except上下文
  

//①proxy_pass后面的路径不带uri时,会把location的uri传递给后端主机  
location /uri/ {
  proxy_pass http://HOST;
  
}
  
//假如location中的/uri/是/bbs/,访问的站点是www.a.com,则通过proxy_pass传递给后端主机的URL是:http://www.a.com/bbs/
  

  
//②proxy_pass后面路径是一个uri时,其会将location的uri替换为proxy_pass后端主机的uri
  
location /uri/ {
  proxy_pass http://HOST/new_uri/;
  
}
  
//假如location中的/uri/是/bbs/,访问的站点是www.a.com,proxy_pass后面的new_uri是/BBS/,则通过proxy_pass传递给后端主机的URL是:http://www.a.com/BBS/;
  

  
//③如果location定义uri时使用了正则表达式匹配机制,则proxy_pass后的路径必须不能使用uri
  
location ~|~* PATTERN {
  proxy_pass http://HOST;
  
}
  

  ②proxy_set_header field value;
  设定向后端主机发送的请求报文的首部及其值
  用在http,server,location上下文
  

proxy_set_header Real_Client $remote_addr(client addr);  
proxy_set_header X
-Forwarded-For $proxy_add_x_forwarded_for;  

//保留原来的值再附加新值(建议使用)  

  ③proxy_cache_path path [levels=levels] 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];
  定义缓存路径
  只能定义在http上下文
  

//示例  
proxy_cache_path /var/cache levels=2:1 keys_zone=mycache:10m max_size=10m;
  

  ④proxy_cache zone | off;
  调用缓存,默认为off
  用在http,server,location上下文
  ⑤proxy_cache_key string;
  定义缓存键;
  用在http,server,location上下文
  

//示例  
proxy_cache_key $request_uri(一般是请求uri)
  
proxy_cache_key $scheme$proxy_host$request_uri
  

  ⑥proxy_cache_valid [code ...] time;
  为不同的响应码设定其缓存的时长
  用在http,server,location上下文
  

//示例  
proxy_cache_valid 200 302 10m;
  
proxy_cache_valid 404 1m;
  

  ⑦proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
  向后端请求不到相应资源时基于哪种响应码或错误,使用过期缓存响应客户端
  用在http,server,location上下文
  ⑧proxy_connect_timeout time;
  与后端建立连接的超时时长,默认60s,最长为75s
  用在http,server,location上下文
  ⑨proxy_read_timeout time;
  等待后端主机发送响应报文的超时时长,默认为60s
  用在http,server,location上下文
  ⑨+①proxy_send_timeout time;
  向后端服务器发送请求报文的超时时长,默认为60s
  用在http,server,location上下文
  ngx_http_headers_module
  基于此模块在响应给客户端的报文中添加首部
  ①add_header name value [always];
  向响应报文添加自定义首部,并赋值
  用在http,server,location,if in location上下文  
  

add_header X-Cache $upstream_cache_status;  

  

//可查看是否命中缓存  

  

//示例:  
add_header x-via $server_addr(接收请求报文的服务器地址)
  

  ②expires [modified] time;
  expires epoch | max | off;
  用于添加Expire及Cache-Control首部或修改其值
  用在http,server,location,if in location上下文
  ngx_http_upstream_module
  基于此模块实现nginx的负载均衡:定义服务器组,将多个后端主机定义为服务器组,而后可由proxy_pass,fastcgi_pass,memcached_pass等调用
  ①upstream name { ... };
  定义后端服务器组,引入新的上下文,只能用于http上下文
  ②server address [parameters];
  定义后端服务器的地址和相关参数
  仅用于在upstream上下文
  

地址格式:  IP[
:port]  HOSTNAME[
:port]  unix
:/PATH/TO/SOME_SOCK_FILE  
参数:
  weight
=number //服务器调度权重  max_fails=number //最大失败尝试次数
  fail_timeout= //设置服务器失败(不可用)的超时时长
  backup //备用主机,相当于sorry_server
  down //手动标记其不再处理任何用户请求
  

  ③ip_hash;
  指定调度算法:源地址哈希
  仅用于在upstream上下文
  ④least_conn;
  指定调度算法:最少连接
  仅用于在upstream上下文
  ⑤keepalive connections;
  保持连接的个数
  仅用于在upstream上下文
  ⑥health_check [parameters];
  定义后端主机的健康状态检测
  只能在location中使用
  

//可用参数:  interval=# //检测的频度,默认为5s
  fails=# //判定为失败的检测次数
  passes=# //判定为成功的检测次数
  uri=uri //执行检测时请求的uri,默认为主页
  match=name //基于那个match做检测结果为'ok'或'not ok'的判定
  port=# //向服务器的那个端口发起检测请求
  

  ⑦match name {...};
  对后端主机做检测时,定义其结果的判断标准,nginx2.0+才支持
  仅用于http上下文
  

//专用指令:  
status:期望的响应码
  status CODE
  status !CODE
  status CODE-CODE
  
:基于响应首部进行判断
  =VALUE
  !=VALUE
[!]

  ~VALUE
  
body:期望的响应报文的主体部分该有的内容
  body ~"CONTENT"
  body !~"CONTENT"
  

  ⑧hash key [consistent];
  定义调度方法,可自定义基于何种信息(key)进行绑定
  仅用于在upstream上下文
  

hash $remote_addr  
hash
$request_uri  
hash
$cookie_username  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-426854-1-1.html 上篇帖子: nginx别名配置,状态配置,include优化 下篇帖子: nginx的location配置详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表