/etc/nginx/nginx.conf
worker_rlimit_nofile#; --指定一个worker 进程所能打开的最大文件描述符数量
worker_rlimit_sigpending#; --指定每个用户能够发往进程的信号的数量
性能优化相关的配置
1.work_processes --worker 进程的个数,通常为物理CPU核心数量减1,可以设为auto,实现自动设定
2.worker_cpu_affinity CPUMASK CPUMASK...;
0001
0010
0100
1000
worker_cpu_affinity 00000001 00000010 00000100;
3. worker_priority nice ; [-20,19]
调试,定位问题的配置
1. daemon [off|on] --是否以守护进程方式启动nignx
2. master_process on|off| --是否以master/worker 模型运行nignx
3. error_log /PATH/TO/ERROR_LOG level --错误日志文件以及级别, 出于调试的需要,可以设定为debug,但debug仅在编译时使用了"--with-debug"选项才有效
event{}
1.worker_connections#; 每个worker进程所能够响应的最大并发请求数量=worker_processer*work_connections
2.use [epoll|rgsig|select|poll];定义使用的事件模型;建议让nginx 自动选择
3.accept_mutex[on|off]; 各worker 接收用户的请求的负载均衡锁,启用时,表示用于多个worker轮流地,序列化的响应新请求;
4.lock_file /PATH/TO/LOCK_FILE;
增加nginx path到环境变量
cat /etc/profile.d/nginx.sh
export PATH=/usr/local/nginx/sbin:$PATH
. /etc/profile.d/nginx.sh
mkdir -pv /data/www/vhost2
nginx -s reload -------> nginx 重起
ss -tnl ------->查看端口是否打开
主机相关的指令
1.server {}
定义虚拟主机
server{
listen PORT; --基于port:listen 指令监听在不同的端口;
server_name NAME; --基于hostname server_name 指令指向在不同的主机名;
root /path/to/documentroot;
}
2.listen
listen address[:port]{default_sever}[ssl][http2|spdy]
listen port{default_sever}[ssl][http2|spdy]
default_sever :设置默认虚拟主机用于基于IP地址,或使用了任意不能对应任何一个server的name时所返回站点;
ssl:用于限制只能通过SSL连接提供服务
spdy:SPDY protocol (SPEEDY),在编译了spdy模块的情况下,用于支持SPDY协议
htpp2: http version 2;
3. server_name NAME [...];
后可以跟多个主机名,可以使用通配符和正则表达式
(1) 首先精匹配
(2) 左侧通配符 *.doufupi.com
(3) 右侧通配符 www.doufupi.*
(4) 正则 ~^,*.doufupi.com$
(5) default_sever
4. tcp_nodelay on|off; 对于keepalive模式下的连接是否使用TCP_NODELAY选项
5. tcp_nopush on|off; 是否启用TCP_NOPUSH(FREEBSE)或TCP_CORK(linux)选项,仅在sendfile 为on时有用;
6. sendfile on|off; 是否启用sendfile 功能
路径相关的指令
7. root
设置web资源的路径映射;用于指明请求的URL所对应的文档目录路径;
server{
...
root /data/www/host1;
}
http:www.doufupi.com/images/IMEG345.jpg-->/data/www/host1/images/IMEG345.jpg
server{
...
server name wwww.doufupi.com;
location /images/{
root /data/imgs/;
}
}
http:www.doufupi.com/images/IMEG345.jpg-->/data/imgs/images/IMEG345.jpg
8. location [=|-|~*|^-] url {...}
location @name {...}
功能:允许根据用户请求的URL来匹配定义的各个location,匹配时,此请求将被相应的location块中的配置所处理;简言之,即用于为需要用到专用配置的URL提供特定配置;
= :URL的精确匹配
- : 做正则表达式匹配,区分字符大小写
-*: 做正则表达式匹配,不区分字符大小写
^-: URL左半部分匹配,不区分字符大小写
匹配优先级: = > ^- > -/-*> 不带符号的URL
9. alias
定义路径别名,只能用用location配置段,定义路径别名
location /images/ {
root /data/imgs/;
}
location /images/ {
alias /data/imgs/;
}
注意:
root指令:路径为对应的location的"/"的这个URL: /images/IMEG345.jpg -->/data/imgs/images/IMEG345.jpg
alias指令:路径为对应的location的"/url/"的这个URL: /images/IMEG345.jpg -->/data/imgs/IMEG345.jpg
10. index 指网站默认指定的主页
可以根据不同的IP 给定不同的主页
谁的使用范围小,谁的优先级别高
11. error_page code...[=[response]] url;
根据http的状态码重定向错误页面;
error_page 404=200 /404.html; (以指定的响应码进行响应)
12. try_file
try_file file ... =code; 尝试查找第1至第N-1个文件,第一个是为返回给请求者的资源,若1至N-1文件都不存在,则跳转到最后一个URL(
必须不能匹配到当前LOCATION,而应该匹配至其它LOCATION,否则会导致死循环);
用户请求相关的配置:
13.keeplive_timeout 设定keeplive连接的超时时长;0 表示禁止长连接
14. keepalive_requests number; 在keepalive 连接上所允许请求的最大资源数量 ,default 100;
15. keepalive_disable non|browser ...; 指明禁止为何种浏览器使用keepalive功能
16. send_timeout# 发送报文的超时时长,deafaule 60s
17. client_body_buffer_size size 接收客户请求报文body的缓冲区大小,deafaule16K,超出此指定大小时,其将存于磁盘上
18. client_body_temp_path path [level [level2 [level3]]]; 用于存储客户端请求body的临时存储路径及子目录结构和数量
client_body_temp_path /var/tmp/client_body 2 2;
对客户端请求的进行限制
19. limit_excepte METHOD {...}
20. limit_rate_speed; 限制客户端每秒种所能传输的字节数,default 0 表示无限制
文件操作优化相关的配置
21. aio on|off
22. directio on|off
23. open_file_cache
open_file_cache max=N[inactive=time];
nginx可以缓存以下三种信息:
(1) 文件描述符,文件大小和最近一次修改时间;
(2) 打开的目录结构
(3)没有找到的或者没有权限操作文件的相关信息
max=N 可以缓存的最大条目上限,一旦达到上限,则会使用LRU算法从缓存中删除最近最少使用的缓存
inactive=time 在此处指定的时长内没有被访问过的缓存是为非活动缓存项,因此直接删除
24.open_file_cache_errors on|off` 是否缓存找不到其文件,或者没有权限访问的文件相关信息
25.open_file_cache_valid time: 每隔多久检查一次缓存中缓存项的有效性 deafaule 60S
26. open_file_cache_min_user number 缓存项在非活动期限内最少应该被访问的次数
27.allow address |CDIR|unix|all;
28.deny address |CDIR|unix|all;
location ~ ^/1.html {
root /soft/code;
index index.html;
deny 61.142.20.34; #deny主指定iP
allow all;
}
location ~ ^/admin {
root /soft/code;
index index.html;
allow 61.142.20.34; #allow指定iP
deny all;
}
//配置拒绝某⼀一个IP, 其他全部允许
location ~ ^/1.html {
root /usr/share/nginx/html;
index index.html;
deny 192.168.56.1;
allow all;
}
//只允许某⼀一个⽹网段访问,其它全部拒绝
location / {
root html;
index index.php index.html index.htm;
allow 192.168.56.0/24;
deny all;
}
nginx_http
htpasswd -c -m /etc/nginx/.ngxhtpasswd jerrry
htpasswd -c -m /etc/nginx/auth_conf jerrry
htpasswd -b -m /etc/nginx/auth_conf mark #新增
htpasswd -m /etc/nginx/.ngxhtpasswd jerrry
29.auth_basic string |off $ 使用http basic 对用户 需要安装包httpd-tools
30. auth_basic_user_file file;
文件格式 :
name1:password1
name1:password2:comment
密码格式:
(1)encrypted with crypt function;
(2)md5加密;
location /admin/ {
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.ngxhtpasswd;
}
31. log_format
32. access_log path[ format ] access_log off;
33. open_lof_file_cache max=N
open_lof_file_cache off;
ngx_http_stub_status
34.stub_status:
通过指定url输出stub status;
location /status/ {
auth_status;
}
ngx_http_referer_module模块配置(基于请求报文中的Referer首部的值做访问控制)
35. valid_refers none|blocked|server_name|string ...;
none:
blocked:
arbitrary string:
regular expression:
36.limit_req_zone
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
#limit_req zone=req_zone;
limit_req zone=req_zone burst=3 nodelay;
}
}
37.limit_conn_zone
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
#limit_req zone=req_zone;
limit_conn_zone zone=conn_zone 1;
}
}
连接限制没有请求限制有效?
我们前⾯面说过, 多个请求可以建⽴立在⼀一次的TCP连接之上, 那么我们对请求的精度限制,当然⽐比对⼀一个连接的限制会更更加的有效。
因为同⼀一时刻只允许⼀一个连接请求进⼊入。但是同⼀一时刻多个请求可以通过⼀一个连接进⼊入。所以请求限制才是⽐比较优的解决⽅方案。