nginx 官方帮助文档 http://nginx.org/en/docs/
tengine 帮助文档 http://tengine.taobao.org/nginx_docs/cn/docs/
配置文件由指令与指令块构成
每条指令以;分号结尾,指令与值之间以空格符号分隔
可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
指令块以{ }大括号将多条指令组织在一起,且可以嵌套指令块
include语句允许组合多个配置文件以提升可维护性
使用#符号添加注释,提高可读性
使用$符号使用变量
部分指令的参数支持正则表达式
Nginx 主配置文件的配置指令方式:
directive value [value2 ...];
注意
(1) 指令必须以分号结尾
(2) 支持使用配置变量
内建变量:由Nginx模块引入,可直接引用
自定义变量:由用户使用set命令定义,格式: set variable_name value;
引用变量:$variable_name
主配置文件结构:四部分
main block:主配置段,即全局配置段,对http,mail都有效
#事件驱动相关的配置
event {
...
}
#http/https 协议相关配置段
http {
...
}
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
...
}
#stream 服务器相关配置段
stream {
...
}
user nginx nginx; #启动Nginx工作进程的用户和组
worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同,auto
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ; #将Nginx工作进程绑定到指定的CPU核心,auto
error_log file [debug | info | notice | warn | error | crit | alert | emerg] #错误日志
pid /apps/nginx/logs/nginx.pid; #pid文件保存路径
worker_priority 0; #工作进程优先级,-20~19 越小优先级越高
worker_rlimit_nofile 65536 #所有worker进程能打开的文件数量上限,最好与ulimit -n 或者limits.conf的值保持一致,默认不限制
daemon off; #前台运行Nginx服务用于测试、或者以容器运行时,需要设为off
master_process off|on; #是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为on
events {
worker_connections 65536; #设置单个工作进程的最大并发连接数,默认512,生产建议根据性能修改更大的值
use epoll; #使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置
accept_mutex on; #mutex互斥为on表示同一时刻一个请求轮流由worker进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置 默认为off,新请求会唤醒所有worker进程
multi_accept on; #on时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off 建议设置为on
}
注意 :
worker_connections 超过1024 需要解除ulimit限制
#如果systemd启动,则需要修改nginx.service文件中加LimitNOFILE=100000,才能有效
#如果非systemd启动,可以修改下面pam限制
vim /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
worker_rlimit_nofile 20000 #总的文件打开个数
worker_connections 10000 #如果2个cpu
ps -axo pid,cmd,nice | grep nginx #查看进程优先级
http {
...
... #各server的公共配置
server { #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
...
}
server {
...
server_name #虚拟主机名
root #主目录
alias #路径别名
location [OPERATOR] URL { #指定URL的特性
...
if CONDITION {
...
}
}
}
}
include mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录
default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
sendfile on;
tcp_nopush on; #开启sendfile的情况下,合并请求后统一发送给客户端,必须开启sendfile
tcp_nodelay off; #开启keepalived模式下的连接是否启用TCP_NODELAY选项,为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文
keepalive_timeout 65 65; #设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同
server {
listen 80 default_server; #设置监听地址和端口,多个虚拟机时当前是否是默认的虚拟主机,default_server表示是默认主机,否则排在前面server为默认主机
server_name localhost; #设置server name,可以以空格隔开写多个并支持正则表达式,如:*.wang.com www.wang.* ~^www\d+\.wang\.com$
charset koi8-r; #设置编码格式,默认是俄语格式,建议改为utf-8
access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#在响应报文中将指定的文件扩展名映射至MIME对应的类型
include /etc/nginx/mime.types;
default_type application/octet-stream;#除mime.types中的类型外,指定其它文件的默认
MIME类型,浏览器一般会提示下载
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
#是否在响应报文的Server首部显示nginx版本
server_tokens on | off | build | string;
如果想自定义响应报文的nginx版本信息,需要修改源码文件,重新编译
如果server_tokens on,修改 src/core/nginx.h 修改第13-14行,如下示例
#define NGINX_VERSION "1.68.9"
#define NGINX_VER "wanginx/" NGINX_VERSION
如果server_tokens off,修改 src/http/ngx_http_header_filter_module.c
第49行,如下示例:
static char ngx_http_server_string[] = "Server: nginx" CRLF;
把其中的nginx改为自己想要的文字即可,如:wanginx
root:指定web的家目录,在定义location的时候,文件的绝对路径等于 root+location
alias:定义路径别名,会把访问的路径重新定义到其指定的路径,文档映射的另一种机制;仅能用于location上下文,此指令使用较少
在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射
= #用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~ #用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对uri的最左边部分做匹配检查,不区分字符大小写
~ #用于标准uri前,表示包含正则表达式,并且区分大小写
~* #用于标准uri前,表示包含正则表达式,并且不区分大写
不带符号 #匹配起始于此uri的所有的 uri
\ #用于标准uri前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号
匹配优先级从高到低:
=, ^~, ~/~*, 不带符号
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
location @name 这样的location不用于常规请求处理,而是用于请求重定向
#如果出现异常,则重新定向到@error_404这个location上
error_page 404 @error_404;
location @error_404 {
default_type text/html;
charset utf8;
return 200 '你访问的页面可能走丢了!';
}