NGINX模块(一)
【NGINX核心模块】
1.主模块
该模块包含一些Nginx的基本控制功能。
指令1:daemon
语法:daemon on | off
默认值:on
daemon off;
说明:生产环境中不要使用"daemon"和"master_process"指令,这些选项仅用于开发调试。你可以使用daemon off在生产环境中,
但对性能提升没有帮助,在生产环境中永远不要使用master_process off。
指令2:env
语法:env VAR|VAR=VALUE
默认值:TZ
使用字段:main
说明:这个命令允许其限定一些主机变量的值,在以下的情况下会创建或修改变量的值:
(1)在零停机的情况下进行升级或增加、删除一些模块时继承的变量;
(2)使用于嵌入式perl模块;
(3)使用于工作中的进程,必须记住,管理行为的系统库在同样的方式下可能并不像频繁的调用库文件那样使用变量(仅仅当他们初始化时),
即仍然可以用之前给定的命令设置,上面提到的零停机更新文件是一个例外.如果TZ的值没有被设置,那么显然它总是继承并且总是
可以访问到嵌入式perl模块。
例:
env MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;
指令3:debug_points
语法:debug_points [stop | abort]
默认值:none(无)
debug_points stop;
说明:在Nginx中有一些调试断点,它们允许Nginx使用调试器,或者中止和建立核心文件。
指令4:error_log
语法:error_log file [ debug | info | notice | warn | error | crit ]
默认值:${prefix}/logs/error.log
说明:指定Nginx服务(与FastCGI)错误日志文件位置。
每个字段的错误日志等级默认值:
1、main字段 - error
2、HTTP字段 - crit
3、server字段 - crit
Nginx支持为每个虚拟主机设置不同的错误日志文件,这一点要好于lighttpd,详细为每个虚拟主机配置不同错误日志的例子请参考: SeparateErrorLoggingPerVirtualHost和mailing list thread on
separating error logging per virtual host
如果你在编译安装Nginx时加入了--with-debug参数,你可以使用以下配置:
error_log LOGFILE [debug_core | debug_alloc | debug_mutex | debug_event | debug_http | debug_imap];
注意error_log off并不能关闭日志记录功能,它将日志文件写入一个文件名为off的文件中,如果你想关闭错误日志记录功能,应使用以下配置:
error_log /dev/null crit;
指令5:log_not_found
语法:log_not_found on | off
默认值:on
使用字段:location
说明:这个参数指定了是否记录客户端的请求出现404错误的日志,通常用于不存在的robots.txt和favicon.
ico文件,例如:
location = /robots.txt {
log_not_found off;
}
指令6:include
语法:include file | *
默认值:none
说明:你可以包含一些其他的配置文件来完成你想要的功能。0.4.4版本以后,include指令已经能够支持文件通配符:
include vhosts/*.conf;
【注意】直到0.6.7版本,这个参数包含的文件路径为你在编译时指定的--prefix=目录,
默认是/usr/local/nginx,如果你不想指定这个目录下的文件,请写绝对路径。
0.6.7版本以后指定的文件路径为nginx.conf所在的目录,而不是prefix目录的路径。
指令7:lock_file
语法:lock_file file
默认值:编译时指定
lock_file /var/log/lock_file;
说明:Nginx使用连接互斥锁进行顺序的accept()系统调用,如果Nginx在i386,amd64,sparc64,与ppc64环境
下使用gcc,Intel C++,或SunPro C++进行编译,Nginx使用原子指示使互斥生效,在其他情况下锁文件会被使用。
指令8:master_process
语法:master_process on | off
默认值:on
master_process off;
说明:生产环境中不要使用"daemon"和"master_process"指令,这些选项仅用于开发调试。
指令9:pid
语法:pid file
默认值:编译时指定
pid /var/log/nginx.pid;
说明:指定pid文件,可以使用kill命令来发送相关信号,例如你如果想重新读取配置文件,则可以使用:kill -HUP `cat /var/log/nginx.pid`
指令10:ssl_engine
语法:ssl_engine engine
默认值:依赖于系统环境
说明:这里可以指定你想使用的OpenSSL引擎,你可以使用这个命令找出哪个是可用的:openssl engine -t
$ openssl engine -t
(cryptodev) BSD cryptodev engine
[ 可用 ]
(dynamic) Dynamic engine loading support
[ 不可用 ]
指令11:timer_resolution
语法:timer_resolution t
默认值:none
timer_resolution 100ms;
说明:这个参数允许缩短gettimeofday()系统调用的时间,默认情况下gettimeofday()在下列都调用完成后
才会被调用:kevent(), epoll, /dev/poll, select(), poll()。
如果你需要一个比较准确的时间来记录$upstream_response_time或者$msec变量,你可能会用到timer_resolution.
指令12:try_files
语法:try_files path1 [ path2] uri
默认值:none
可用版本:0.7.27
说明:依次检查存在的文件,并且返回找到的第一个文件,斜线指目录:$uri / 。如果在没有找到文件的情况下,会启用一个内部重定向到末尾参数,这个末尾参数“必须”被设置用来返回URL,否则会产生一个内部错误。在代理Mongrel中使用:
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html @mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}
在Drupal / FastCGI中:
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# other fastcgi_param
}
location @drupal {
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param QUERY_STRING q=$request_uri;
# other fastcgi_param
}
在这个例子中,这个try_files指令:
location / {
try_files $uri $uri/ @drupal;
}
等同于下列配置:
location / {
error_page 404 = @drupal;
log_not_found off;
}
这段:
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# other fastcgi_param
}
指try_files在将请求提交到FastCGI服务之前检查存在的php文件。
一个在Wordpress和Joomla中的例子:
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# other fastcgi_param
}
location @wordpress {
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
# other fastcgi_param
}
指令13:user
语法:user user [group]
默认值:nobody nobody
说明:如果主进程以root运行,Nginx将会调用setuid()/setgid()来设置用户/组,如果没有指定组,那么将使用与用户名相同的组,
默认情况下会使用nobody用户与nobody组(或者nogroup),或者在编译时指定的--user=USER和--group=GROUP的值。
user www users;
指令14:worker_cpu_affinity
语法:worker_cpu_affinity cpumask [cpumask...]
默认值:none
仅支持linux系统。
说明:这个参数允许将工作进程指定到cpu,它调用sched_setaffinity()函数
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
指定每个进程到一个CPU:
worker_processes 2;
worker_cpu_affinity 0101 1010;
指定第一个进程到CPU0/CPU2,指定第二个进程到CPU1/CPU3,对于HTT处理器来说是一个不错的选择。
指令15:worker_processes
语法:worker_processes number
默认值:1
worker_processes 5;
说明:由于以下几点原因,Nginx可能需要运行不止一个进程:
·使用了SMP(对称多处理技术)。
·当服务器在磁盘I/O出现瓶颈时为了减少响应时间。
·当使用select()/poll()限制了每个进程的最大连接数时。
在事件模块这一章中我们将使用worker_processes和worker_connections来计算理论最大连接数
(max_clients):
max_clients = worker_processes * worker_connections
指令16:worker_rlimit_core
语法:worker_rlimit_core size
默认值:
说明:允许的每个程序的核心文件最大值。
指令17:worker_rlimit_nofile
语法:worker_rlimit_nofile limit
默认值:
说明:这个进程能够打开的最多文件描述符数.
指令18:worker_rlimit_sigpending
语法:worker_rlimit_sigpending limit
默认值:
说明:linux内核2.6.8以后,指定限制的信号数量可能是真实用户队列中正在调用的进程.
指令19:working_directory
语法:working_directory path
默认值:--prefix
说明:程序的工作目录,一般只用来指定核心文件位置,Nginx仅使用绝对路径,所有在配置文件中的
相对路径会转移到--prefix==PATH
20.变量
$nginx_version :目前运行中的Nginx版本
$pid :进程ID号
$realpath_root:未标记
2.事件模块
Nginx处理连接的方式
指令1:accept_mutex
语法:accept_mutex [ on | off ]
默认值:on
说明:Nginx使用连接互斥锁进行顺序的accept()系统调用。
指令2:accept_mutex_delay
语法:accept_mutex_delay Nms;
默认值:500ms
如果一个进程没有互斥锁,它将至少在这个值的时间后被回收,默认是500ms
指令3:debug_connection
语法:debug_connection [ip | CIDR]
默认值:none
说明:0.3.54版本后,这个参数支持CIDR地址池格式。
这个参数可以指定只记录由某个IP产生的debug信息。
当然你也可以指定多个参数。
error_log /var/log/nginx/errors;
events {
debug_connection 192.168.1.1;
}
devpoll_changes
devpoll_events
kqueue_changes
kqueue_events
指令4:epoll_events
语法:devpoll_changes
默认值:
说明:这些参数指定了按照规定方式传递/来自内核的事件数,默认devpoll的值为32,其余为512。
指令5:multi_accept
语法:multi_accept [ on | off ]
默认值:off
说明:multi_accept在Nginx接到一个新连接通知后调用accept()来接受尽量多的连接。
指令6:rtsig_signo
语法:rtsig_signo
默认值:
说明:Nginx在rtsig模式启用后使用两个信号,该指令指定第一个信号编号,第二个信号编号为第一个加1
默认rtsig_signo的值为SIGRTMIN+10 (40)。
指令7:
rtsig_overflow_events
rtsig_overflow_test
rtsig_overflow_threshold
语法:rtsig_overflow_*
默认值:
说明:这些参数指定如何处理rtsig队列溢出。当溢出发生在nginx清空rtsig队列时,它们将连续调用poll()
和 rtsig.poll()来处理未完成的事件,直到rtsig被排空以防止新的溢出,当溢出处理完毕,nginx再次
启用rtsig模式。
rtsig_overflow_events specifies指定经过poll()的事件数,默认为16
rtsig_overflow_test指定poll()处理多少事件后nginx将排空rtsig队列,默认值为32
rtsig_overflow_threshold只能运行在Linux 2.4.x内核下,在排空rtsig队列前nginx检查内核以确定队列
时怎样被填满的,默认值为1/10,“rtsig_overflow_threshold 3”意为1/3。
指令8:use
语法:use [ kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ]
默认值:
如果你在./configure的时候指定了不止一个事件模型,你可以通过这个参数告诉nginx你想使用哪
一个事件模型,默认情况下nginx在编译时会检查最适合你系统的事件模型。你可以在这里看到所有可用的事件模型
并且如果在./configure时激活它们。
指令9:worker_connections
语法:worker_connections
默认值:
worker_connections和worker_proceses(见主模块)允许你计算理论最大连接数:
最大连接数 = worker_processes * worker_connections
在反向代理环境下:
最大连接数 = worker_processes * worker_connections/4
由于浏览器默认打开2个连接到服务器,nginx使用来自相同地址池的fds(文件描述符)与前后端相连接。
NGINX模块(一)的更多相关文章
- 结合源码看nginx-1.4.0之nginx模块组织结构详解
目录 0. 摘要 1. nginx模块组织结构 2. nginx模块数据结构 3. nginx模块初始化 4. 一个简单的http模块 5. 小结 6. 参考资料 0. 摘要 nginx有五大优点:模 ...
- 【转】Nginx模块开发入门
转自: http://kb.cnblogs.com/page/98352/ 结论:对Nginx模块开发入门做了一个helloworld的示例,简单易懂.也有一定的深度.值得一看. Nginx模块开发入 ...
- Nginx模块开发入门
前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...
- Nginx模块fastcgi_cache的几个注意点 转
Nginx模块fastcgi_cache的几个注意点 去年年底,我对nginx的fastcgi_cache进行摸索使用.在我的测试过程中,发现一些wiki以及网络上没被提到的注意点,这里分享一下. ...
- 开发Nginx模块
开发Nginx模块 前面的哪些话 关于Nginx模块开发的博客资料,网上很多,很多.但是,每篇博客都只提要点,无法"step by step"照着做,对于初次接触Nginx开发的同 ...
- [转] Nginx模块开发入门
前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...
- nginx模块开发获取post参数
> 您好!> 我想请问下nginx模块里面怎么获取post参数,能有具体的代码更好!谢谢> 对于 "application/x-www-form-urlencode ...
- Nginx模块开发入门(转)
前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...
- Nginx模块开发入门(转)
前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...
- nginx模块,模块的配置使用
nginx模块官方模块(默认支持的)第三方模块 1. --with-http_stub_status_module nginx的客户端状态 配置syntax: sub_status;default:- ...
随机推荐
- Qt文本读写之二:目录操作
一.简介 QDir类用来访问目录结构及其内容,可以操作路径名.访问路径和文件相关信息以及操作底层的文件系统,还可以访问Qt的资源系统.Qt使用"/"作为通用的目录分隔符和URLs的 ...
- iOS中自定义UITableViewCell的用法
1.先创建一个View继承 UITableViewCell并使用xib快速建立模型. #import <UIKit/UIKit.h> #import "Score.h" ...
- sublime的几款实用插件
1.CSScomb 用于调整css属性的书写顺序 2.Emmet 缩写神器 3.HTML/CSS/JS Prettify 代码格式化 4.Trimmer 去空格去空行 5.Alignment 代码对齐 ...
- RHEL7.2安装及配置实验环境
截图太多了,就不一一上传了,请查看这个分享网址 http://pan.baidu.com/s/1kVeYANH 什么时候博客更新下能直接把图一下复制进来多好!省事.
- [转]ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
本文转自:http://www.cnblogs.com/John-Connor/archive/2012/05/03/2478821.html 引言-- 在初级篇中,我们介绍了如何利用基于ASP.NE ...
- 动手实现 React-redux(六):React-redux 总结
到这里大家已经掌握了 React-redux 的基本用法和概念,并且自己动手实现了一个 React-redux,我们回顾一下这几节都干了什么事情. React.js 除了状态提升以外并没有更好的办法帮 ...
- P1979 华容道 spfa题解
题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...
- 外文翻译 《How we decide》被情感愚弄 第二节
本节阅读感言:我们在遭受损失后,很容易破罐子破摔,做出更糟糕的决定. 书的导言 本章第一节 情感系统的缺陷会产生很重要的影响.想一想股票市场,一个典型的随机系统的例子.短期的波动无法给未来长期的股市情 ...
- 【学习笔记】彻底理解JS中的this
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...
- Web前端开发学习误区,你掉进去了没?
从接触网站开发以来到现在,已经有五个年头了吧,今天偶然整理电脑资料看到当时为参加系里面一个比赛而做的第一个网站时,勾起了在这网站开发道路上的一串串回忆,成功与喜悦.烦恼与纠结都历历在目,感慨颇多. 先 ...