nginx参数说明
一、nginx的核心配置:
>>> 正常运行的必备配置:
1. user username [groupname]; #指定运行worker子进程的用户或组
2. pid /path/to/pidfile_name; #指定nginx的pid文件
3. worker_rlimit_nofile number; #worker进程能打开的文件描述符个数
4. worker_rlimit_sigpending number; #设定每个用户能够发往worker进程的信号的数量(设定信号队列的大小);
>>> 优化性能相关的配置:
1. worker_processes number; #work进程的个数;通常其数值应该比CPU数量小
#woker_processes 1;
2. worker_cpu_affinity cpumask(CPU掩码)...; #worker进程的CPU的倾向性,绑定worker进程到某个CPU上
#例子:
#worker_processes 2; #两个worker进程
#worker_cpu_affinity 0000(代表有4个CPU) 0001(第一个进程绑定第一个CPU上) 0010(第二个进程绑定到第二个CPU上)
3. ssl_engine device; #在存在ssl加速设备的服务器上,指定所使用的ssl硬件加速设备;
#由于SSL比较消耗资源:加密、解密
4. timer_resolution interval; #多长时间获取一次系统时间并更新nginx的缓存时钟
#每次内核事件调用返回时,都会使用gettimeofday()来获取系统时间更新nginx的缓存时钟;不过在X86架构的服务器上,可忽略该项
#timer_resolution 100ms; 100毫秒
5.worker_priority nice; #worker进程的优先级
nice为:-20,19之间的值
>>> 事件相关的配置
1. accept_mutex on|off; #是否打开nginx的负载均衡锁;默认是开启的
#为了实现多个worker响应均衡,打开锁后,就可以实现worker进程的负载均衡(谁拥有锁谁就接收用户的请求)
#但是,当打开worker的负载均衡锁后,会增加系统的开销(对请求进行调度)
#而通常当一个worker进程的负载达到其上限的7/8时,master就尽可能不在将请求调度至此worker;
2. lock_file /path/to/lock_file; #负载均衡的锁文件
3. accept_mutex_delay interval;
#accept锁模式中,一个worker进程为取得accept锁如果失败了,需要等待此选项定义的时长后才能继续获取锁;
#accept_mutex_delay 100ms;
4. multi_accept on|off; #是否允许worker一次性接受多个请求;
#默认为off的
5. use [epoll|rtsig|select|poll]; #指定使用哪种事件模型
#建议让nginx自行选择
6. worker_connections number; #每个worker能够并发响应的最大请求数
#Web服务器上这个值最好比worker_rlimit_nofile多一些
#代理服务器上这个值最好是worker_rlimit_nofile的50%
>>> 用于调试、定位问题:只调试nginx时使用
1. daemon on|off; #是否让nginx运行于后台;默认为on,调试时应该为off
#在后台时,不输出信息到控制台
2. master_process on|off; #是否让一个master管理多个worker进程运行;默认为off
#调试时可以启用该项,只启用master进程,方便追踪
3. error_log /path/to/error_log level; #定义错误日志输出及日志级别
#调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能;
#默认为error级别
二、nginx的http配置格式:
1. nginx的http功能使用http {}段配置:
http {
}
2. nginx必须使用虚拟主机来配置Web站点!每个虚拟主机使用一个server {}段配置:
server {
}
3. server {}需要定义在http {}之内:
http{
server {
}
}
4. Web服务器的公共配置,需要定义在server {}之外,http {}之内
三、nginx的http的配置参数
1. listen [addres:port]; #监听指定地址的端口
port; #监听的端口
default_server; #定义此server为httpd中默认的server,如果所有的server都没有定义default_server,则第一个为默认server;比如访问一个不存在的虚拟主机,默认响应的主机!
rcvuf=SIZE; #接收缓冲大小;
sndbuf=SIZE; #发送缓冲大小
ssl:https server; #https的地址
2. server_name localhost localhost2; #主机名,可以多个主机名
#当nginx收到一个请求时,会取出其首部的server的值,而后跟众server进行比较:
#(1) 先做精确匹配:www.meng.com
#(2) 左侧通配符匹配:*.meng.com
#(3) 右侧通配符匹配:www.*
#(4) 正则表达式匹配:以波浪线开头(~^\*\.meng\.com$)
3.server_name_hash_bucket_size 32|64|128; #hash表的大小
#为了实现快速主机查找,nginx使用hash表来保存主机名;
5.location [ = | ~ | ~* | ^~ ] URI {
#根据用户的URI匹配location中的表达式,匹配到后做一些操作
#仅能在server {}或其他location中定义
=:精确匹配;区分大小写
~:正则表达式匹配,区分字符大小写
~*:正则表达式匹配,忽略字符大小写
^~:只需要前半部分与URI匹配即可,不检查正则表达式
没有符号时,仅以起始路径匹配
匹配优先级:
(1) 字符精确匹配
(2) 正则表达式检索(有多个,由第一个匹配到处理)
(3) 字符串比较
};
6.Location的常用参数:
(1) root /html; #网页根目录
#可以放在http {},server {},location {}中
Location的根目录是以root的设定路径为开始的,例如:
Location ^~ /images/ {
root /html;
index index.html;
}
#实际访问的地址是:http://localhost/images/index.html;但是index.html是在/html目录下的images目录里;
(2) alias /html; #指定路径别名
将Location映射到alias上,例如:
Location ^~ /images/ {
alias /html;
}
#实际访问的地址是:http://localhost/images/File,但是文件所在的路径在/html中;
(3) index index.html idnex.html2; #网站首页文件,
(4) error_page code ... [=[code]] uri; #配置错误页面重定向
#当对于某个请求返回错误时,如果匹配上了error_page指令中的设定的code,则重定向到新的URI中。
(5) try_files /path [/path2 ...] uri; #多路径配置
#尝试匹配每一个PATH中的文件(从左到右),在第一次找到返回结果,如果都没有,则重定向到URI中(URI一定得存在);
四、网络连接相关的设置:
1. keepalive_timeout time; #保持连接的超时时间
#默认是75秒;
2. keepalive_requests number; #保持连接上允许承载的最大请求数
3. keepalive_disable [msie6 | safari | none]; #对指定的浏览器禁止使用长连接
4. tcp_nodelay on|off; #对keepalive连接是否使用TCP_NODELAY选项;
#多个确认报文合并传过去,确认延迟(提高TCP性能)
#默认为on,不启动此选项
5. client_header_timeout time; #读取http请求首部的超时时长
6. client_body_timeout time; #读取http请求实体的超时时长
7. send_timeout time; #发送响应的超时时长
五、对客户端请求的限制:
1. limit_except method ... { #指定客户端不能使用的方法;
}
2. client_max_body_size SIZE; #http请求包体的最大值;
#用于限制用户上传文件的大小;
#如果基于程序控制用户上传文件的大小(比如1g),当用户上传一个2g的文件时,只有已经传输完的包体超过1g才会通知用户文件过大,导致用户之前的操作全部白了;而基于此方法,可以直接读取请求头部的包体大小,如果过大,直接拒绝;避免做无用功;
3. limit_rate spped; #速率限制
限制客户端每秒传输的字节数;默认为0,表示没有限制。
4. limit_rate_after time; #响应不限速的时长
nginx向客户端发送响应报文时,如果时长超出了此处指定的时长,则后续的发送过程开始限速;
六、文件操作的优化:
1. sendfile on|off; #是否启用sendfile功能
2. aio on|off; #是否启用aio功能
3. open_file_cache max=N [inactive=time]|off; #是否打开文件缓存功能
max:缓存条目的最大值;当满了以后根据LRU算法进行置换;
inactive timeout:如果一个缓存条目在指定时间内没有被访问过,将自动被删除;默认为60秒
缓存的信息包括:
文件句柄(文件描述符)、文件大小和上次修改时间;
已经打开的目录结构;
没有找到或无权操作的信息;
4. open_file_cache_errors on|off; #是否缓存"文件没有找到或无权操作"的信息
5. open_file_cache_valid time; #多长时间检查一次缓存中的条目是否超出inactive时长
#默认为60秒
6. open_file_cache_min_use number; #inactive时长内的访问次数超过该参数定义的值,无论inactive是否超时,都不删除;
七、对客户端请求的特殊处理:
1. ignore_invalid_headers on|off; #是否忽略不合法的http首部
#如果为off,当请求首部中出现不合法的http首部时,拒绝响应
2. log_not_found on|off; #当用户访问的文件不存在时,是否将该信息记录到错误日志中
3. resolver address; #指定nginx使用的dns服务器地址
4. resover_timeout time; #指定dns解析超时时长,默认为30s;
5. server_tokens on|off; #是否显示nginx的版本号
八、nginx的http核心模块内置变量:
1. $uri:当前请求的URI,不带参数
2. $request_uri:请求的uri,带完整参数
3. $host:http请求报文中的host首部,如果请求中没有host首部,则以处理此请求的虚拟主机的主机名代替
4. $hostname:nginx服务运行在的主机的主机名
5. $remote_addr:客户端IP
6. $remote_port:客户端端口
7. $remote_user:启用用户认证时,客户端输入的用户名
8. $request_filename:用户请求中的uri经过本地root或alias转换后映射的本地文件路径
9. $request_method:请求方法
10. $server_addr:服务器地址
11. $server_name:服务器域名
12. $server_port:服务器端口
13. $server_protocol:服务器向客户端发送响应时的协议,如http/1.1
14. $scheme:在请求中使用scheme,如https://www.magedu.com/中的scheme
15. $http_HEADER:匹配请求报文中指定的HEADER,例如:$http_host匹配请求报文中的host首部
16. $sent_http_HEADER;匹配响应报文中指定的HEADER,例如$http_content_type匹配响应报文中content-type首部
17. $document_root:当前请求映射到的root配置项
九、nginx的基本配置:
1.定义一个虚拟主机:
server {
listen 80;
server_name www.a.com;
root /web/html;
#Location = / {
# root index.html
# index index.html
#}
}
2.定义访问控制:
#默认允许所有主机访问
allow 172.16.
deny all
3.用户认证限制:
auth_basic "提示信息";
auth_basic_user_file /etc/.nginxpasswd;
> htpasswd -c -m /etc/.nginxpasswd jerry
4.索引:
autoindex on|off; #如果没有首页文件是否列出目录中的所有文件
#一般用作下载站
5.限制:
limit requests; #限制同一客户端某时间内的最大请求数
limit conn; #限制客户端并发访问数
6.日志设置:
log_format:定义日志访问格式
7.防盗链的方法:
(1)valid_referers none | blocked | server_names | string ...; #定义合法的引用
none:通过浏览器直接访问
blocked:referers的首部被清除
server_names:来源的服务器名称(应该允许自己网站域名访问)
(2)$invalid_referer: #定义不合法的引用
Location可以使用if指令:
if ($invalid_referer) {
rewrite ^/ http://www.baidu.com break;
}
(1)正则表达式匹配:
~:与指定正则表达式模式匹配时返回"真",判断匹配与否时区分字符大小写;
~*:与指定正则表达式模式匹配时返回"真",判断匹配与否时不区分字符大小写;
!~:与指定正则表达式不匹配时返回"真",判断匹配与否时区分字符大小写;
!~*:与指定正则表达式不匹配是返回"真",判断匹配与否时不区分字符大小写;
==:等值比较
(2)文件及目录匹配判断
-f,!-f:判断指定的路径的文件是否存在
-d,!-d:判断指定的路径的目录是否存在
-e,!-e:判断指定的路径资源是否存在,文件和目录均可;
-x,!-x:判断执行的路径的文件是否存爱且可执行;
8.rewrite的URL地址重写:
可用在server {},location {},if
(1)rewrite regex replacment [flag];
regex:正则表达式
replacment:替换值
flag:标识位,避免死循环
last #一旦被当前规则匹配并重写后立即停止检查后续的其他rewrite规则,而通过重写后的规则重新发起请求,如果该请求继续能够被rewrite到,陷入循环
break #一旦被当前规则匹配并重写立即停止检查后续的其他rewrite规则,而后继续其他模块处理(例如直接响应)
redirect #返回302临时重定向
permanent #返回301永久重定向
一旦陷入死循环,nginx最多循环10次,超出之后会返回500错误;
一般将rewrite写在location中时,都是用break标记,或者将rewrite写在if语句中;
(2)rewrite_log on|off; #是否把重写过程记录到错误日志中,默认为off,级别为notice级别;
(3)return code; #用于结束rewrite规则,并且为客户端返回状态码
可以使用的状态码有:204,400,402-400,500-504等;
if (condition) {
}
9.stub_status:
location /server-status {
stub_status on;
access_log off;
allow 172.16.10.1/24;
deny all;
}
active:活跃连接数
server accepts handled requests:服务器读取的连接数,已经处理的连接数,正在处理的请求数
reading:读取的请求个数
writing:正在处理请求或者正在把请求发往客户端
wating:保持连接的状态,等待用户请求
10.压缩功能:
gizp on|off
gizp_buffers 4 16k;申请4个单位为16k的内存作为压缩结果流缓存
gzip_com_level levle;:指定gzip压缩级别,1-9,级别越高,压缩比越大
gzip_disable regex ie6; 禁止在ie6上使用gzip压缩
gzip_min_length length; 最小压缩字节
gzip types text/palin ...; 压缩的文件类型
gizp_http_version 1.1; 压缩后使用什么协议传输
gzip_vary:让缓存服务器缓存gzip压缩过的数据
11. nginx内置变量补充
ngx_http_core_module 模块在处理请求时,会有大量的变量,这些变量可以通过访问日志来记录下来,也可以用于其它
nginx 模块:
参数名称 注释
1. $arg_PARAMETER HTTP 请求中某个参数的值,如/index.php?site=www.ttlsa.com,可以用$arg_site 取得 www.ttlsa.com 这个值.
2. $args HTTP 请求中的完整参数。例如,在请求/index.php?width=400&height=200 中,$args 表示字符串 width=400&height=200.
3. $binary_remote_addr 二进制格式的客户端地址。例如:\x0A\xE0B\x0E
4. $body_bytes_sent 表示在向客户端发送的 http 响应中,包体部分的字节数
5. $content_length 表示客户端请求头部中的 Content-Length 字段
6. $content_type 表示客户端请求头部中的 Content-Type 字段
7. $cookie_COOKIE 表示在客户端请求头部中的 cookie 字段
8. $document_root 表示当前请求所使用的 root 配置项的值
9. $uri 表示当前请求的 URI,不带任何参数
10. $document_uri 与$uri 含义相同
11. $request_uri 表示客户端发来的原始请求 URI,带完整的参数。$uri 和$document_uri 未必是用户的原始请求,在内部重定向后可能是重定向后的 URI,而$request_uri 永远不会改变,始终是客户端的原始 URI.
12. $host 表示客户端请求头部中的 Host 字段。如果 Host 字段不存在,则以实际处理的 server(虚拟主机)名称代替。如果 Host 字段中带有端口,如 IP:PORT,那么$host 是去掉端口的,它的值为 IP。$host是全小写的。 这些特性与 http_HEADER 中的 http_host 不同,http_host 只取出 Host 头部对应的值。
13. $hostname 表示 Nginx 所在机器的名称,与 gethostbyname 调用返回的值相同
14. $http_HEADER 表示当前 HTTP 请求中相应头部的值。HEADER 名称全小写。例如,示请求中 Host 头部对应的值 用 $http_host 表
15. $sent_http_HEADER 表示返回客户端的 HTTP 响应中相应头部的值。HEADER 名称全小写。例如,用 $sent_http_content_type 表示响应中 Content-Type 头部对应的值
16. $is_args 表示请求中的 URI 是否带参数,如果带参数,$is_args 值为 ?,如果不带参数,则是空字符串
17. $limit_rate 表示当前连接的限速是多少,0 表示无限速
18. $nginx_version 表示当前 Nginx 的版本号
19. $query_string 请求 URI 中的参数,与 $args 相同,然而 $query_string 是只读的不会改变
20. $remote_addr 表示客户端的地址
21. $remote_port 表示客户端连接使用的端口
22. $remote_user 表示使用 Auth Basic Module 时定义的用户名
23. $request_filename 表示用户请求中的 URI 经过 root 或 alias 转换后的文件路径
24. $request_body 表示 HTTP 请求中的包体,该参数只在 proxy_pass 或 fastcgi_pass 中有意义
25. $request_body_file 表示 HTTP 请求中的包体存储的临时文件名
26. $request_completion 当请求已经全部完成时,其值为 “ok” 。若没有完成,就要返回客户端,则其值为空字符串;或者在断点续传等情况下使用 HTTP range 访问的并不是文件的最后一块,那么其值也是空字符串。
27. $request_method 表示 HTTP 请求的方法名,如 GET、PUT、POST 等
28. $scheme 表示 HTTP scheme,如在请求 https://nginx.com/中表示 https
29. $server_addr 表示服务器地址
30. $server_name 表示服务器名称
31. $server_port 表示服务器端口
32. $server_protocol 表示服务器向客户端发送响应的协议,如 HTTP/1.1 或 HTTP/1.0
nginx参数说明的更多相关文章
- nginx, supervisor, celery
资料: supervisor和nginx使用 1 .supervisor 管理进程工具 2 .nginx 反向代理, 负载均衡 安装nginx $ sudo apt-get update $ su ...
- Nginx服务部署
1 企业常用网站服务 处理静态资源:nginx.apache.Lighttpd处理动态资源:tomcat(java语言编写).php(php语言编写).python(python语言编写)nginx网 ...
- Docker学习之搭建nginx环境
前言 很久没写随笔了,今天我们来学习一下如何在docker搭建nginx环境吧! 一:下载镜像,使用docker pull拉取最新的nginx镜像 命令:docker pull nginx 查看镜像: ...
- Docker入门教程-Linux环境安装Nginx及入门使用
介绍 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服 ...
- Webbench网站压力测试
Webbench是有名的网站压力测试工具,能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况.webBech的标准测试可以向我们展示服务器的 两项 内容:每秒钟相应请求数和每秒 ...
- [转]Docker和Rancher的安装与基本使用
本文转自:https://blog.csdn.net/wangshouhan/article/details/80405672 一.Docker1.CentOS下Docker安装 安装 $ yum - ...
- Mac下docker搭建lnmp环境 + redis + elasticsearch
之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...
- aspnetcore 容器化部属到阿里云全过程记录
第一次写博客,作为一个全栈er,记录一下从阿里云到产品运维上线的全过程 一.阿里云上的设置 购买阿里云ECS后: 进控制台查看实例公网IP 在控制台.网络与安全->安全组,配置规则 点击进去可以 ...
- URLOS开发基础教程——docker容器的使用方法
URLOS本是基于docker容器运行,在入门URLOS开发之前,我们首先需要掌握docker的相关基础知识,本篇就以docker容器的基本使用方法为例,快速的让大家对docker有一个全面的印象. ...
随机推荐
- Java基础复习笔记系列 十三 反射机制
主题:Java反射机制 学习资料参考网址: 1.http://www.icoolxue.com 1.Java反射机制. 各种框架中都使用到了Java的反射机制. 两个类:java.lang.Class ...
- CentOS6.5下安装PostgreSQL
一.配置 YUM 仓库 修改原始的 yum 仓库配置: vim /etc/yum.repos.d/CentOS-Base.repo 在[base]和[updates] 节(section)部分的尾部插 ...
- 64位系统使用Access 数据库文件的彻底解决方法
最近,有PDF.NET用户问我怎么在64位系统下无法访问Access数据库的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是32位版本的,所以在VS里面调试访问Access是没 ...
- Lua-面向对象中函数使用时冒号(:)和点(.)的区别
先来看一段简单的代码: local Animal = {} function Animal:Eat( food ) print("Animal:Eat", self, food) ...
- SNMPv3/pygal制图/smtplib发邮件
SNMPv3 SNMPv3在路由器端的配置 这个我都没配置过,还得现学现卖这个链接说的是SNMPv3的基本配置 这个链接说的是SNMPv3的view命令,用于管理员可以看到哪些层级的内容 1) 配置 ...
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。问题记录
电脑是win8 64位,安装oracle 11g r2 64位的,谁知道一切装完毕后,打开项目却连不上oracle数据了...首先是pl/sql连不上,装了oracle服务器,应该是不用再装客户端,p ...
- 《javascript权威指南》读书笔记(连载)
这是一篇很长的博客 终于把权威指南给买回来了,之前一直犹豫,第一:书太厚,怕买了不能坚持看完.第二:觉得太贵,最少100¥.现在实习也能发点工资了,给自己定了一个志愿:把一个月的工资用于买书.这么一想 ...
- .Net资源总结
源码文档见官方群(以下为7.4更新内容) 逆天工具 CDN 资源库 国内 Bootstrap中文网开源项目免费 CDN 服务 360网站卫士常用前端公共库CDN服务 百度静态资源公共库 新浪云计算CD ...
- WAF指纹识别和XSS过滤器绕过技巧
[译文] -- “Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters” 0x1 前言 之前在乌云drop ...
- clang编译mysql(Ubuntu10 64位)
编译安装mysql(Ubuntu10 64位) http://www.cnblogs.com/2018/p/3482259.html 这个介绍了gcc形式编译安装mysql 那我们使用clang进行编 ...