PHP同盟社级web nginx服务优化

1.1)隐藏nginx header 内版本号音讯

1、根据文件扩展名进行判断
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
{ 
      expires 3650d; 
      root    html/bbs;
}
location ~ .*\.(js|css)?$ 
{ 
      expires 30d;
      root    html/bbs;
}


2、根据目录进行判断
## Add expires header according to dir. 
location ~ ^/(images|javascript|js|css|flash|media|static)/ { 
    expires 360d; 
}

3、单个文件判断
给robots.txt设置过期时间,这里为robots为7天并不记录404错误日志
location ~(robots.txt){
    log_not_found off;
    expires 7d;
    break;

}

22.1)使用tmpfs文件系统替代频仍造访的目录

参考:http://blog.csdn.net/xifeijian/article/details/38615695

2.2)apache一般都是在布局文件之中指定

fastcgi_connect_timeout 300;
连接到后端fastcgi的超时时间
fastcgi_send_timeout 300;
向fastcgi传送请求的超时时间,这个值是指已经完成两次握手后向fastcgi传送请求的超时时间。
fastcgi_read_timeout 300;
接收fastcgi应答的超时时间,这个值是指已经完成两次握手后接收fastcgi应答的超时时间。
fastcgi_buffer_size 64k;
读取fastcgi应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),
可以设置为fastcgi_buffers选项指定的缓冲区大小。
fastcgi_buffers 4 64k;
本地需要用多少盒多大的缓冲区来缓冲fastcgi的应答请求。如果一个php脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓冲;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快鱼硬盘,一般这个值应该为站点中Php脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16” 、“4 64k”等。
fastcgi_busy_buffers_size 128k;
建议为fastcgi_buffers的两倍
fastcgi_temp_file_write_size 128k;
在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,设置上述数值设置太小时若负载上来时可能报502BAD GATEWAY
fastcgi_cache oldboy_nginx;
开启fastcgi缓存并为其指定一个名称。开启缓存非常有用,可以有效降低cpu的负载,并且防止502错误的发生,但是开启缓存也可能会引起其他问题。
fastcgi_cache_valid 200 302 1h;
用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一个小时
fastcgi_cache_valid 301 1d;
将301应答缓存1天
fastcgi_cache_valid any 1m;
将其他应答缓存为1分钟
fastcgi_cache_min_uses 1;
缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数
ExpiresActive on 
ExpiresDefault "access plus 12 month"
ExpiresByType text/html "access plus 12 months" 
ExpiresByType text/css "access plus 12 months"
ExpiresByType image/gif "access plus 12 months" 
ExpiresByType image/jpeg "access plus 12 months"
ExpiresByType image/jpg "access plus 12 months" 
ExpiresByType image/png "access plus 12 months"
EXpiresByType application/x-shockwave-flash "access plus 12 months"
EXpiresByType application/x-javascript "access plus 12 months" 
ExpiresByType video/x-flv "access plus 12 months"

6.1)调整单个进度允许的客户端最都林接数

21.1)优雅的荒谬页面

假定还不可能缓解问题,或者服务器启动卓殊缓慢,再品尝提升server_names_hash_bucket_size的值。如果server_name是一个包涵捕获组的正则表明式,那是nginx就只好施行这么些表明式以博取捕获组。server_names_hash_max_size
512; #默许是512kb,一般要翻看系统提交确切的值,那里一般cpu L1的4-5倍。

[root@aliyun ~]# vi /application/nginx/conf/nginx.conf
http{

……
server_tokens off;
……

}

[root@aliyun ~]# curl -I 172.19.125.*
HTTP/1.1 200 OK
Server: nginx               没有版本号了
Date: Mon, 11 Sep 2017 07:07:05 GMT
Content-Type: text/html;charset=utf-8
Connection: keep-alive
X-Powered-By: PHP/5.3.27
Set-Cookie: pcok=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; httponly

10.1)设置连接超时时间

