nginx基础版本项目实战包含优化(六)

1、较小nginx编译后的文件大小:
在编译nginx时,默认以debug模式运行,而在debug模式下回插入很多跟踪和assert之类的信息。编译完成后,一个nginx要好几M字节。而在编译前取消nginx的debug模式,编译完成后nginx只有几百个字节。因此可以在编译之前,修改相关源码,取消debug模式,具体的方法如下:
在nginx源码解压缩之后,找到源码目录下的auto/cc/gcc文件,在其中找到如下几行:
#debug
CFLAGS=“$CFLAGS -g"
注释掉或者删除掉这两行,即可取消debug模式;
2、为特定的cpu指定cpu类型编译优化:

在编译nginx时,默认的GCC编译参数是”-O“,要优化GCC编译,可以使用如下两个参数:
--with-cc-opt='-03'
--with-cpu-opt=CPU  #为特定的CPU编译,有效的值包括:pentium,pentiumpro,pentium3,pentium4,athlon,opteron,amd64,sparc32,sparc64,ppc64

要确定cpu类型,可以使用下面的命令:
cat   /proc/cpuinfo  |grep  "model name"

3、nginx内核优化参数
内核参数的优化,主要是在linux系统中针对nginx应用而进行的系统内核参数优化,下面给出一个优化的实例以供参考:
net.ipv4.tcp_max_tw_buckets = 6000  #用来设置timewait的数量,默认是180000,这里设置为6000;
net.ipv4_ip_local_port_range = 1024  65000 #用来设定允许系统打开的端口范围;
net.ipv4.tcp_tw_recycle =1  #用于设置启用timewait快速回收机制;
net.ipv4.tcp_tw_reuse  = 1  #选项用于开启重用,允许将time-wait sockets重新用于新的tcp连接;
net.ipv4.tcp_syncookies = 1 #用于开启SYN COOKIES,当出现syn等待队列溢出时,启用cookies进行处理;
net.core.somaxconn = 262144  #选项的默认值是128,这个参数用来调节系统同时发起tcp连接的数目,在高并发的请求中,默认值可能会导致链接超时或者重传;因此需要结合并发请求数来调整;
net.core.netdev_max_backlog=262144#选项表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目;
net.ipv4.tcp_max_orphans=262144  #选项用于设定系统中最多有多少个tcp套接字不被关联到任何一个用户句柄上。如果超过这个字数,孤立连接将立即被复位并打印出警告信息;这个限制只是为了简单的防止dos攻击,不能过分依靠这个甚至人为减少这个值;更多的情况下应该增加这个数值;
net.ipv4.tcp_max_syn_backlog  = 262144 #用于设定哪些尚未收到客户端确认信息的连接请求的最大值,对于有128M内存的系统而言,此参数的默认值是1024;对小内存的系统则是128;
net.ipv4.tcp_synack_retries  =  1  #参数的值决定了内核放弃连接之前发送SYN+ACK包的数量;
net.ipv4.tcp_syn_retries  =  1  #表示在内核放弃之前SYN包的数量;
net.ipv4.tcp_fin_timeout  = 1 #选项决定了套接字保持在FIN-WAIT-2状态的时间。默认值是60秒。正确设置这个值非常重要,有时即使一个负载很小的web服务器,也会出现大量的死套接字而产生溢出的风险;FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能消耗1.5KB内存,但是其生存期长些;
net.ipv4.tcp_syn_reties = 1#表示在内核放弃建立连接之前发送syn包的数量;如果发送端要求关闭套接字,net.ipv4.tcp_fin_timeout选项决定了套接字保持在FIN-WAIT-2状态时间。接收端可以出错并永远不关闭连接,甚至意外宕机。
net.ipv4.tcp_keepalive_time = 30选项表示当keepalive启用的时候,TCP发送keepalive消息的频度。默认值是2(单位是小时);


编译安装nginx,见五编译安装nginx的文章
user nginx;#定义Nginx运行的用户和用户组
worker_processes 2;#nginx进程数,建议设置为等于CPU总核心数。
error_log /var/log/nginx/error.log warn;#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
pid /var/run/nginx.pid;#进程文件
#worker_processes 2
#worker_cpu_affinity 0101 1010;#如果有4个CPU,并且指定2个worker进程,我这里还没使用;
worker_rlimit_nofile 102400;#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
events
{
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;#工作模式与连接数上限
worker_connections 51200;#单个进程最大连接数(最大连接数=连接数*进程数)
}


