一、nginx目录结构和命令
二、配置文件的组成部分
主配置文件: nginx.conf
子配置文件 include conf.d/*.conf
三、主配置文件结构: 四部
event事件驱动相关的配置
http/https 协议相关配置段
mail 协议相关配置段
stream 服务器相关配置段
四、nginx配置
正常运行必备的配置:
1、 user
2、 pid /PATH/TO/PID_FILE
3、 include file | mask
4、 load_module file
性能优化相关的配置:
1、 worker_processes number | auto
2、 worker_cpu_affinity cpumask ...
3、 worker_priority number
4、 worker_rlimit_nofile number
事件驱动相关的配置
1、 worker_connections number
2、 use method
3、 accept_mutex on | of
调试及定位问题相关的配置
1、 daemon on|off
2、 master_process on|off
3、 error_log file [level]
五、http协议的相关配置
ngx_http_core_module
与套接字相关的配置:
1、 server { ... }
2、 listen PORT
3、 server_name name ...;
4、 tcp_nodelay on | off;
5、 sendfile on | off;
6、 server_tokens on | off
7、 root
8、 location [ = | ~ | ~* | ^~ ] uri { ... }
9、 alias path;
10、 index file ...;
11、 error_page code ... [=[response]] uri;
12、 try_files file ... uri;
13、 keepalive_timeout timeout [header_timeout];
14、 keepalive_requests number;
15、 keepalive_disable none | browser ...
16、 send_timeout time;
17、 client_body_buffer_size size;
18、 client_body_temp_path path
19、 limit_rate rate;
20、 limit_except method ... { ... }
21、 aio on | off | threads[=pool];
22、 directio size | off;
23、 open_file_cache off;
24、 open_file_cache_errors on | off;
25、 open_file_cache_min_uses number;
26、 open_file_cache_valid time;
一、nginx目录结构和命令
ls /usr/local/nginx/
html是测试页, sbin是主程序
ls /usr/local/nginx/sbin/
nginx 只有一个程序文件
ls /usr/local/nginx/html/
50x.html index.html 测试网页
Nginx:默认为启动nginx
-h 查看帮助选项
-t 测试nginx语法错误
-c filename 指定配置文件(default: /etc/nginx/nginx.conf)
-s signal 发送信号给master进程, signal可为: stop, quit,
reopen, reload
示例: -s stop 停止nginx -s reload 加载配置文件
-g directives 在命令行中指明全局指令
二、配置文件的组成部分
主配置文件: nginx.conf
子配置文件 include conf.d/*.conf
fastcgi, uwsgi, scgi等协议相关的配置文件
mime.types:支持的mime类型
主配置文件的配置指令:
directive value [value2 ...];
注意:
(1) 指令必须以分号结尾
(2) 支持使用配置变量
内建变量:由Nginx模块引入,可直接引用
自定义变量:由用户使用set命令定义
set variable_name value;
引用变量: $variable_name
三、主配置文件结构: 四部
main block:主配置段,即全局配置段,对http,mail都有效
event {
...
} 事件驱动相关的配置
http {
...
} http/https 协议相关配置段
mail {
...
} mail 协议相关配置段
stream {
...
} stream 服务器相关配置段
http协议相关的配置结构
http {
...
... 各server的公共配置
server { 每个server用于定义一个虚拟主机
...
}
server {
...
server_name 虚拟主机名
root 主目录
alias 路径别名
location [OPERATOR] URL { 指定URL的特性
...
if CONDITION {
...
}
}
}
}
四、nginx配置
Main 全局配置段常见的配置指令分类
正常运行必备的配置
优化性能相关的配置
用于调试及定位问题相关的配置
事件驱动相关的配置
帮助文档
http://nginx.org/en/docs/
正常运行必备的配置:
帮助文档: http://nginx.org/en/docs/ngx_core_module.html
1、 user
Syntax: user user [group];
Default: user nobody nobody;
Context: main
指定worker进程的运行身份,如组不指定,默认和用户名同名
2、 pid /PATH/TO/PID_FILE
指定存储nginx主进程PID的文件路径
3、 include file | mask
指明包含进来的其它配置文件片断
4、 load_module file
模块加载配置文件: /usr/share/nginx/modules/*.conf指明要装载的动态模块路径: /usr/lib64/nginx/modules
性能优化相关的配置:
1、 worker_processes number | auto
worker进程的数量;通常应该为当前主机的cpu的物理核心数
2、 worker_cpu_affinity cpumask ...
worker_cpu_affinity auto [cpumask] 提高缓存命中率
CPU MASK: 00000001: 0号CPU
00000010: 1号CPU
10000000: 8号CPU
worker_cpu_affinity 0001 0010 0100 1000;
worker_cpu_affinity 0101 1010;
3、 worker_priority number
指定worker进程的nice值,设定worker进程优先级: [-20,19]
4、 worker_rlimit_nofile number
worker进程所能够打开的文件数量上限,如65535
事件驱动相关的配置:
events {
...
}
1、 worker_connections number
每个worker进程所能够打开的最大并发连接数数量,如10240
总最大并发数: worker_processes * worker_connections
2、 use method
指明并发连接请求的处理方法,默认自动选择最优方法
use epoll; #设置用于复用客户端线程的轮询方法,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
3、 accept_mutex on | off 互斥
处理新的连接请求的方法; on指由各个worker轮流处理新请求
, Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但
只有一个进程可获得连接,造成“惊群”,影响性能,默认on
调试和定位配置:
1、 daemon on|off
是否以守护进程方式运行nignx,默认是守护进程方式
2、 master_process on|off
是否以master/worker模型运行nginx;默认为on
off 将不启动worker 前台运行
3、 error_log file [level]
error_log /var/log/nginx/error.log info; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
错误日志文件及其级别;出于调试需要, 可设定为debug;但
debug仅在编译时使用了“ --with-debug”选项时才有效
方式: file /path/logfile;
stderr:发送到标准错误
syslog:server-address[,parameter=values]:发送到syslog
memory:size 内存
level:debug|info|notice|warn|error|crit|alter|emerg
五、http协议的相关配置
http {
... ...
server {
...
server_name
root
location [OPERATOR] /uri/ {
...
}
}
server {
...
}
}
ngx_http_core_module 与套接字相关的配置:
1、 server { ... }
配置一个虚拟主机
server {
listen address[:PORT]|PORT; 监听端口
server_name SERVER_NAME; 域名
root /PATH/TO/DOCUMENT_ROOT; 主站点主目录
}
2、 listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
listen address[:port] [default_server] [ssl] [http2 | spdy]
[backlog=number] [rcvbuf=size] [sndbuf=size]
default_server 设定为默认虚拟主机
ssl 限制仅能够通过ssl连接提供服务
backlog=number 超过并发连接数后,新请求进入后援队列的长度
rcvbuf=size 接收缓冲区大小
sndbuf=size 发送缓冲区大小
注意:
(1) 基于port;
listen PORT; 指令监听在不同的端口
(2) 基于ip的虚拟主机
listen IP:PORT; IP 地址不同 绑定在不同ip地址上面
(3) 基于hostname
server_name fqdn; 指令指向不同的主机名,端口相同
cd /etc/nginx/conf.d
vim vhost.conf
1.指定监听在不同的端口
2.指定虚拟主机ip绑定 ,restart后生效
2机器
3.指令指向不同的主机名,端口相同,需要配置/etc/hosts文件
2机器 vim /etc/hosts
访问IP还是80默认主站点
ngx_http_core_module
3、 server_name name ...;
虚拟主机的主机名称后可跟多个由空白字符分隔的字符串
支持*通配任意长度的任意字符 配合dns解析用
server_name *.magedu.com www.magedu.*
支持~起始的字符做正则表达式模式匹配,性能原因慎用
server_name ~^www\d+\.magedu\.com$
\d 表示 [0-9]
匹配优先级机制从高到低:
(1) 首先是字符串精确匹配 如: www.magedu.com
(2) 左侧*通配符 如: *.magedu.com
(3) 右侧*通配符 如: www.magedu.*
(4) 正则表达式 如: ~^.*\.magedu\.com$
(5) default_server
虚拟主机可以加多个名字
a.com c.com 通配符
没有e.com 发往默认站点
匹配优先级机制从高到低,尽量不要这样设置
ngx_http_core_module
4、 tcp_nodelay on | off;
在keepalived模式下的连接是否启用TCP_NODELAY选项
当为off时,延迟发送,合并多个请求后再发送
默认On时,不延迟发送
可用于: http, server, location
5、 sendfile on | off; 是否启用sendfile功能,在内核中封装报文直接发送 默认Off
6、 server_tokens on | off | build | string 是否在响应报文的Server首部显示nginx版本
定义路径相关的配置
7、 root
设置web资源的路径映射;用于指明请求的URL所对应的文档
的目录路径,可用于http, server, location, if in location
server {
...
root /data/www/vhost1;
}
示例
http://www.magedu.com/images/logo.jpg
--> /data/www/vhosts/images/logo.jpg
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射; ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置
8、 location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
在一个server中location配置段可存在多个,用于实现从uri到
文件系统的路径映射; ngnix会根据用户请求的URI来检查定义的所有
location,并找出一个最佳匹配,而后应用其配置
示例:
server {...
server_name www.magedu.com;
location /images/ {
root /data/imgs/;
}
}
http://www.magedu.com/images/logo.jpg
--> /data/imgs/images/logo.jpg
=:对URI做精确匹配;
location = / {
...
}
http://www.magedu.com/ 匹配
http://www.magedu.com/index.html 不匹配
^~:对URI的最左边部分做匹配检查,不区分字符大小写
~:对URI做正则表达式模式匹配,区分字符大小写
~*:对URI做正则表达式模式匹配,不区分字符大小写
不带符号:匹配起始于此uri的所有的uri
匹配优先级从高到低:
=, ^~, ~/~*, 不带符号
示例:
root /vhosts/www/htdocs/
http://www.magedu.com/index.html
--> /vhosts/www/htdocs/index.html
server {
root /vhosts/www/htdocs/
location /admin/ { admin在date目录下
root /webapps/app1/data/ 是admin的根
}
}
http://www.magedu.com/admin/index.html
--> /webapps/app1/data/admin/index.html
location示例
location = / { http://www.linux.com
[ configuration A ]
}
location / { http://www.linux.com/index.html
[ configuration B ]
}
location /documents/ { http://www.linux.com/documents/log.jpg
[ configuration C ]
}
location ^~ /images/ { http://www.linux.com/documents/linux.txt
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ { http://www.linux.com/images/log.jpeg
[ configuration E ]
}
a.com的默认主站点是root/app/website2,而访问images请求会转到root/app/website1目录下,互不影响,想带你关于后者是前者的根
2机器访问
ngx_http_core_module
9、 alias path;
路径别名,文档映射的另一种机制;仅能用于location上下文
示例:
http://www.magedu.com/bbs/index.php
location /bbs/ {
alias /web/forum/; /bbs/完全置换/web/forum/
} --> /web/forum/index.html
location /bbs/ {
root /web/forum/;
} --> /web/forum/bbs/index.html
注意: location中使用root指令和alias指令的意义不同
(a) root,给定的路径对应于location中的/uri/左侧的/
(b) alias,给定的路径对应于location中的/uri/右侧的/
10、 index file ...;
指定默认网页资源,注意: ngx_http_index_module模块
80端口默认主站点页面 /usr/share/nginx/html
alias完全置换,访问images替换成了website1
访问a.com还是默认路径
2机器看到的是完全置换,images下的内容相当于是/app/website1下的内容
修改默认访问站点位置
2机器
ngx_http_core_module 网页劫持修改错误页面信息
11、 error_page code ... [=[response]] uri;
模块: ngx_http_core_module
定义错误页, 以指定的响应状态码进行响应
可用位置: http, server, location, if in location
error_page 404 /404.html
error_page 404 =200 /404.html
12、 try_files file ... uri;
try_files file ... =code;
按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,
会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。
最后一个参数是回退URI且必须存在,否则会出现内部500错误
location /images/ { try_files $uri /images/default.gif; }
location / { try_files $uri $uri/index.html $uri.html =404; }
自定义错误页面
vim /etc/nginx/conf.d/vhosts.conf 在website2下面,
错误页面建议专门创建目录存放
alias /app/website2/error_pages/404.html 404.html完全置换
建议显示的时候不要显示404错误页面,有些浏览器看到404会劫持网页,跳转到浏览器广告页面,可以改成200成功浏览器就
无法劫持,京东错误网页就是这样,访问错误页面设置成免费试用,避免浏览器劫持
try_files file ... uri; 访问images目录时 系统会去找 $uri文件 在找不到的情况下,系统会最终默认的文件进行显示
try_files file ... =code; 如果连默认的网页也不存在,就会报错404
2机器测试
ngx_http_core_module 定义客户端请求的相关配置
13、 keepalive_timeout timeout [header_timeout];
设定保持连接超时时长, 0表示禁止长连接, 默认为75s
14、 keepalive_requests number;
在一次长连接上所允许请求的资源的最大数量
默认为100
15、 keepalive_disable none | browser ...
对哪种浏览器禁用长连接
16、 send_timeout time;
向客户端发送响应报文的超时时长,此处是指两次写操作
之间的间隔时长,而非整个响应过程的传输时长
keeplive设置长连接
telnet 测试长连接
ngx_http_core_module
17、 client_body_buffer_size size;用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;
超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置
18、 client_body_temp_path path [level1 [level2[level3]]];
这里的level1,2,3如果有值就代表存在一级,二级,三级子目录设定用于存储客户端请求报文的body部分的临时存储路径及子
目录结构和数量目录名为16进制的数字;
client_body_temp_path /var/tmp/client_body 1 2 2
1 1级目录占1位16进制,即2^4=16个目录 0-f
2 2级目录占2位16进制,即2^8=256个目录 00-ff
2 3级目录占2位16进制, 即2^8=256个目录 00-ff
对客户端进行限制的相关配置
19、 limit_rate rate;限制响应给客户端的传输速率,单位是bytes/second默认值0表示无限制
20、 limit_except method ... { ... },仅用于location限制客户端使用除了指定的请求方法之外的其它方法
method:GET, HEAD, POST, PUT, DELETE
MKCOL, COPY, MOVE, OPTIONS, PROPFIND,
PROPPATCH, LOCK, UNLOCK, PATCH
limit_except GET {
allow 192.168.1.0/24;
deny all;
} 除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用
可以指定固定IP或者网段,GET后面也可以添加其他选项
ngx_http_core_module 文件操作优化的配置
21、 aio on | off | threads[=pool];
是否启用aio功能
22、 directio size | off; 同步写效率低,但不容易丢数据
是否同步(直接)写磁盘,而非写缓存,在Linux主机启用
O_DIRECT标记, 则文件大于等于给定大小时使用,例如directio 4m
23、 open_file_cache off; 缓存源数据
open_file_cache max=N [inactive=time];
nginx可以缓存以下三种信息:
(1) 文件元数据:文件的描述符、文件大小和最近一次的修改时间
(2) 打开的目录结构
(3) 没有找到的或者没有权限访问的文件的相关信息
max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现管理
inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中
的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项, 将被删除
ngx_http_core_module
24、 open_file_cache_errors on | off;
是否缓存查找时发生错误的文件一类的信息 默认值为off
25、 open_file_cache_min_uses number;
open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项
默认值为1
26、 open_file_cache_valid time;
缓存项有效性的检查频率
默认值为60s