[root@server extra]# cat httpd-default.conf 
ServerTokens Prod
ServerSignature off
if ($http_user_agent ~* "Firefox|MSIE") 
{ 
    return 403;
}


下面是在真个篇幅下,这个的所处位置环境
server {
            listen       80;
            server_name  bbs.etiantian.org;
                root   html/bbs;
                index  index.php  index.html index.htm;
            if ($http_user_agent ~* "Firefox|MSIE") 
            { 
                return 403; 
            }
            location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
            { 
                    expires 3650d;
                root    html/bbs; 
            }
            location ~ .*\.(js|css)?$ 
            { 
                    expires 30d;
                root    html/bbs;
            }
             location ~.*\.(php|php5)?$ {
             root           html/bbs;
             fastcgi_pass   127.0.0.1:9000;
             fastcgi_index  index.php;
            # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
             include        fastcgi.conf;
            }
        }
tmpfs,临时文件系统,是一种基于内存的文件系统。

可以配置eaccelerator缓存目录
mkdir -p /tmp/eaccelerator
此目录可以用tmpfs内存文件系统来存储,ssd固态硬盘
chown -R nginx.nginx /tmp/eaccelerator

也可以重新搞一个目录
[root@aliyun ~]# mkdir -p /tmpfs
[root@aliyun ~]# mount -t tmpfs -o size=16m tmpfs /tmpfs
[root@aliyun ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  5.4G   32G  15% /
tmpfs           499M     0  499M   0% /dev/shm
tmpfs            16M     0   16M   0% /tmpfs

-t 类型      第二个tmpfs是设备名    正常情况下可以设置空间为2G到4G
然后可以放到/etc/fstab或者/etc/rc.loacl 

17.1)nginx日志轮询

为了缓解网站访问的访问压力,大家应当尽可能将客户走访内容往前推,能够放到客户端的就毫无放到CDN,能够放到CDN的就绝不放到本地服务器,丰富的施用每一层的缓存,直到万不得已才让客户走访到大家的数据存上去。

http{
    server_names_hash_bucket_size 64;
}

提供了对文本内容减弱的成效,允许nginx服务器将出口内容在发送到客户端此前基于现实的国策进行压缩,以节省网站带宽,同时晋级用户访问体验,此作用同apache的mod_deflate压缩作用,着重ngx_http_gzip_module模块,默许已安装。

18.1)NGINX不记录不须要的造访日志,对于健康检查或某些图片不须求记录,而且日志写入频仍会用度磁盘IO,下落服务特性。

默许情状下nginx的四个经过可能更多的跑在一颗cpu上,本节是分配分裂的进度给差异的cpu处理,达到丰硕利用硬件多核多cpu的目标。

适量名字和通配符名字存储在哈希表中。
例子:

20.1)nginx站点目录及文件URL访问控制

location ~* \.(txt|doc)$ { 
    if (-f $request_filename){ 
        root /data/www/www; 
        #rewrite …..可以重定向到某个URL 
        break;
    }
 } 

location ~* \.(txt|doc)${ 
root /data/www/www; 
deny all;
}

单目录: 
location ~ ^/(static)/ {
    deny all; 
} 
location ~ ^/static { 
    deny all;
} 
多目录: 
location ~ ^/(static|js) { 
    deny all; 
}
location /admin/ { 
    return 404;
} 
location /templates/ {
    return 403; 
}

安全的权力:
怀有站点目录的用户和组都应该为root
装有目录权限是默许的755
不无文件权限是默许的644
注意,网站服务的用户不可以用root。
上述的权杖的设置可以落成防患黑客上传木马,以及修改站点文件,不过合理的用户上传的情节也被拒之门外了。====
要化解地点的题目,,,就要对工作进行分离,在比较好的网站架构中,应把资源文件,包罗用户上传的图片,附件等的服务和顺序服务分离,最好把上传程序服务也分别,那样就可以从容依据前面安全的业内授权了。

15.1)nginx expires缓存功用

2)Nginx下计划禁止访问*.txt文件

