Nginx配置

  • 全局配置
    • 关于Nginx进程的描述
    • Nginx性能优化配置
    • 事件驱动相关配置
    • Nginx定位和调试的问题
    • http协议的相关配置
      • ngx_http_core_module
      • ngx_http_access_module模块
      • ngx_http_auth_basic_module模块
      • ngx_http_stub_status_module
      • ngx_http_log_module
      • ngx_http_gzip_module
      • ngx_http_ssl_module

全局配置

关于Nginx进程的描述

nginx的master-worker进程模型是其能够高性能的处理用户请求的原因之一,而且这里的每个worker进程都只会启动一个线程来处理用户请求。通常我们会将worker进程的数量设置得与我们的CPU数量一致,nginx也会将每个进程与每个CPU进行绑定。通过这种方式,可以充分利用操作系统多核的特性,并且能够最大限度的减少线程之间的切换而导致的资源损耗。

Nginx性能优化配置

1、worker进程的数量;通常应该为当前主机的cpu的物理核心数。

work_processes number | atuo
#示例一
work_processes 1
#示例二
work_processes atuo

2、worker_cpu_affinity auto [cpumask] 提高缓存命中率
CPU MASK: 000000001 - 0号CPU
000000010 - 1号CPU
100000000 - 8号CPU

worker_cpu_affinity cpumask
#示例一
worker_cpu_affinity 0001 0010 0100 1000;
#示例二
worker_cpu_affinity 0101 1010;

3、指定worker进程的nice值,设定worker进程优先级:[-20,20]

worker_priority number
#示例
worker_priority 10

4、worker进程所能打开的文件数量上线,如65535

worker_rlimit_nofile number
#示例
worker_rlimit_nofile 15000

事件驱动相关配置

#示例
events{worker connections  1024accept_mutex  off
}
#worker_connections number
#1、每个worker进程所能够打开的最大并发连接数数量,如10240。
#总最大并发数:worker_processes * worker_connections
#use method
#2、指明并发连接请求的处理方法,默认自动选择最优方法
accept_mutex on | off
#3、处理新的连接请求的方法;on指由各个worker轮流处理新请求,off指每个
#新请求的到达都会通知(唤醒)所有的worker进程,单只有一个进程可获得连
#接,造成“惊群”,影响性能。

Nginx定位和调试的问题

daemon on| pff

1、是否以守护进程运行nginx,默认是后湖进程方式

master_process on | off

2、是否以master/worker模型运行nginx;默认为on,off将不启动worker

error_log file [level]

3、错误日志文件及其急别;出于调试需要,可设定为debug;但debug仅再编译时使用了"–with-debug"选项是才有效
方式: file /path/logfile;
stderr:发送到标准错误

http协议的相关配置

http {... ...server{...server_namerootlocation [OPERATOR] /uri/{...}}server{...}
}

ngx_http_core_module

ngx_http_core_module
与套接字相关的配置:
1、sever{…}
配置一个虚拟主机
使用include命令,设置虚拟主机的配置文件路径。

