配置文件的结构如下:
#主配置段,即全局配置段,对http,mail都有效
main {
...
}
#事件驱动相关的配置
event {
...
}
#http/https 协议相关配置段
http {
...
}
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
...
}
#stream 服务器相关配置段
stream {
...
}
从上面的结构可以看出,Nginx的默认主配置文件主要由main、events、http、server和location5个块组成,对于嵌套块(如http、server、location)中的指令,执行的顺序为从外到内依次执行,内层块中的大部分指令会自动获取外层块指令的值作为默认值,只有某些特殊指令除外
各块的作用如下:
块 | 作用 |
main | 主要控制nginx子进程所属的用户和用户组,生成子进程数,错误日志与级别,pid位置,子进程优先级,进程对应的CPU,进程能打开的文件描述符数目等 |
event | 控制nginx处理连接的方式 |
http | nginx处理http请求的主要配置块,大多数配置都在这里执行 |
server | nginx主机的配置块,用户配置多个虚拟主机 |
location | server中对应控制目录级别的控制块,可以有多个 |
mail | 控制和邮件相关的配置 |
默认nginx.conf配置文件格式说明:
user nginx nginx;
#全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,
Nginx的PID路径,日志路径等。
worker_processes 1; #启动工作进程数数量
events {
#events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连
接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多
工作进程下的网络连接进行序列化等。
worker_connections 1024;
#设置单个nginx工作进程可以接受的最大并发,
作为web服务器的时候最大并发数为worker_connections * worker_processes,
作为反向代理的时候为(worker_connections * worker_processes)/2}
http {
#http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模
块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,
server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单
个链接的请求上限等。
include mime.types;
#用于引入配置文件
default_type application/octet-stream;
#设置默认文件类型
sendfile on;
#作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用
sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核
中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝
硬盘 >>kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
keepalive_timeout 65; #长连接超时时间,单位是秒
server {
#设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如
本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80
端口提供web服务、
listen 80;
#配置server监听的端口
server_name localhost;
#本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。
location / {
#location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指
令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,
并对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很
多第三方模块的配置也是在location模块中配置。
root html;
#相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。
index index.html index.htm;
#默认的页面文件名称
}
error_page 500 502 503 504 /50x.html;
#错误页面的文件名称
location = /50x.html {
#location处理对应的不同错误码的页面定义到/50x.html,这个
跟对应其server中定义的目录下。
root html; #定义默认页面所在的目录
}
}
mail {
#和邮件相关的配置
} mail 协议相关配置段tcp代理配置,1.9版本以上支持
stream {
#stream 服务器相关配置段
}
include /apps/nginx/conf.d/*.conf
#导入其他路径的配置文件
}