门户网站案例
error_page 400 http://err.tmall.com/error1.html; 
error_page 403 http://err.tmall.com/error1.html; 
error_page 404 http://err.tmall.com/error1.html; 
error_page 405 http://err.tmall.com/error1.html;
error_page 408 http://err.tmall.com/error1.html; 
error_page 410 http://err.tmall.com/error1.html; 
error_page 411 http://err.tmall.com/error1.html; 
error_page 412 http://err.tmall.com/error1.html; 
error_page 413 http://err.tmall.com/error1.html;
error_page 415 http://err.tmall.com/error1.html; 
error_page 500 http://err.tmall.com/error2.html; 
error_page 501 http://err.tmall.com/error2.html; 
error_page 502 http://err.tmall.com/error2.html; 
error_page 503 http://err.tmall.com/error2.html; 
error_page 506 http://err.tmall.com/error2.html;

淘宝的web服务器
http://tengine.taobao.org/

缓解坏处:
  1、过期的年华短一些。
  2、资源文件更新时,改名。

 

vim proxy.conf

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;

proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
proxy_store on;
proxy_store_access   user:rw  group:rw  all:r;
#proxy_temp_path      /dev/shm/nginx_proxy;
#proxy_temp_path       /data2/nginx_cache;

然后再具体的站点的下面
例如
location ~.*\.(php|php5)?$ {
         root           html/bbs;
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
        # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
         include        fastcgi.conf;
         include        proxy.conf;
     }

配置文件在conf下,,,然后配置在extra下的虚拟主机里

2.1)更改nginx的默许用户及用户组nobody

主配置文件里插手如下参数
client_max_body_size 10m;
官方文档:
set the maximum allowed size of the client request body

9.1)开启高效文件传输情势

压力测试软件    ab ,webbench,,loadruner

5.1)事件处理模型优化

4.1)根据cpu核数举行nginx进程优化

方法1:提示下载不解析
<Directory ~ "/application/www/etiantian/bbs/attachments"> 
    Options FollowSymLinks 
    AllowOverride None
    Order allow,deny 
    Allow from all 
    php_flag engine off #注意这行
</Directory>


方法2:这个会包含403
<Directory /var/html/blog>
    <Files ~ ".php"> 
        Order allow,deny 
        Deny from all
    </Files> 
</Directory>
events{
worker_connections 20480;           每个进程的最大连接数,默认1024
}

须求减少的具有程序(js,css,html,文本),不要压缩的情节(图片,视频,flash)

禁止某目录让外界访问,但允许某ip访问该目录,且帮忙PHP解析

预防客户端是火狐或者IE的走访,,,,,,差别的爬虫所对应的agent也是不相同等的

基于扩大名限制程序和文书访问

在server标签下
error_page 403 /403.html   此路径相对于root    html/www的

error_page 500 502 503 504 /50x.html;
location = /50x.html{
    root html;
}
位于html目录下

apache呢

12.1)fastcgi调优(合营php引擎动态服务)

expires
好处:
  1、第一遍之后,访问网站快
  2、节省服务带宽,,,开销
  3、服务器压力下降。开支
坏处:
  1、网站改版,对应的用户观察的依旧旧的(js,css,图片)

location ~ ^.*\.(php|php5)$ {
    deny all;
}

location ~ ^/static/.*\.(php|php5)$ {
    deny all; 
} 

location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$ { 
    deny all; 
}

但是上面这些需要放在下面的前面
location ~.*\.(php|php5)?$ {
         root           html/bbs;
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
         include        fastcgi.conf;
     }

23.1)apache不解析php

  

24.1)Tcmalloc优化Nginx性能(自己看清要不要使用)
TCMalloc的完备为Thread-Caching
Malloc,是谷歌(谷歌(Google))开销的开源工具“google-perftools”中的一个成员。与正统的glibc库的malloc相比较,TCMalloc库在内存分配成效和进程上要高很多,那在很大程度上提高了服务器在高并发意况下的特性,从而下落系统负荷。上面不难介绍怎样为Nginx添加TCMalloc库帮助。

