Nginx(二)

一、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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容