Nginx企业级配置

全局配置

关于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  1024
	
	accept_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_name
		root
		location [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;
  }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值