Nginx官方帮助文档
http://nginx.org/en/docs/
配置文件说明
Nginx配置文件组成部分:
- 主配置文件:nginx.conf
- 子配置文件:include conf.d/*.conf
- fastcgi, uwsgi,scgi 等协议相关的配置文件
- mime.types:支持的mime类型,MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。MIME参考文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_Types
Nginx配置文件格式说明:
- 配置文件由指令与指令块构成
- 每条指令以;分号结尾,指令与值之间以空格符号分隔
- 可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
- 指令块以{ }大括号将多条指令组织在一起,且可以嵌套指令块
- include语句允许组合多个配置文件以提升可维护性
- 使用#符号添加注释,提高可读性
- 使用$符号使用变量
- 部分指令的参数支持正则表达式
Nginx 主配置文件的配置指令方式:
directive value [value2 …];
- 指令必须以分号结尾
- 支持使用配置变量
- 内建变量:由Nginx模块引入,可直接引用
- 自定义变量:由用户使用set命令定义,格式: set variable_name value;
- 引用变量:$variable_name
主配置文件结构:四部分
main block:主配置段,即全局配置段,对http,mail都有效
#事件驱动相关的配置
event {
...
}
#http/https 协议相关配置段
http {
...
}
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
...
}
#stream 服务器相关配置段
stream {
...
}
默认的nginx.conf配置文件格式说明
查看默认的nginx.conf文件内容,排除空行以及注释行
[root@nginx01 conf]# grep -Ev "#|^$" /apps/nginx/conf/nginx.conf
#全局配置段,所有配置全局生效
#设置nginx启动时用的用户和组
user nginx nginx;
#设置启动的工作进程数量
worker_processes 1;
#还可设置nginx的工作模式,PID路径,日志路径等
#events设置段,事件驱动相关的配置
#主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连
接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的
网络连接进行序列化等。
events {
#设置单个nginx工作进程可以接受的最大并发,作为web服务器
的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为
(worker_connections * worker_processes)/2
worker_connections 1024;
}
#http/https 协议相关配置段
#是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模
块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,
server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链
接的请求上限等。
http {
include mime.types;
default_type application/octet-stream;
#作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用
sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操
作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,硬盘 >>
kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
sendfile on;
#长连接超时时间,单位是秒
keepalive_timeout 65;
#设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如
本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供
web服务
server {
#配置server监听的端口
listen 80;
#本server的名称,当访问此名称的时候nginx会调用当前
serevr内部的配置进程匹配。
server_name localhost;
#location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指
令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特
定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的
配置也是在location模块中配置。
location / {
#相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。
root html;
#默认的页面文件名称
index index.html index.htm;
}
#错误页面的文件名称
error_page 500 502 503 504 /50x.html;
#location处理对应的不同错误码的页面定义到/50x.html,这个
跟对应其server中定义的目录下。
location = /50x.html {
#定义默认页面所在的目录
root html;
}
}
}
全局配置
Main 全局配置段常见的配置指令分类
- 正常运行必备的配置
- 优化性能相关的配置
- 用于调试及定位问题相关的配置
- 事件驱动相关的配置
全局配置说明
#启动Nginx工作进程的用户和组
user nginx nginx;
#启动Nginx工作进程的数量,一般设为和CPU核心数相同
worker_processes [number | auto];
#将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;
#绑定CPU相关示例,无需配置
CPU MASK: 00000001:0号CPU
00000010:1号CPU
10000000:7号CPU
worker_cpu_affinity 0001 0010 0100 1000;第0号---第3号CPU
#示例
worker_processes 2;
worker_cpu_affinity 00000001 00000010
[root@nginx02 ~]# ps axo pid,cmd,psr | grep nginx
1019 nginx: master process /apps 1
1610 nginx: worker process 0
1611 nginx: worker process 1
1614 grep --color=auto nginx 0
#版本1.9.10后允许将进程自动绑定到cpu核心上
#auto 绑定CPU
worker_processes auto;
worker_cpu_affinity auto;
#可选参数mask用于限制自动绑定可用的cpu数量:
worker_cpu_affinity auto 01010101;
#错误日志记录配置,语法:error_log file [debug | info | notice | warn | error | crit
| alert | emerg]
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log /apps/nginx/logs/error.log error;
#pid文件保存路径
pid /apps/nginx/run/nginx.pid;
#工作进程优先级,-20~20(19)
worker_priority 0;
#所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例
如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级
别的最大打开文件数的限制.最好与ulimit -n 或者limits.conf的值保持一致
worker_rlimit_nofile 1024;
#前台运行Nginx服务用于测试、或者以容器运行时,需要设为off
daemon off;
#是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为on
master_process off|on; #是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为
on
events {
#设置单个工作进程的最大并发连接数
worker_connections 65536;
#使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置。
use epoll;
#on为同一时刻一个请求轮流由worker进程处理,而防止被同时唤醒所有
worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊
群",因此nginx刚安装完以后要进行适当的优化。建议设置为on
accept_mutex on;
#on时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认
为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on
multi_accept on;
}
http配置段
配置结构
http {
...
... #各server的公共配置
server { #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
...
}
server {
...
server_name #虚拟主机名
root #主目录
alias #路径别名
location [OPERATOR] URL { #指定URL的特性
...
if CONDITION {
...
}
}
}
}
配置说明
http {
#导入支持的文件类型,是相对于/apps/nginx/conf的目录
include mime.types;
#除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
default_type application/octet-stream;
#日志配置部分
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
#自定义优化参数
sendfile on;
#在开启了sendfile的情况下,合并请求后统一发送给客户端,必须开启sendfile
#tcp_nopush on;
#在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文。
#tcp_nodelay off;
#keepalive_timeout 0;
#设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同
keepalive_timeout 65 65;
#开启文件压缩
#gzip on;
server {
#设置监听地址和端口
listen 80;
#设置server name,可以以空格隔开写多个并支持正则表达式,如:*.magedu.com www.magedu.* ~^www\d+\.magedu\.com$ default_server
server_name localhost;
#设置编码格式,默认是俄语格式,建议改为utf-8
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
#重定向服务器错误页面到静态页面/50x.html
#定义错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#以http的方式转发php请求到指定web服务器
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#以fastcgi的方式转发php请求到php处理
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#拒绝web形式访问指定文件,如很多的网站都是通过.htaccess文件来改变自己的重定向等功能。
#location ~ /\.ht {
# deny all;
#}
location ~ /passwd.html {
deny all;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#自定义虚拟server
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
#指定默认网页文件,此指令由ngx_http_index_module模块提供
# index index.html index.htm;
# }
#}
# HTTPS server
#https服务器配置
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
MIME
#在响应报文中将指定的文件扩展名映射至MIME对应的类型
include /etc/nginx/mime.types;
default_type application/octet-stream;#除mime.types中的类型外,指定其它文件的默认
MIME类型,浏览器一般会提示下载
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
#MIME参考文档:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_Types
指定响应报文server首部
#是否在响应报文中的Content-Type显示指定的字符集,默认off不显示
charset charset | off;
#示例
charset utf-8;
#是否在响应报文的Server首部显示nginx版本
server_tokens on | off | build | string;
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END