location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ 
{ 
    access_log off; 
} 

然后将那段脚本插足crontab

nginx的接连处理体制在于分化的操作系统采取分裂的io模型,在linxu使用epoll的io多路复用模型,在freebsd使用kqueue的io多路复用模型,在solaris使用/dev/poll方式的io多路复用模型,在windows使用的是icop等等。
events{
use epoll;
}
use是个事件模块指令,用来指定nginx的干活方式。nginx帮助的干活形式有select、poll、kqueue、epoll、rtsig和/dev/poll.其中select和poll都是规范的做事格局,kqueue和epoll是最飞快的行事形式,区其余是epoll用在linux平台上,而kqueue用在bsd系统中。对于Linux系统linux2.6+的根本,推荐采用epoll工作形式,那是高性能高产出的安装。

mkdir /server/scripts/ -p
cd /server/scripts/
vim cut_nginx_log.sh
cd /application/nginx/logs && \
/bin/mv www_access.log www_access_$(date +%F -d -1day).log
/application/nginx/sbin/nginx -s reload

25.1)

location ~ ^/oldboy/ { 
    allow 202.111.12.211; 
    deny all; 
} 

location / { 
    deny 192.168.1.1; 
    allow 192.168.1.0/24; 
    allow 10.1.1.0/16; 
    deny all; 
}

3.1)配置nginx worker进度个数 

本条值依据服务器性能和次序的内存使用量来指定(一个进程启动使用的内存依照程序确定)

四核cpu服务器:
worker_cpu_affinity 0001 0010 0100 1000;
nginx进程cpu亲和力,即把不同的进程分给不同的cpu处理。这里0001 0010 0100 1000是掩码,分别代表1、2、3、4颗cpu核心

八核cpu服务器:
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000

 

16.10)nginx防爬虫案例

#修改/home/tools/nginx-1.6.2/src/core

隐藏软件名称等操作
/home/tools/nginx-1.6.2/src/http
[root@aliyun http]# vim ngx_http_header_filter_module.c 

48行
static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
改为
static char ngx_http_server_string[] = "Server: nidaye" CRLF;
static char ngx_http_server_full_string[] = "Server: nidaye " CRLF;

此时就需要重新编译,需要备份的东西要备份,,,这面这个操作只改变了header,对于页面错误的信息要该下面与上相同目录,,,,这个最好跟上面的一起做了,不要重复编译
[root@aliyun http]# vim ngx_http_special_response.c 

static u_char ngx_http_error_tail[] =
"<hr><center>nidaye</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

19.1)最小化目录及文件权限设置

13.1)更改源码隐藏软件名称及版本号

8.1)优化服务器名字的hash表大小

gzip on;
开启gzip压缩功能
gzip_min_length 1k;
允许压缩的页面最小字节数,页面字节数从header头的content-length中获取,默认值是0,不管哪个页面多大都进行压缩,建议设置成大于1k,如果小于1k可能会越压越大。
gzip_buffers   4 32k;
申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_http_version 1.1;
压缩版本(默认1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,使用默认即可。
gzip_comp_level 9;
压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,比较消耗cpu资源
gzip_types text/plain application/javascript text/css application/xml;          可以在nginx下的[root@aliyun conf]# cat mime.types查看类型,不同的版本可能不同,火狐有个插件yslow可以查看压缩情况,可能需要FQ下载用来指定压缩的类型,“text/html”类型总是会被压缩。。
gzip_vary on;
可以让前端的缓存服务器缓存经过gzip压缩的页面,缓存服务器里保存压缩过的缓存。
[root@server conf]# egrep 'User|Group' httpd.conf
# User/Group: The name (or #number) of the user/group to run httpd as.
User www
Group www

11.1)上传文件大小限制(动态应用)

25.1)Nginx多实例,,,,,指定分裂的安排文件,不一致的端口就足以兑现多实例