#示例虚拟主机路径任意配置即可
include  /etc/nginx/vhosts/*.conf

vhosts目录下创建名为a.com.conf的虚拟服务的配置文件
即路径为/etc/nginx/vhosts/a.com.conf,内容按如下配置

server{listen address[:PORT]|PORT;server_name SERVER_NAME;root /PATH/TO/DOCUMENT_ROOT;
}
#示例
server{listen 80;server_name www.a.com;root /data/sitea/;
}

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地址不同
(3)基于hostname
server_name xxx.com; 指令指向不同的主机名

3、server_name…;

  1. 虚拟主机的主机名称后可跟多个由空白字符分隔的字符串
  2. 支持*通配任意长度的任意字符
    server_name .com www.aaa.
  3. 支持~起始的字符做正则表达式模式匹配,’$'做结尾,性能原因慎用
    server_name ~^www\d+.abc.com$
  4. 匹配优先级机制从高到低:
    (1)首先是从 字符串精确匹配 如: www.aaa.com
    (2) 左侧通配符 如: .aaa.com
    (3) 右侧
    通配符 如: www.aaa.

    (4) 正则表达式 如:~^www\d+.abc.com$
    (5)default_server

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;
}
#示例
#url地址为: http://www.aaa.com/images/logo.jpg
http://www.aaa.com/images/logo.jpg --> /data/wwwvhosts/images/logo/jpg

8、location [= | ~ | ~* | ^~] uri {…}
location @name {…}
再一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;nginx会根据用户请求的URI来检查定义的所有location,并找到一个最佳匹配,而后应用其配置。

#示例 http://www.aaa.com/images/logo.jpg  --> /data/wwwvhosts/images/logo/jpg
server{server_name www.aaa.com;location /images/ {root /data/imgs/;}
}

(1)= : 对URI做精确匹配;

location =/ {...
}
#http://www.aaa.com/ 匹配
#http://www.aaa.com/index.html 不匹配

(2)^~: 对URI的最左边部分做匹配检查,不区分字符大小写
(3)~:对URI做正则表达式模式匹配,区分大小写
(4)~:对URI做正则表达式模式匹配,不区分大小写
(5)不带符号:匹配起始于此uri的所有的uri
(6)匹配优先级从高到低:= , ^~ , /
, 不带符号

9、路径别名——alias path
文档映射的另一种机制,仅能用于location上下文

#示例: http://www.aaa.com/bbs/index.php
# --> /web/forum/index.html
location /bbs/ {alias /web/forum/;
}
# --> /web/forum/bbs/index.html
location /bbs/ {root /web/forum/;
}

注意:location中使用root指令和alias指令的意义不同
(a)root,给定的路径对应于location中的/uri/左侧的/
(a)alias,给定的路径对应于location中的/uri/右侧的/

10、index file …;
指定默认网页文件,注意:ngx_http_index_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错误。

#示例一: 最后实在找不到会返回default.gif
location /images/ {try_files $uri /images/default.gif;
}
#示例二: 最后实在找不到会返回404页面
location / {try_files $uri $uri/index.html $uri.html = 404;
}

13、keepalive_timeout timeout [header_timeout];
设定保持连接超时时长,0表示禁止长连接,默认为75s

14、keepalive_requests number;
在一次长连接上所允许请求的资源的最大数量,默认为100

15、keepalive_disable none | browser …
对哪种浏览器禁用长连接

16、send_timeout time;
向客户端发送响应报文的超时时长,对此是指两次写操作之间的间隔时长,而非整个响应过程的传输时长

17、client_body_buffer_size size;
用于接收每个客户端请求报文body部分的缓冲区大小;默认为16k;超过此大小时,其暂存到磁盘上的由下面client_body_temp_path指令所定义的位置

18、client_body_temp_path path [level1 [ level2 [ level3 ]]];
设定存储客户端请求报文的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

#除了GET和HEAD之外其它方法仅允许192.168.1.0/24网段主机使用
limit_except GET{allow 192.168.1.0/24;deny all;
}

文件操作优化的配置
21、aio on | off | threads [=pool];
是否启用aio功能

22、directio size | off;
当文件大于等于给定大小时,例如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指令所指定的次数的缓存项即为非活动项,将被删除。

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

ngx_http_access_module模块

实现基于ip的访问空值功能
1、allow address | CIDR | unix : | all;
2、deny address | CIDR | unix : | all;
http,server,location,limit_except
自上而下检查,一旦匹配,将生效,条件严格的放在前面

#示例
location / {deny 192.168.1.1;allow 192.168.1.0/24;allow 10.1.1.0/16;allow 2001:0db8::/32;deny all;
}

ngx_http_auth_basic_module模块

ngx_http_auth_basic_module模块实现基于用户的访问空值,使用basic机制进行用户认证
1、auth_basic string | off;

2、auth_basic_user_file file;

location /admin/ {auth_basic "Admin Area";auth_basic_user_file /etc/nginx/.ngxpasswd;
}

用户口令文件

  1. 明文文本 :格式 name:password :comment
  2. 加密文本: 由htpasswd命令实现,httpd-tools所提供

ngx_http_stub_status_module

ngx_http_stub_status_module模块
用户输出nginx的基本状态信息

输出信息示例:
Active connections:291
server accepts handled requests
16630948 16630948 31070465
上面三个数字分别对应accepts、handled、requests
Reading:6 Writing:179 Wating: 106
Active connections: 当前状态,活动状态的连接数
accepts: 统计总值,已经接受的客户端请求的总数
handled:统计总值,已经处理完成的客户端请求的总书
requests:统计总值,客户端发来的总的请求书
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
Writing:当前状态,正在向客户端发送响应报文过程中的连接数
Wating:当前状态,正在等待客户端发出请求的空闲连接数

location /status {stub_status;allow 172.16.0.0/16;deny all;
}

ngx_http_log_module

ngx_http_log_module模块指定日志格式记录请求

1、log_format name string…;
string可以使用nginx核心模块及其他模块内嵌的变量

2、access_log path [format [buff=size] [gzip[=level]] [flush=time] [if=condition] ];
access_log off;
访问日志文件路径,格式及相关的缓冲的配置:
buffer=size
flush=time
PS:只能在http内写

#示例
log_format compression '$remote_addr-$remote_user [$time_iso8601]''"$request" $status $bytes_sent''"$http_referer" "$http_user_agnet" "$gzip_ratio"';
access_log  /var/logs/nginx-access.log | cpmpression buffer=32k;

3、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
缓存格日治文件相关的元数据信息
max:缓存的最大文件描述符数量
min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项
inactive:非活动时长
vaild:验证缓存中各缓存项是否为活动项的时间间隔

ngx_http_gzip_module

ngx_http_gzip_module用gzip方法压缩响应数据,节约带宽
1、gzip on | off;
启用或禁用gzip压缩

2、gzip_comp_level level;
压缩比由低到高:1到9,默认为1

3、gzip_disable regex…;
匹配到客户端浏览器不执行压缩

4、gzip_min_length length;
启用压缩功能的响应报文大小阈值

5、gzip_http_version 1.0 | 1.1;
设定启用他所功能时,协议的最小版本,默认为1.1(新版本可能不是这个,具体以官方文档为准)

6、gzip_buffers number size;
支持实现压缩功能时缓冲区数量及每个缓存区的大小,默认:32 4k或16 8k

7、gzip_tupes mime-tupe…;
指明仅对哪些类型的资源执行压缩操作;即压缩过滤器,默认包含有text/html,不用显示指定,否则出错

8、gzip_vary on | off;
如果启用压缩,是否在响应报文首部查出“Vary:Accept-Encoding”

9、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag
| auth |any…;
nginx充当代理服务器时,对于后端服务器的响应报文,在何种条件下启用压缩功能。

off:不启用压缩
expired ,no-cache,no-store,private :对后端服务器的响应报文首部Cache-Control值任何一个,启用压缩功能

#示例
gzip on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css application/jacascript;

ngx_http_ssl_module

ngx_http_ssl_module模块
1、ssl on | off:
为指定虚拟机启用HTTPS protocol,建议用listen指令代替

2、ssl_certificate file;
当前虚拟机使用PEM格式的证书文件

3、ssl_certificate_key file;
当前扶你主机上于其证书匹配的私钥文件

4、ssl_protocols [SSLv2] [SSLv3] [TLSv1.1] [TLSv1.2];
支持ssl协议版本,默认为后三个

5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

none:通知客户端支持ssl session cache,但实际不支持
builtin[:size]:使用OpenSSL内奸缓存,为每个worker进程私有
shared:name:size:在各个worker之间使用一个共享的缓存
客户端连接可以复用ssl session cache中缓存的有效时长,默认5m

server {listen 443 ssl;server_name localhost;#ssl on;#在新版本中已经被"listen 443 ssl;"替代ssl_certificate /etc/pki/CA/certs/nginx.crt;ssl_certificate_key /data/nginx.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;location / {root  html;index index.html index.htm;}
}

Nginx企业级配置相关推荐

  1. Web服务器群集——Nginx企业级优化

    Nginx企业级优化 Nginx企业级优化 隐藏版本号 修改用户和组 配置网页缓存时间 日志切割 设置连接超时 更改进程数 配置网页压缩 配置防盗链 FPM参数优化 Nginx企业级优化 nginx. ...

  2. Nginx安装配置与服务搭建

    Nginx概述 Nginx(发音同engine x)是一款由俄罗斯程序员Igor Sysoev所开发轻量级的网页服务器.反向代理服务器以及电子邮件(IMAP/POP3)代理服务器.起初是供俄国大型的门 ...

  3. nginx技术(2)nginx的配置详解

    nginx的配置 1,启动nginx 1 2 3 4 5 6 7 [root@centos6 nginx-1.2.9]# /usr/sbin/nginx -c /etc/nginx/nginx.con ...

  4. 实现nginx上配置免费证书Let's Encrypt

    Let's Encrypt 的免费证书有效期为三个月,不过可以免费续期,写一个脚本定期更新即可. 准备一台nginx 服务器 ,将以下三个附件上传到你的nginx服务器. 1.下载脚本文件,wget ...

  5. 推荐一款 Nginx 可视化配置神器

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:逛逛GitHub Nginx 是前后端开发工程师必须掌握的神器.该神器有很多使用场景,比如反向代理.负载均衡.动静分离.跨 ...

  6. 九爷带你了解 nginx 日志配置指令详解

    nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...

  7. php和nginx安装脚本,Nginx + PHP 配置和启动脚本

    Nginx + PHP 配置和启动脚本,很实用 # nginx.conf server { listen 8080 ; server_name localhost; location / { root ...

  8. php修改后nginx返回不生效,nginx修改配置后不生效的问题

    nginx增加了新的server name配置,发现nginx -s reload之后总是不生效. http和https均可以打开页面,但是页面是别的server页面,使用的证书也是别的server的 ...

  9. nginx lua 配置cc 防攻击-使用lua 配置黑白名单

    nginx lua 配置cc 防攻击-使用lua 配置黑白名单 cc 防攻击和ip 禁止期限 lua_shared_dict _dict 1m; lua_shared_dict _blacklist ...

最新文章

  1. Stream Processing: Apache Kafka的Exactly-once的定义 原理和实现
  2. 上海网络推广浅析一个优质的404页面能给网站带来什么优化效果?
  3. 借助LDA主题分析的短文本相似性计算 - 综述帖
  4. Java转iOS-第一个项目总结(2)
  5. SIP代理服务器(2)
  6. 忧心文案小程序第二版前端后端源码
  7. python时间模块 dir(time)_python sys,os,time模块的使用(包括时间格式的各种转换)...
  8. 万象物语找回服务器,万象物语新手大型攻略 服务器、初始号的选择和新手前期需要做的事说明...
  9. Django Rest framework的限流实现流程
  10. 1400协议是什么和28181区别_gb28181协议常见流程简析
  11. vivo9.0以上系统如何无需Root激活XPOSED框架的流程
  12. python贴吧自动发帖-Python之自动发帖
  13. 淘宝优惠券去哪里领?
  14. LabVIEW哪些软件需要运行时许可
  15. 信息学奥赛一本通(C++版)在线评测系统 - 题解目录
  16. 值得收藏-50个免费可商用图库
  17. Android桌面图标快捷方式
  18. 让未来更近,三星The New Bixby与IoT打造智能物联
  19. Redis消息订阅发布
  20. 解决nuxt项目转为spa打包部署报错问题

热门文章

  1. 关于销售订单挑库发放卡接口以及发运处理卡接口的处理方式
  2. Android——横幅通知
  3. JVM(2):垃圾收集器与gc
  4. 关于日历点击跳转以及短信点击跳转到指定联系人界面的一些记录
  5. 华为升级emui10是鸿蒙系统吗,华为鸿蒙正式发布,EMUI10.0即将登场,你需要这份升级名单吗?...
  6. html5文本框获取焦点,CSS3实现文本输入框获取焦点高亮显示
  7. 增强现实(AR)、虚拟现实(VR)、混合现实(MR)之间有什么区别?
  8. Gmail Driver:你的gmail成了你的硬盘。
  9. JAVA个版本新特性
  10. Java版本和JDK版本对应关系