nginx的主配置文件是nginx.conf,这里主要针对这个文件进行说明
1.主配置文件nginx.conf
从上面的配置文件中我们可以总结出nginx配置文件的基本结构
2.1 全局块
全局块是默认配置文件从开始到events之间的内容,主要设置一些影响nginx服务器运行的配置命令,作用域是nginx服务器全局,通常包括nginx的用户和组,允许生成的work process数,nginx进程pid文件,日志的路径和类型、配置文件引入等
2.2 events块
设计的明日您主要影响nginx服务器与用的的网络连接。常用的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取那种事件驱动模型处理连接请求,每个worker process同时支持的最大连接数。
这一部分的指令对于nginx的性能影响较大,在实际阴影中需要根据实际情况灵活配置。
2.3 http块
这是nginx配置中的重要部分,代理、缓存和日志等绝大多数功能和第三方模块的配置都可以放在这个模块中。http包含全局块和下面的server块、location块。
http全局块中配置的命令包括文件引入、MIME-Type定义,日志自定义,是否使用sendfile传输文件,连接超时时间、单连接强求数上限等。
2.4 server块
server块配置和“虚拟主机”有密切联系。
注意:在http全局块中介绍的部分指令可以再server块中和location块中使用,只是作用域不同。
在server块中,最常见的两个配置项就是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。
2.5 location块
每个server中可以包含多个location块,location块的作用体现在实现nginx功能的灵活运用
它的主要作用是,基于nginx服务器接收到的请求字符串,对除虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现的。许多第三方模块的配置也是在这个块中提供功能。
3.全局配置
3.1 允许生成的worker process数
worker process是nginx服务器处理高并发的关键,理论上说,它的值越大,可以值得并发处理量也就越多,但实际上还是要受到软件本身、操作系统资源、硬件等的限制。
配置格式:
number:制定可以生成的worker process数
auto:让nginx自动检测
默认的配置文件中,number=1
如果将number改为3
改为auto
3.2 pid文件存放路径
这个一般在进行编译安装的时候会进行指定,当然你也可以在配置文件中重新指定
配置格式:
file是指定的pid文件路径,默认情况下是在/var/run/nginx/nginx.pid
注意:文件路径在这里可以使用相对路径,但是必须包含文件名。
此指令只能在全局块中进行配置
3.3 错误日志文件路径
这个配置可以在全局块、http、server中使用,只是作用域不同。
配置格式:
nginx服务器的日志支持输出到某一固定的文件file或者输出到标准错误输出stderr;日志级别可选,由高到低分为debug(需要在编译安装时配置--with-debug)、info、notice、warn、error、crit、alert、emerg等。
配置实例:
注意:nginx用户一定要对指定的文件拥有读写权限,否则nginx -t会报错。
3.4 引入其他配置文件
我们可能会引入其他的nginx配置或第三方模块的配置引用到当前的主配置中。
配置格式:
file支持相对路径,此指令可以放在配置文件的任意地方。
4.events配置块
4.1 网络连接序列化问题
网络连接中有一个“惊群”的问题,意思是,当某一时刻只有一个网络连接的时候,多个睡眠的进程会被同时唤醒,但是只有一个进程可以获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能。在nginx多进程的情况下,可能会出现这种问题。为了解决这个问题,nginx配置中包含了这样一条指令---accept_mutex,当其设置为开启的时候,将会对多个nginx进程接受连接进行序列化,防止多个进程之间的争抢。
配置格式:
4.2 是否允许同时接受多个网络连接
每个nginx的worker process多有同时接受多个新到达的网络连接,但是要在配置文件中进行配置。
配置格式:
此指令默认为关闭状态,只能在events中进行配置。
4.3 事件驱动模型的选择
nginx支持多种事件驱动模型来处理网络请求,包括select、poll、kqueue、epoll、rtsing、/dev/poll和eventport
配置格式:
method为使用的驱动模型,只能在events中进行配置。
4.4 最大连接数
worker_connections主要用来设置允许每个worker process同时开启的最大连接数。
配置格式:
这里的number不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,numbers值不能大于错做系统支持大开的最大句柄数。只能在events中配置。
5.http配置段
5.1 定义MIME-Type
在常用的浏览器中,可以显示的内容哟HTML、XML、GIF及Flash等文本媒体类型,浏览器为区分这些资源,需要使用MIME Tyep。Nginx作为web服务器,必须能识别前端请求的资源类型。
在nginx的默认配置中,可以看到如下内容:
此指令可以在http/server/location中进行配置。
5.2 自定义访问日志
access_log记录nginx服务器提供服务过程应答前端请求的日志,支持对服务日志的格式、大小、输出等进行设置,需要使用两个指令,分别是access_log和log_format指令
access_log配置格式:
format:可选项,自定义服务日志的格式字符串,也可以通过“格式串的名称”使用log_format指令定义好的格式,“格式串的名称”在log_format中定义。
size:配置临时存放日志的内存缓冲区大小
此指令可以在http/server/location块中进行设置。默认的配置如下:
其中,main是log_format指令默认定义的日志格式字符串的名称。
如果要取消记录服务日志的功能:
log_format是专门用于定义日志格式,并且可以为格式字符串定义一个名字,以便于access_log指令可以直接调用
配置格式:
string:服务日志的格式字符串,相关变量及含义可以参考官网文档
示例:
$time_local:服务器的时间
$request:获取到请求为GET
$status:请求状态,200表示请求成功
$body_bytes_sent:获取到请求体的大小为1334B
$http_referer:http://192.168.61.130/index.php,请求的内容
$http_user_agent:获取到用户使用的是windows平台的浏览器(内核)类型
注意:此指令只能在http中配置
5.3 配置允许sendfile方式传输文件
在Linux kernel2.2版本之后出现了一种叫做“零拷贝(zero-copy)”系统调用机制,目前很多应用服务器如apache、samba、nginx都支持sendfile。nginx在支持了sendfile系统调用后,避免了内核层与用户层的上线文切换(content swith)工作,大大减少了系统性能的开销。sendfile相关指令:sendfile和sendfile_max_chunk。
sendfile配置:
用于控制sendfile功能的开关,默认关闭。可以在http/server/location中配置。
sendfile_max_chunk配置:
其中,size值如果大于0,nginx进程的每个worker process每次调用sendfile()传输的数据量最大不能超过这个值,如果设置为0,则无限。默认设置为0。可以在http/server/location中配置。
示例:
与用户建立会话之后,nginx可以保持这些链接打开一段时间,指令keepalived_timeout就是用来设置此时间的
配置格式:
timeout:服务器端对连接的保持时间。默认为65。
header_timeout:可选项,在应答报文头部的Keep-Alive域设置超时时间:“Kepp-Alive:timeout=header_timeout”。报文中的这个指令可以被Mozilla和Konqueror识别。
可以配置在server、location中
示例:
其含义是,在服务器端保持连接的时间设置为120s,发给用户端的应答报文头部中Kepp-Alive域的超时时间为100s。
可以配置在http/server/location中。
5.5 单连接请求上限数
nginx服务器端和用户端建立会话连接后,用户端通过此连接发送请求,指令keepalive_requests用于限制用户通过某一连接线nginx发送请求的次数。
配置格式如下:
默认值为100,可以在server和location中。
5.6 配置监听
配置监听使用listen指令,常用的有两种配置方法
第一种:配置监听的ip地址
address:监听的IP地址,如果是IPV6地址,需要用中括号“[]”括起来。
port:端口号,如果只是定义了IP地址,没有定义端口号,就使用80端口
default_server:标识符,将此虚拟主机设置为address:port的默认主机。
setfib=number:老版本使用,现不常用
backlog=number:设置监听函数listen()最多允许多少网络连接同时处于挂机状态,在FreeBSD中默认为-1,其他平台为511
rcvbuf=size:设置监听socket接收缓存区大小
sndbuf=size:设置监听socket发送缓存区大小
deferred:标识符,将accept()设置为Deferred模式
accept_filter=filter:设置监听端口对请求的过滤,被过滤的内容不能被接受和处理。这个功能只在FreeBSD和NetBSD中可用。
bind:标识符,使用独立的bind()处理此address:port
ssl:标识符,设置会话连接使用SSL模式运行,与HTTPS服务有关。
示例:
location的配置语法:
其中,uri变量是待匹配的请求字符串,可以使不放正则表达式的字符串,如index.php等;也可以是包含正则的字符串,如\.php$(表示以.php结尾的URL)等。
其中,方括号中的内容是可选项,用来改变请求字符串与uri的匹配方式。在不添加此选项时,nginx服务器首先在server块的多个location块中搜索是否有标准uri字符串匹配,如果有多个可以匹配,就记录匹配度最高的一个。然后,服务器在用location块中的正则uri和请求字符串匹配,当第一个正则uri匹配成功,结束搜索,并使用这个location块处理请求;如果正则匹配全部失败,就是用刚才记录的匹配度最高的location块处理此请求。
下面是各个标识符的含义:
“=”:用于标准uri前,要求请求字符串与uri严格匹配。如果已经匹配成功,就停止继续向下搜索并立即处理此请求。
“~”:用于表示uri包含正则表达式,并且区分大小写
“~*”:用于表示uri包含正则表达式,并且不区分大小写
“~^”:用于标准uri之前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
6.1 配置请求的根目录root
web服务器接收到请求之后,首先要在服务器端指定目录中寻找请求资源。在nginx服务器中,指令root就是用来配置这个根目录的,配置结构如下:
表示当location块接收到/zabbix的请求时,将会在/var/lib/zabbix目录下寻找index.php响应请求。
可以在http/server/location中配置,一般在location中。
6.2 更改location的uri
在location块中,除了使用root指令指明请求处理根目录,还可以使用alias指令改变location接收到的URI的请求路径,其语法结构如下:
示例:
当此location块接收到“/data/index.htm”请求时,匹配成功,之后根据alias指令的配置,nginx服务器将到/location1/test/other目录下找到index.htm并相应请求。可以看到,通过alias指令的配置,根路径已经从/data更改为/location1/other了。
6.3 设置网站的默认首页index
指令index用于设置网站的默认首页,它一般由两个作用:1.用户在发出请求访问网站时,请求地址可以不写首页名称;2.可以对一个请求,根据其请求内容而设置不同的首页。
配置结构:
其中file变量可以包含多个文件名,其间使用空格分隔,也可以包含其他变量。此变量默认为indx.html。
示例:
当location块接收到“/data/location/web”时,匹配成功,他首先将预置变量$1置为“locationtest”,然后在/data/locationtest/web路径下按照index的配置顺序依次寻找index.locationtest.html页,index.my1.html页,和index.html页,首先找到那个页面,就使用哪个页面响应请求。
6.4 设置错误页面
如果用户端尝试查看网页时出现错误,服务器会将HTTP错误从网站发送到web浏览器。如果无法显示网页,web浏览器会显示网站发送的实际错误网页或web浏览器内置的友好错误消息。nginx支持自定义错误页面的内容。可以通过这一功能,在网站发生错误时为用户提供人性化错误界面显示。
一般来说,HTTP 2XX表示请求正常,HTTP 3XX表示网站重定向,HTTP 4XX表示客户端出现错误,HTTP 5XX代表服务器端出现错误。
配置格式:
response:可选项,将code指定的错误代码转化为新的response。
uri:错误页面的路径或者网站地址。
示例:
在上面的是李总可以看到,变量uri实际上是一个相对与nginx服务器安装路径的相对路径。如果不想将错误页面放到nginx服务器的安装路径下管理,只需要另外使用一个location块定向错误页面到新的路径下即可。
error_page指令可以在http、server、location中使用。
7.认证功能配置
7.1 基于IP配置nginx的访问权限
nignx配置通过两种途径支持基本访问权限的控制,其中一种是由HTTP标准模块ngx_http_access_module支持的,其通过IP来判断是否拥有对nginx的访问权限。
allow指令,用于设置允许访问nginx的客户端IP,配置结构如下:
address:允许访问的客户端IP,不支持同时设置多个,如果有多个IP需要设置,需要重复使用allow指令。
CIDR:允许访问的客户端的CIDR地址,例如202.80.18.23/25,前面是32位IP地址,后面“/25”代表该IP地址中前25位是网络部分,其余位代表主机部分。
all:代表允许所有客户端访问
另一个是deny指令,用于设置禁止访问nginx的客户端地址,配置结构:
首先禁止192.168.1.1访问,然后允许192.168.0.1/24网段访问,然后是禁止其他所有的ip访问,匹配顺序是从上向下。
7.2 基于密码配置nginx的访问权限
nginx还支持基于http basic authentication协议的认证。需要识别用户名和密码,认证失败的客户端没有访问权限,该功能由http标准模块ngx_http_auth_basic_module支持。
auth_basic指令,用于开关认证功能。
string:开启该认证功能,并配置验证时的指示信息。
off:关闭认证功能。
auth_basic_user_file,用于设置包含用户名和密码信息的文件路径,配置结构如下:
这里的密码文件支持明文和密码加密后的文件,明文格式如下:
加密密码可以使用crypt()函数进行密码加密的格式,在linux上可以使用htpasswd命令生成,在PHP和perl中,也提供crypt()函数。
示例:
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
- nginx笔记 安装nginx 配置 反向代理 多虚拟主机
1,检测linux上是否 通过yum安装了nginxrpm -qi nginx 2.安装nginx之前的依赖包yum install gcc patch libffi-devel python- ...
- nginx 一般网站部署常用参数设置
#user nobody;worker_processes 2; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...
- Nginx笔记总结三:内核参数优化
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1800 net.ipv4.ip_conntrack_max = 16777216 ...
- Nginx教程--02.Nginx虚拟主机的配置
1.Nginx虚拟主机的配置 1.1 在conf目录下,使用命令 : vim nginx.conf 对上图解释: //全局区 worker _processes 1; //表示当前有1个工作的子进程, ...
- 【Nginx笔记】nginx配置文件具体解释
本文主要对nginx的配置做重点说明,关于nginx的其他基本概念.建议參考官网描写叙述.这里推荐Nginx Beginner's Guide这篇文档.对刚開始学习的人高速认识nginx非常有帮助. ...
- Tomcat学习总结(13)—— Tomcat常用参数配置说明
1.修改端口号 Tomcat端口配置在server.xml文件的Connector标签中,默认为8080,可根据实际情况修改. 修改端口号 2.解决URL中文参数乱码 在server.xml文件的Co ...
- Nginx核心配置文件常用参数详解
Nginx核心配置文件常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Nginx权威文档的话童鞋们可以参考Nginx官方文档介绍:http://nginx.org/ ...
- Nginx代理常用参数
目录 一:Nginx代理常用参数 1.添加发往后端服务器的请求头信息 二:参数案例 1.lb01配置文件 2.web01 web02 web服务器 3.测试 4.重启 5.DNS域名解析 6.网址测试 ...
- Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.nginx 原理与优化参数配置 master-workers 的机制的好处 首先,对于每个 ...
随机推荐
- 【Loadrunner】性能测试报告实战
一.一份好的性能测试报告需要遵循什么规则? 好的报告只需要遵循3点即可:清晰的结构.简要的语言以及数据的对比. 二.如何用Loadrunner自动到处HTML以及word版的报告? 1.导出html格 ...
- mysql 约束条件 not null与default
not null与default 是否可空,null表示空,非字符串not null - 不可空null - 可空 use db4: 默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动 ...
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数 ...
- Openstack(十七)部署快存储cinder
官方部署文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/cinder.html OpenStack的存储组件—Cinder和Sw ...
- 使用Vue-cli搭建项目与目录详解
1.介绍 vue-cli这个构建工具大大降低了webpack的使用难度,支持热重载,有webpack-dev-server的支持,相当于启动了一个请求服务器,给你搭建了一个测试环境,只关注开发就OK. ...
- 利用Flash XMLSocket实现”服务器推”技术
利用Flash XML Socket实现”服务器推”技术的基础是:1.Flash提供了XMLSocket类,服务器利用Socket向Flash发送数据:2.JavaScript和Flash的紧密结合, ...
- VS异常--未找到与约束 ContractName Microsoft.VisualStudio.Language.Intellisense.IGlyphService RequiredTypeIdentity
早上打开项目的时候突然遇到这么个错误: ======================= 未找到与约束 ContractName Microsoft.VisualStudio.Language.Inte ...
- 20145122《Java程序设计》第一周学习总结
这周的JAVA学习开始了. 首先我了解JVM.JRE与JDK的区别与联系.JDK : (Java开发工具包).JDK是整个Java的核心,包括了Java运行环境JRE.Java工具和Java基础类库等 ...
- 期末总结20135320赵瀚青LINUX内核分析与设计期末总结
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对LINUX内核分析与设计这 ...
- 20145326 《Java程序设计》第4周学习总结
20145326 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 一.何谓继承 1.继承共同行为 面向对象中,子类继承父类,避免重复的行为定义.不过并非为了避免重复定义行为就 ...