配置方法:
<FilesMatch "\.(css|js|gif|jpg|ico|swf)"> 
SetEnv IMAG 1 
</FilesMatch> 
日志配置:
CustomLog "|/usr/local/sbin/cronolog /app/logs/%Y/%m/access_%Y%m%d.log" combined env=!IMAG 
CustomLog "|/usr/local/sbin/cronolog /app/logs/%Y/%m/%d/access_%Y%m%d%H.log" combined env=!IMAG
keepalive_timeout 60;
客户端连接保持会话的超时时间,超过这个时间,服务器会关闭该连接。
tcp_nodelay on;
包含了keepalive参数才有效
client_header_timeout 15;
设置客户端请求头读取超时时间,如超过这个时间,客户端还没有发送任何数据,nginx将返回“Request time out(408)”错误。
client_body_timeout 15;
设置客户端请求主体读取超时时间,如超过这个时间,客户端还没有发送任何数据,nginx将返回“request time out(408)”错误,默认值是60.
send_timeout 15;
响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx将会关闭连接

只要定义了大批量名字,或者定义了万分长的名字,那就须求在http配置块中调整server_names_hash_max_size和server_names_hash_bucket_size的值。
server_names_hash_bucket_size的默许值可能是32,或者是64,或者是其余值,取决于cpu的缓存行的长短。要是这一个值是32,那么定义“too.long.server.name.nginx.org”作为虚拟主机名就会败北,呈现下边错误信息:could
not build the server_names_hash,you should increase
server_names_hash_bucket_size:32油可是生了那种景色,那就须要将设置值扩张一倍:

~ 区分轻重缓急写(大小写敏感)匹配成功
~* 不区分轻重缓急写匹配成功
!~ 区分轻重缓急写匹配战败
!~* 不区分轻重缓急写匹配败北

server{
    listen 80;
    server_name nginx.org www.nginx.org *.nginx.org;
}

7.1)配置每个进度最大文件打开数
worker_rlimit_nofile 65535;
各类进程打开的最大文件数,可设置为系统优化后的ulimit
-HSn的结果,这些可以小一些不必如此大32768就足以。

php  希望短连接  java长连接

 

以DSO动态模块加载mod_deflate配置的全部命令为: cd /home/oldboy/tools/httpd-2.2.27/modules/filters/ 
<==切到apache软件目录mod_deflate程序下。
/application/apache/bin/apxs -c -i -a mod_deflate.c 
<==以dso的方式编译入到apache中。
ll /application/apache/modules/mod_deflate.so 
<==检查mod_deflate

配置文件的修改
<ifmodule mod_deflate.c> 
    DeflateCompressionLevel 9 
    SetOutputFilter DEFLATE 
    AddOutputFilterByType DEFLATE text/html text/plain text/xml 
    AddOutputFilterByType DEFLATE application/javascript 
    AddOutputFilterByType DEFLATE text/css
 </ifmodule>

安插ngxin expires,,,,这一个要求放在server标签下

sendfile on;
同时将tcp_nopush和tcp_nodelay多少个指令设置为on用于幸免网络阻塞。

1.2)Apache去版本号的参数

 

状态码:http://oldboy.blog.51cto.com/2561410/716294
消息(1字头)
成功(2字头)
重定向(3字头)
请求错误(4字头)
服务器错误(5字头)

1)nginx下取缔访问资源目录下的PHP程序被解析,禁止images目录下的php文件被访问

14.1)配置nginx gzip压缩模块

在高并发场景,必要事先启动越来越多的nginx进度以有限协理高速响应并拍卖用户的乞求
worker_processes 8;
提出指定和cpu的数目相等或乘2的进程数。
[root@aliyun ~]# grep ‘physical id’ /proc/cpuinfo

apache压缩模块

apache的那些过期时刻跟上边的缩减源码添加大约,可是为了省去麻烦如故在编译的时候就设置好

[root@aliyun conf]# grep 'user' nginx.conf.default 
#user  nobody;

nginx一般都是在编译的时候指定的   --user=nginx  --group=nginx

相关文章