深度优化LNMP之Nginx (转)
深度优化LNMP之Nginx
Nginx基本安全优化
[root@web02 ~]# vim /application/nginx/conf/nginx.conf
http{
server_tokens off;
}
#我们在http标签端开启即可
[root@web02 ~]# curl -I blog.etiantian.org
HTTP/1.1200 OK
Server: nginx/1.6.
Date:Mon,30May201611:: 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.1200 OK
Server: nginx
Date:Mon,30May201611:: 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的响应首部位置
Enablesor disables emitting of nginx version in error messages andin 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"
#修改为想要的版本号
#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
staticchar ngx_http_server_string[]="Server: ABCDOCKER" CRLF;
#修改本行,此处的文件是我们Curl 出来显示的名称
[root@web02 nginx-1.6.]# vim src/http/ngx_http_special_response.c
21static u_char ngx_http_error_full_tail[]=
"<hr><center>"ABC(www.abcdocker.com)"</center>" CRLF
"</body>" CRLF
"</html>" CRLF
; 28static 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.(RedHat4.4.7-)(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.1200 OK
Server: ABCDOCKER
Date:Mon,30May201612:: 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.1200 OK
Server: ABCDOCKER/9.9.
Date:Mon,30May201612:: 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./--user=www --group=www --with-http_ssl_module --with-http_stub_status_module
4.优化Nginx服务的worker进程个数
worker_processes ;
[abcdocker@web02 ~]$ grep "processor"/proc/cpuinfo |wc -l [abcdocker@web02 ~]$ grep -c processor /proc/cpuinfo #此处的1表示1颗1核的CPU
[abcdocker@web02 ~]$ grep "pysical id"/proc/cpuinfo |sort|uniq|wc -l
#对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 ;
worker_cpu_affinity ;
#worker_cpu_affinity就是配置nginx进程CPU亲和力的参数,即把不同的进程分给不同的CPU处理。这里0001 1000是掩码,分别代表1、、、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 .6内核推荐使用epoll工作模式
7.调整Nginx单个进程允许的客户端最大连接数
worker_connections ;
events {
worker_connections ;
}
#worker_connections 也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024.最大客户端连接数由worker_processes和worker_connections决定.
并发=worker_process * worker_connections
8.配置Nginx worker进程最大打开文件数
worker_rlimit_nofile
#最大打开文件数,可设置为系统优化有的ulimit-HSn的结果。
9.开启高效文件传输模式
syntax: sendfile on|off #参数语法
default: sendfile off #参数默认大小
context: http,server,location,ifin 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 ;
Syntax: server_names_hash_bucket_size size;
Default: server_names_hash_bucket_size ||;
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 | 示例:
用来指定应答代码的缓存时间,实例中的值将200和302应答缓存一个小时
将304应该缓存1天。
还可以设置缓存1分钟(1m)
|
fastcgi_cache_min_user |
设置请求几次之后响应将被缓存。
|
fastcgi_cache_user_stale |
定义那些情况下用过期缓存
|
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请求返回为空 |
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;
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;
深度优化LNMP之Nginx (转)的更多相关文章
- 深度优化LNMP之Nginx [2]
深度优化LNMP之Nginx [2] 配置Nginx gzip 压缩实现性能优化 1.Nginx gzip压缩功能介绍 Nginx gzuo压缩模块提供了压缩文件内容的功能,用户请求 ...
- 深度优化LNMP之PHP (转)
深度优化LNMP之PHP PHP缓存加速介绍 1.操作码介绍及缓存原理 当客户端请求一个php程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件(Operate ...
- 深度优化LNMP
优化前准备工作 Centos准备及配置 准备安装包及软件:http://pan.baidu.com/s/1chHQF 下载解压到U盘即可安装http://pan.baidu.com/s/15TUWf ...
- 深度优化LNMP之PHP
PHP缓存加速介绍 1.操作码介绍及缓存原理 当客户端请求一个php程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件(Operate Code,opcode)该文 ...
- 深度优化LNMP之MySQL
MySQL数据库优化框架体系 1.硬件层面优化 2.操作系统层面优化 3.MySQL数据库层面优化 4.MySQL安全优化 5.网站集群架构上的优化 6.MySQL流程.制度控制优化 1 硬件层面优化 ...
- 四十三、LAMP与LNMP web架构深度优化实战-第二部
1. 配置nginx gzip压缩功能 服务器对发出的内容进行压缩,带宽少了,体验好,速度快,但是服务端压,会使cpu使用高,压缩比高的进行压缩:文本.程序文件.数据文件.图片视频不要压缩,一般 ...
- 四十二、LAMP与LNMP web架构深度优化实战-第一部
1.nginx.conf配置文件基本参数优化 1.1 隐藏nginx header内版本号信息 一些特定的系统及服务漏洞一般都和特定的软件版本号有关,我们应尽量隐藏服务器的敏感信息(软件名称及版本等信 ...
- [sql]大型网站MySQL深度优化揭秘
大型网站MySQL深度优化揭秘 第1章优化的思路和线路 1.1 网站优化的思路 2 1.2 MySQL优化,nginx这样的东西怎么优化? 第2章硬件层面优化 2.1 数据库物理机 2.1.1 ...
- CentOS 7 用户怎样安装 LNMP(Nginx+PHP+MySQL)
关于 Nginx (发音 “engine x”)这是一款免费.开源.高效的 HTTP 服务器,Nginx是以稳定著称,丰富的功能,结构简单,低资源消耗.本教程演示如何在CentOS 6.5服务器(适用 ...
随机推荐
- Yii框架入门教程(博客教程、权威指南、类手册)
http://www.yiichina.com/ http://www.yiiframework.com/doc/blog/1.1/zh_cn/start.overviewhttp://www.yii ...
- PC-计算机动行命令里的密密!系统管理程序!
1. gpedit.msc-----组策略 3. Nslookup-------IP地址侦测器 4. explorer-------打开资源管理器 5. logoff---------注销 ...
- HTML5终极备忘大全
二.文字备忘之标签 HTML5中新增的标签 <article> 定义文章 <aside> 定义页面内容旁边的内容 <audio> 定义声音内容 <canvas ...
- iOS不勾选设置,实现某个界面强制横屏
1.在不勾选横屏的前提下,实现某一个界面横屏显示,比如播放视频.图表显示等. 2.只能Present跳转,Push会无效. 3.实现代码 在需要横屏的VC里,添加如下代码 #pragma mark 强 ...
- HDU - 5187 - zhx's contest (高速幂+高速乘)
zhx's contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- 在TextView使用部分颜色文字
/** * change a part of string color. * * @param string * whole string. * @param subString * the sub ...
- Java NIO与IO的差别和比較
导读 J2SE1.4以上版本号中公布了全新的I/O类库.本文将通过一些实例来简介NIO库提供的一些新特性:非堵塞I/O,字符转换,缓冲以及通道. 一. 介绍NIO NIO包(java.nio.*)引入 ...
- PHP获取客户端和服务器IP地址
/** * 获取客户端IP地址 * @return string */ function get_client_ip() { if(getenv('HTTP_CLIENT_IP')){ $client ...
- C#中Enum用法小结
enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储. (1)默认情况下,枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,12,3...),因此 ...
- last_9t's_ramsey
cannot finish his face