[Nginx] – 性能优化 – 配置文件优化
Nginx基本安全优化
[root@web02 ~]# vim /application/nginx/conf/nginx.conf
http{
server_tokens off;
}
#我们在http标签端开启即可
[root@web02 ~]# curl -I blog.etiantian.org
HTTP/1.1 OK
Server: nginx/1.6.
Date: Mon, May :: GMT
Content-Type: text/html; charset=UTF-
Connection: keep-alive
X-Powered-By: PHP/5.5.
Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"
[root@web02 ~]# curl -I blog.etiantian.org
HTTP/1.1 OK
Server: nginx
Date: Mon, May :: GMT
Content-Type: text/html; charset=UTF-
Connection: keep-alive
X-Powered-By: PHP/5.5.
Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"
server_tokens参数的官方说明如下:
syntax: server_tokens on|off; #此行为参数语法,on为开启,off为关闭
default: server_tokens on; #此行意思是不配置该参数,软件默认情况的结果
context: http,server,location #此行为server_tokens参数可以放置的位置
参数作用:激活或禁止Nginx的版本信息显示在报错信息里以及server的响应首部位置
Enables or disables emitting of nginx version in error messages and in the “Server” response header field; #此行是参数的作用原文
2.更改源码隐藏Nginx软件名及版本号
[root@web02 ~]# cd /home/oldboy/tools/nginx-1.6./src/core/
[root@web02 core]# vim nginx.h
#define NGINX_VERSION "9.9.9"
#修改为想要的版本号;前面得“#”号不可去掉,直接修改即可,否则,编译得时候会提示nginx.h文件有错误。
#define NGINX_VER "ABCDOCKER/" NGINX_VERSION
#将nginx修改想要修改的软件名称
#define NGINX_VAR "ABCDOCKER"
#将nginx修改为想要修改的软件名称。
#define NGX_OLDPID_EXT ".oldbin"
[root@web02 nginx-1.6.]# vim src/http/ngx_http_header_filter_module.c
static char ngx_http_server_string[] = "Server: ABCDOCKER" CRLF;
#修改本行,此处的文件是我们Curl 出来显示的名称
[root@web02 nginx-1.6.]# vim src/http/ngx_http_special_response.c
static u_char ngx_http_error_full_tail[] =
"<hr><center>"ABC(www.abcdocker.com)"</center>" CRLF
"</body>" CRLF
"</html>" CRLF
; static u_char ngx_http_error_tail[] =
"<hr><center>ABC(www.abcdocker.com)</center>" CRLF
"</body>" CRLF
"</html>" CRLF
[root@web02 nginx-1.6.]# /application/nginx/sbin/nginx -V
nginx version: nginx/1.6.
built by gcc 4.4. (Red Hat 4.4.-) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/application/nginx-1.6./ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
[root@web02 nginx-1.6.]# ./configure --prefix=/application/nginx-1.6./ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
提示:需要停止原来的nginx,从新进行编译。如果不想在覆盖原来的编译参数可以选择指定新的目录。
[root@web02 application]# curl -I blog.etiantian.org
HTTP/1.1 OK
Server: ABCDOCKER
Date: Mon, May :: GMT
Content-Type: text/html; charset=UTF-
Connection: keep-alive
X-Powered-By: PHP/5.5.
Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"
[root@web02 application]# curl -I blog.etiantian.org
HTTP/1.1 OK
Server: ABCDOCKER/9.9.
Date: Mon, May :: GMT
Content-Type: text/html; charset=UTF-
Connection: keep-alive
X-Powered-By: PHP/5.5.
Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"
3.更改Nginx服务的默认用户
[root@web02 ~]# grep "#user" /application/nginx/conf/nginx.conf.default
#user nobody;
[root@web02 ~]# useradd nginx -s /sbin/nologin -M
[root@web02 ~]# id nginx
user nginx nginx;
#在http标签即可
./configure --prefix=/application/nginx-1.6.3/ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
4.优化Nginx服务的worker进程个数
worker_processes 1;
[abcdocker@web02 ~]$ grep "processor" /proc/cpuinfo |wc -l
1
[abcdocker@web02 ~]$ grep -c processor /proc/cpuinfo
1
#此处的1表示1颗1核的CPU
[abcdocker@web02 ~]$ grep "pysical id" /proc/cpuinfo |sort|uniq|wc -l
1 #对phsical id 去重计算,表示1颗CPU
syntax: worker_processes number:#此行为参数语法,number为数量
default: worker_processes #此行意思是不配置该参数,软件默认情况为1
context: main #此行为worker_processes参数可以放置的位置
worker_processes为定义worker进程数的数量,建议设置为CPU的核数或者cpu核数*2的进程数,具体情况要根据实际业务来进行选择。除了要和CPU核数的匹配外,和硬盘存储的数据以及系统的负载也会有关,设置为CPU的个数或核数是一个好的起始配置
5.优化绑定不同的Nginx进程到不同CPU上
worker_processes 1;
worker_cpu_affinity 0001 0010 0100 1000;
#worker_cpu_affinity就是配置nginx进程CPU亲和力的参数,即把不同的进程分给不同的CPU处理。这里0001 0010 0100 1000是掩码,分别代表1、2、3、4核cpu核心,
由于worker_processes进程数为4,因此上述配置会把每个进程分配一核CPU处理,默认情况下进程不会绑定任何CPU,参数位置为main段
syntax: worker_cpu_affinity cpumask.....#此行为cpu亲和力参数语法,cpumask为cpu掩码
default: --- #默认不配置
context: main #此行为worker_cpu_affinty参数可以放置的位置
worker_processes ;
worker_cpu_affinity ;
binds each worker process to a separate CPU, while
worker_processes ;
worker_cpu_affinity ;
binds the first worker process to CPU0/CPU2, and the second worker process to CPU1/CPU3. The second example is suitable for hyper-threading.The directive is only available on FreeBSD and Linux.
From : http://nginx.org/en/docs/ngx_core_module.html by oldboy
6.Nginx事件处理模型优化
events {
#events指令是设定Nginx的工作模式及连接数上限
use epoll
}
#use是个事件模块指定,用来指定Nginx的工作模式,Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作迷失,kqueue和epoll是高效工作模式,不同的是epoll用在Linux平台,而kqueue用在BSD系统中。对于Linux 2.6内核推荐使用epoll工作模式
7.调整Nginx单个进程允许的客户端最大连接数
worker_connections 1024;
events {
worker_connections 20480;
}
#worker_connections 也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024.最大客户端连接数由worker_processes和worker_connections决定.
并发=worker_process * worker_connections
8.配置Nginx worker进程最大打开文件数
worker_rlimit_nofile 65535
#最大打开文件数,可设置为系统优化有的ulimit-HSn的结果。
9.开启高效文件传输模式
syntax: sendfile on|off #参数语法
default: sendfile off #参数默认大小
context: http,server,location,if in location #可放置的标签段
Syntax: tcp_nopush on | off; #参数语法
Default: tcp_nopush off; #参数默认大小
Context: http, server, location #可以放置标签段
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location
10.优化Nginx连接参数调整连接超时时间
Syntax: keepalive_timeout timeout [header_timeout]; #参数语法
Default: keepalive_timeout 75s; #参数默认大小
Context: http, server, location #可以放置的标签段
用于设置读取客户端请求主体的超时时间,默认值是60
Syntax: client_body_timeout time;
Default: client_body_timeout 60s;
Context: http, server, location
Syntax: send_timeout time;
Default: send_timeout 60s;
Context: http, server, location
一般放在http标签即可
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
server_names_hash_bucket_size ;
server_names_hash_max_size ;
keepalive_timeout ;
client_header_timeout 15s;
client_body_timeout 15s;
send_timeout 60s;
}
####打开tcp_nodelay,在包含了keepalive参数才有效
client_header_timeout 15;
####设置客户端请求头读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误
client_body_timeout 15;
####设置客户端请求主体读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误
send_timeout 15;
####指定响应客户端的超时时间。这个超过仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
server {
listen ;
server_name nginx.org www.nginx.org *.nginx.org
location / {
root html/www;
index index.php index.html index.htm;
}
server_names_hash_bucket_size size 512;
Syntax: server_names_hash_bucket_size size;
Default: server_names_hash_bucket_size 32|64|128;
Context: http
11.上传文件大小(http Request body size)的限制(动态应用)
client_max_body_size 8m;
Syntax: client_max_body_size size;
Default: client_max_body_size 1m; #默认值是1m
Context: http, server, location
12.fastcgi相关参数调优(配合PHP引擎动态服务)
Nginx Fastcgi相关参数 | 说明 |
fastcgi_connect_timeout | 表示nginx服务器和后端FastCGI服务器连接的超时时间,默认值为60s,这个参数通常不要超过75s,因为建立的连接越多消耗的资源就越多 |
fastcgi_send_timeout | 设置nginx允许FastCGI服务返回数据的超时时间,即在规定时间之内后端服务器必须传完所有的数据,否则,nginx将断开这个连接,默认值为60s |
fastcgi_read_timeout | 设置Nginx从FastCGI服务端读取响应信息的超时时间。表示建立连接成功后,nginx等待后端服务器的响应时间,是nginx已经进入后端的排队之中等候处理的时间 |
fastcgi_buffer_size | 这是nginx fastcgi的缓冲区大小参数,设定用来读取FastCGI服务端收到的第一部分响应信息的缓冲区大小,这里的第一部分通常会包含一个小的响应头部,默认情况,这个参数大小是由fastcgi_buffers指定的一个缓冲区的大小 |
fastcgi_buffers | 设定用来读取从FastCGI服务端收到的响应信息的缓冲区大小以及缓冲区数量。默认值fastcgi_buffers 8 4|8k; 指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256lb,那么会为其分配4个64kb的缓存区用来缓存。如果站点大部分脚本所产生的页面大小为256kb,那么可以把这个值设置为“16 16k”、“464k”等 |
fastcgi_busy_buffers_size | 用于设置系统很忙时可以使用fastcgi_buffers大小,官方推荐的大小为fastcgi_buffers*2 默认fastcgi_busy_buffers_size 8k|16k |
fastcgi_temp_file_write_size | fastcgi临时文件的大小,可设置128-256k |
fastcgi_cache oldboy_nginx | 表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502错误的发送,但是开启缓存也会引起其他问题,要根据具体情况选择。 |
fastcgi_cache_path |
fastcgi_cache缓存目录,可以设置目录哈希层级。比如2:2会生成256*256个子目录,keys_zene是这个缓存空间的名字,cache是用多少内存(这样热门的内容nginx直接放入内存,提高访问速度),inactive表示默认失效时间,max_size表示最多用多少硬盘空间,需要注意的是fastcgi_cache缓存是先卸载fastcgi_temp_path再移到fastcgi_cache_path。所以这两个目录最好在同一个分区
|
fastcgi_cache_vaild | 示例:
fastcgi_cache_valid 2000 302 1h; 用来指定应答代码的缓存时间,实例中的值将200和302应答缓存一个小时
示例:fastcgi_cache_valid 301 1d; 将304应该缓存1天。
还可以设置缓存1分钟(1m)
|
fastcgi_cache_min_user |
示例:fastcgi_cache_min_user 1; 设置请求几次之后响应将被缓存。
|
fastcgi_cache_user_stale |
示例:fastcgi_cache_use_stale error timeout invaild_header http_500; 定义那些情况下用过期缓存
|
fastcgi_cache_key | 示例:fastcgi_cache_key $request_method://$host$request_uri; fastcgi_cache_key http://$host$request_uri; 定义fastcgi_cache的key,示例中就以请求的URI作为缓存的key,nginx会取这个key的md5作为缓存文件,如果设置了缓存哈希目录,Nginx会从后往前取响应的位置作为目录。注意一定要加上$request_method作为cache key,否则如果HEAD类型的先请求会导致后面的GET请求返回为空 |
在http{}里面
fastcgi_connect_timeout ;
fastcgi_send_timeout ;
fastcgi_read_timeout ;
fastcgi_buffer_size 64k;
fastcgi_buffers 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#fastcgi_temp_path /data/ngx_fcgi_tmp; 需要有路径
fastcgi_cache_path /data/ngx_fcgi_cache levels=: keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;
PHP缓存 可以配置在server标签和http标签
fastcgi_cache ngx_fcgi_cache;
fastcgi_cache_valid 1h;
fastcgi_cache_valid 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses ;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_cache_key http://$host$request_uri;
[Nginx] – 性能优化 – 配置文件优化的更多相关文章
- [Nginx] – 安全优化 – 配置文件优化
1.配置Nginx gzip压缩实现性能优化 1.Nginx gzip压缩功能介绍 Nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送出用客户端之前,Nginx服务器会根据一 ...
- (转)[Nginx] – 配置文件优化 [一 ,二]
[Nginx] – 安全优化 – 配置文件优化 [二] 原文:https://www.abcdocker.com/abcdocker/586 [Nginx] – 性能优化 – 配置文件优化 [一] 原 ...
- nginx性能优化(针对于高并发量仅供参考,并不是方案)
目录 关于nginx.conf中的优化 配置nginx客户端网页缓存本地时间 nginx日志切割 nginx连接超时优化 Nginx 实现网页压缩功能 Nginx 实现防盗链功能 为目录添加访问控制 ...
- Nginx性能优化
一.编译安装过程优化 1.减小Nginx编译后的文件大小 在编译Nginx时,默认以debug模式进行,而在debug模式下会插入很多跟踪和ASSERT之类的信息,编译完成后,一个Nginx要有好几兆 ...
- Nginx性能优化功能- Gzip压缩(大幅度提高页面加载速度)
Nginx开启Gzip压缩功能, 可以使网站的css.js .xml.html 文件在传输时进行压缩,提高访问速度, 进而优化Nginx性能! Web网站上的图片,视频等其它多媒体文件以及大文件,因 ...
- 突破10万高并发的nginx性能优化经验(含内核参数优化)
写的很好,推荐阅读. 转载:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并 ...
- Linux(7)- Nginx.conf主配置文件、Nginx虚拟主机/访问日志/限制访问IP/错误页面优化、Nginx反向代理、Nginx负载均衡
一.Nginx.conf主配置文件 Nginx主配置文件conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的.一般,每个区块以一对大括号{}来表示开始与结束. 核心模 ...
- 轻量级HTTP服务器Nginx(Nginx性能优化技巧)
轻量级HTTP服务器Nginx(Nginx性能优化技巧) 文章来源于南非蚂蚁 一.编译安装过程优化 1.减小Nginx编译后的文件大小在编译Nginx时,默认以debug模式进行,而在debu ...
- Nginx性能优化参考
nginx性能优化参考 1)调整配置文件中的配置项的值(配置文件:nginx.conf) worker_processes auto;开启的进程数,一般配置为跟逻辑CPU核数一样worker_rlim ...
随机推荐
- Openstack部署踩坑
第一周: 使用kola部署Openstack,vip_address有问题,双网上也不行,就是部署不了,但all-in-one却可以,可是节点不会加. 第二周: 使用Packstack部署Openst ...
- (第十二周)final预发布视频
项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 Final阶段视频发布 平台:优酷 链接:http://v.youku.com/v_show/id_XMTg0 ...
- 结对项目——Core设计与实现
写在前面:关于结对编程 结对编程我一直认为是一种非常好的合作方式,他的形式主要是由一个人负责代码编写,另一个人则在一旁即时对写下的代码进行审查,这样可以大大减少代码实现方面的错误. 这次我的结对伙伴是 ...
- warning C4996: 'strcpy': This function or variable may be unsafe.
mkdir 写成 _mkdir strcpy 写成为 strcpy_s 或是在项目处右击-->属性-->C/C++-->预处理器-->在预处理器定义后添加";_CR ...
- Sqlite,libevent,openssl,mosquito交叉编译
一.设置交叉编译环境 在makefile所在目录(或源代码根目录)打开终端. 在终端中设置交叉编译所需的临时环境变量(也可写到配置文件中设置为全局环境变量),其中交叉编译工具链的名称和目录需要根据实际 ...
- C++拷贝控制
一.拷贝控制操作 当定义一个类时,显示或隐式地指定了此类型的对象在拷贝.赋值和销毁时所执行的操作,通过三个特殊的成员函数来控制这些操作,分别是拷贝构造函数,赋值运算符和析构函数.拷贝构造函数定义了 ...
- React onWheel
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- python数据统计量分析
#-*- coding: utf-8 -*- #餐饮销量数据统计量分析 from __future__ import print_function import pandas as pd cateri ...
- pandas shift
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/24 15:03 # @Author : zhang chao # @Fi ...
- pandas设置值、更改值
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/24 15:03 # @Author : zhang chao # @Fi ...