http {
    include       /etc/nginx/mime.types;#文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"' '"$upstream_addr"' '"$upstream_response_time"';#日志输出格式
    access_log  /home/nginx/log/access.log  main;#访问日志路径
    client_header_buffer_size 1k;#设置用户请求头所使用的buffer大小;默认1k;#注意对于对于携带有较大cookie或来自于wap用户的请求头来说,1k的buffer一般不够,这时可以使用指令large_client_header_buffers
large_client_header_buffers 4 64k; 
client_body_buffer_size 512k;如果用户请求体超过了buffer的大小,则将全部内容或部分内容存储到一个临时文件中。
client_max_body_size 2m; 根据请求头中的Content-Length来判断请求体大小是否允许。如果大于设定值,则返回
“ Request Entity Too Large”(413)错误。不过要注意的是,浏览器一般并不对这个错误进行特殊显示。
#sendfile off; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,
以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。我这里没有使用
#autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
send_timeout 120;#指定响应客户端的超时时间,单位:秒,默认值为60 
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞 
#fastcgi_cache_path /usr/local/Nginx/fastcgi_cache levels=
1:2 keys_zone=TEST:10m inactive=5m; #这个指令为FastCGI缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。
单纯的图片服务器不用这个参数;
#fastcgi_connect_timeout 300;#指定连接到后端FastCGI的超时时间。
#fastcgi_send_timeout 300;#向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间
#fastcgi_read_timeout 300;#接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
#fastcgi_buffer_size 4k;#指定读取FastCGI应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为4k,所以这里设置为4k。
#fastcgi_buffers 8 4k;#指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答,如上所示,如果一个php脚本所产生的页面大小为256k,
则会为其分配16个16k的缓 冲区来缓存,如果大于256k,增大于256k的部分会缓存到fastcgi_temp指定的路径中,当然这对服务器负载来说是不明智的方案,
因为内存中 处理数据速度要快于硬盘,通常这个值的设置应该选择一个你的站点中的php脚本所产生的页面大小的中间值,比如你的站点大部分脚本所产生的
页面大小为 256k就可以把这个值设置为16 16k,或者4 64k 或者64 4k,但很显然,后两种并不是好的设置方法,因为如果产生的页面只有32k,如果用4 64k它
会分配1个64k的缓冲区去缓存,而如果使用64 4k它会分配8个4k的缓冲区去缓存,而如果使用16 16k则它会分配2个16k去缓存页面,这样看起来似乎更加合理。图片服务器不需要设置。
#fastcgi_busy_buffers_size 8k;#默认值是fastcgi_buffers的两倍;
#fastcgi_temp_file_write_size 16k;#在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍
    #fastcgi_cache_valid 200 302 1h;  
    #fastcgi_cache_valid 301 1d;  
#fastcgi_cache_valid any 1m; 
#为指定的应答代码指定缓存时间,如上例中将200,302应答缓存一小时,301应答缓存1天,其他为1分钟。
keepalive_timeout  650;#保持连接时间,单位:秒,超过该时间,服务器会关闭连接
#fastcgi_cache_min_uses 1; #缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数,如上例,如果在5分钟内某文件1次也没有被使用,那么这个文件将被移除。
    include /var/nginx/conf.d/*.conf;
}




然后在conf.d下面建立文件,gzip.conf

# HttpGzip模块配置,这个模块支持在线实时压缩输出数据流
/****
gzip(GNU-ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,
用户浏览页面的时候速度会块得多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就 是服务器端压缩,
传到浏览器后浏览器解压并解析。浏览器那里不需要我们担心,因为目前的巨 大多数浏览器都支持解析gzip过的页面。
何种场景下使用,主要看gzip_type
***/
    gzip on; #开启gzip压缩输出,该指令用于开启或关闭gzip模块
gzip_min_length 1k; #最小压缩文件大小;设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。
  默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大
gzip_buffers 4 16k; #压缩缓冲区;设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位, 安装原始数据大小以16k为单位的4倍申请内存;
gzip_http_version 1.0; #识别http协议版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)
gzip_types text/plain application/x-javascript text/css application/xml;#匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。
gzip_vary on;#和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
#gzip_disable "MSIE [1-6]."   #指定版本浏览器不压缩



再建一个文件,用来跑自己代理的服务:
upstream  img {
server  192.168.1.1:82 weight=1 max_fails=2 fail_timeout=2;
server  192.168.1.2 weight=2 max_fails=2 fail_timeout=2;
}
server {
listen 81;
location / {
proxy_pass http://img;
}
}
server {
listen  82;
     proxy_connect_timeout 60000;
        proxy_read_timeout 60000;
        proxy_send_timeout 60000;
        charset UTF-8;
        proxy_max_temp_file_size 0;
        index default.jpg;
     root  /nx/upload/file;
     #limit_conn   crawler  20;    
     error_page  404              /default.jpg;
     error_page  500              /default.jpg;
     error_page  403           /default.jpg;
location ~* /500x500(.*)\.(gif|jpg|jpeg|png|bmp|swf)$         
      {      
      root /nx3200/upload/file500x500;            
      expires      30d;         
      }     
        
      
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
 {
error_page 404 = /default.jpg;
expires      30d;
}
  
location ~ .*\.(js|css)?$
{
 expires      1h;
    
}
location ~ ^/(WEB-INF)/
{
deny all;
}
}

再建一个文件命名为 common.conf中配置了http模块中公用信息
include       mime.types;
    default_type  application/octet-stream;     
    log_format  main  '|$remote_addr|- |$http_cookie| - |$remote_user| [$time_local]| '
                      '"$request" |$status| $body_bytes_sent| "$http_referer"| '
                      '|"$http_user_agent"| |"$http_x_forwarded_for"|';
    #access_log  off
    access_log  logs/access.log  main buffer=32K;   
    server_tokens off;
    client_max_body_size  20m;                                                          
    client_header_buffer_size    32K;                                                   
    large_client_header_buffers  4 32K;                                                 
    sendfile        on;                                                                 
    tcp_nopush     on;                                                                  
    tcp_nodelay     on;                                 
    client_header_timeout  30;                                                          
    client_body_timeout    30;                                                          
    send_timeout          30;
    keepalive_timeout  65;    


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30129545/viewspace-1593447/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30129545/viewspace-1593447/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值