nginx优化

nginx优化

1)设置隐藏版本号:

[root@localhost 桌面]# vim /usr/local/nginx/conf/nginx.conf

http {

server_tokens off;                                 //添加此行。

......

}

[root@localhost 桌面]# curl -I 192.168.4.205  #客户端访问,不显示版本号

HTTP/1.1 200 OK

Server: nginx                                    //此处无版本号

2)更改nginx的默认用户

(默认是nobody,可以更改为一个特殊的用户如:ngx,用户可以任意但必须要存在,不要让其能登录不让有家目录,此处为nginx,特殊的)

在192.168.4.205上操作: //更改为nginx用户,但ps –elf 查看进程时主进程还是root,worker进程是nginx

方法1:修改配置文件

[root@localhost conf]# sed -i '1s#nobody#nginx#g' nginx.conf

[root@localhost conf]# cat /usr/local/nginx/conf/nginx.conf |head -1

user nginx;

3)配置nginx worker进程,配置高并发

(192.168.4.205)并且让多个进程负载均衡,nginx最大连接数计算

nginx最大连接数=worker进程个数*单个进程最大连接数

在高并发场景,我们需要事先启动更多的nginx进程以保证相应并处理用户的请求,但进程数太多了机器受不了,所以有个平衡点,建议:和cpu数量相等或是是cpu个数的2倍。

生产环境参数参考

[root@localhost 桌面]# vim /usr/local/nginx/conf/nginx.conf

worker_processes  4;                      #默认是1,修改为等于cpu的个数或核数,或者是2倍

events {

    worker_connections  65535;            #单个work进程的最大连接数,默认是1024,有的到65535,太大

}

4)Nginx事件模型优化:(建议使用epoll模型)

Linux使用epoll事件模型更好点,epoll事件模型类似于以索引的方式去查找,提高效率。配置如下:

[root@localhost 桌面]# vim /usr/local/nginx/conf/nginx.conf

events {

    worker_connections  65535;

    use epoll;                 //添加,指定时间模型为epoll

}

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

配置文件中如果定义了非常长的域名、或大量的域名,就需要在http配置块调整server_names_hash_max_size和server_names_hash_bucket_size的值。(默认值都是32或64,一般默认的也不算小,如果小了会报错,这时可以把值调大些,可选优化,在http标签里面设置)

[root@localhost 桌面]# vim /usr/local/nginx/conf/nginx.conf

http {

    server_names_hash_bucket_size 512;                 //添加,默认kb,生产参数:128

    server_names_hash_max_size 512;                    //添加,默认kb

    ...............

}

6)设置Nginx连接超时时间

keepalive_timeout 65; //设置客户端连接保持会话超时时间,超过该时间,服务器会关闭该连接.太大影响并发。客户端还没连接上服务器的超时

client_header_timeout 15;  //设置客户端请求头读取超时,如超返回408错误。客户端已经连接上服务器,但一直不发数据的超时。(请求header)

client_body_timeout 15; //设置客户端请求主体读取超时,如超时会有408错误。客户端已经连接上服务器,但一直不发数据的超时。(请求body)

send_timeout 300;      //指定应客户端的超时时间。如果超过该时间,客户端没有任何活动,nginx将关闭连接。

上面都是放在http标签里面即可。

7) Nginx设置fast-cgi调(lnmp调用php时参数,和php结合时)

fastcgi_connect_timeout 300;  //指定连接到后端fast-cgi的超时时间(还未连接上fast-cgi,连接的超时)

fastcgi_send_timeout 300;    //向fast-cgi传送请求的超时时间,(已经连接上fast-cgi,发送数据的超时)

fastcgi_read_timeout 300;    //指接收fast-cgi应答的超时时间,(已经连接上fast-cgi)

fastcgi_buffer_size 64k;     //指定读取fast-cgi应答第一部分需要用多大的缓冲区(1个64k的缓冲区)

fastcgi_buffer_size 4 64k;     //指定读取fast-cgi应答第一部分需要用多大的缓冲区(4个64k的缓冲区)

fastcgi_busy_buffers_size 128k;  //fast-cgi繁忙是buffer缓冲区给多大(128k)

fastcgi_temp_file_write_size 128k;  //写入fast-cgi临时文件时用多大数据块(128k)

location ~ \.php$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi_params;

        }

8)Nginx设置上传文件大小限制(动态应用(php结合时候)

client_max_body_size  10m;         //客户端发送的最大内容的大小,根据业务调整。次参考为10M,如果是0就不检查,不限制。当然上传附件还到php的限制,默认php配置文件中大小2M,还需要修改一下值大小

   location ~ \.php$ {

            root           html;

            ...................

            client_max_body_size  10m;     //添加

        }

9) Nginx设置gzip压缩功能

压缩文件可以减少带宽,提高效率,但是会消耗CPU,所以不是所有的东西都要压缩,只是把压缩比高的内容进行压缩(压缩比高的:文本、普通的数据文件、程序文件(js,css,html))

不要压缩的内容:图片、视频、flash,特别小的内容也不要压缩,可能越压越大。

gzip  on;               //释放压缩功能

gzip_min_length 1k;      //压缩最小字节数,小于1k就不压缩了。建议设置成大于1k,小于1k可能越压越大。

gzip_buffers  4  16k;    //压缩时候放在缓存里压缩,打开4个单位为16k的内存作为压缩结果流缓存。

gzip_comp_level 2;       //压缩比率,用来指定压缩比,1比率最小,9压缩比最大,压缩比大的消耗cpu资源。

gzip_types  text/plain  application/x-javascript  text/css  application/xml;  //指定压缩的类型

gzip_vary on;    //让前端的缓存服务器缓存经过gzip压缩的页面。服务器压缩后先给前面缓存,这时先不解压,经过缓存后到最终客户才解压。

10) Nginx设置expires缓存功能 (expire过期)

在网站开发和运营中,对于图片、css,js等元素更改机会较少,特别是图片,这时可以将图片设置在浏览器本地缓存365天或更长,css,js,html等代码缓存10天,这样用户第一次打开页面后,会在本地的浏览器缓存相应的上述内容,这样的缓存可以提高下次用户打开类似页面的加载速度,并节省服务器的端大量的带宽。

设置expire好处:a)第一次访问以后,访问网站快,体验好。b)j节省网站带宽,节约成本。c)服务器压力降低,节约成本。

坏处:网站如果改版对应的用户看到的还是旧的。(包括:js,css,图片)

[root@localhost 桌面]# vim /usr/local/nginx/conf/nginx.conf

http {

    ................

    server {

        listen       80;

        server_name  bbs.etiantian.org;

        location / {

            root   html;

            index  index.html index.htm;

        }

        .........................

        location ~ .*\.(gif|jpg|png|bmp|swf)

        {

          expires 3650d;                                     //图片expire过期时间设置为:10年

          root html/bbs;

        }

        location ~ .*\.(js|css)?$

        {

          expires 30d;                                      //js、css程序expire过期时间设置为:30天

          root html/bbs;

        }

    }

}

11) Nginx设置防爬虫robot user_agent

[root@localhost 桌面]# vim /usr/local/nginx/conf/nginx.conf       //防爬虫设置

http {

    ..................

    server {

        listen       80;

        server_name  localhost;

        location / {

            root   html;

            index  index.html index.htm;

        }

        if ($http_user_agent ~* "qihoobot|Babiduspider|Googlebot|Googlebot-Mobile|\

        Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google| Yahoo! Slurp| \

        Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")                                                             //防止这些网站爬虫爬我的nginx网站

        {

        return 403;

        }

   }

}

12)在192.168.4.5上:nginx上配置防盗链技术。(返回403)

[root@localhost 桌面]# vim /usr/local/nginx/conf/nginx.conf

http {

    ................

    server {

        listen       80;

        server_name  www.baidu.com;

        location / {

            root   baidu;

            index  index.html index.htm;

        }

        location /image {                     //该行也可换为:location ~*\.(jpg)$ {

            root baidu;

            valid_referers none blocked www.baidu.com;

            if ($invalid_referer) {

                return 403;

            }

        }

    }

}

注意:上面的防盗链location匹配也可写成下面形式,下面形式比较全面,可以根据不同情况选择匹配即可。

location ~*\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {

            root baidu;

            valid_referers none blocked www.baidu.com;

            if ($invalid_referer) {

                return 403;

            }

        }

13)nginx日志轮询切割优化(编写日志切割脚本)

[root@localhost 桌面]# vim /shell/cut_nginxlog.sh                 //编写日志切割脚本,以www虚拟主机为例

#!/bin/bash

cd /usr/local/nginx/logs/ && \

/bin/mv www.access.log www.access_$(date +%F -d -1day).log

/usr/local/nginx/sbin/nginx -s reload

[root@localhost 桌面]# crontab -l

00 00 * * * /bin/sh /shell/cut_nginxlog.sh >/dev/null 2>&1

14)nginx设置不记录不需要的访问日志

对于健康检查或某些图片,js,css的日志,一般不需要记录,因为在统计pv时是按照页面计算。而且日志写入频繁会消耗磁盘IO,降低服务性能。把下面内容加到server 虚拟主机里面就可以。

location ~ .*\.(js|jpg|JPG|JPEG|css|bmp|gif|GIF)$ {

    access_log  off;

}

15) nginx设置错误页面的优雅显示

[root@localhost 桌面]# vim /usr/local/nginx/conf/nginx.conf

location / {

            root   html;

            index  index.html index.htm;

        }

        error_page  404              /404.html;           //默认,也可自己设计

        error_page   500 502 503 504  /50x.html;          //默认,也可自己设计

        location = /50x.html {

            root   html;

        }

16)nginx伪静态优化设置(具体实施,见单独的nginx伪静态项目

把相应网站页面的nginx模块的rewrite规则内容粘贴到nginx站点目录的.htaccess文件中。(注意也可是别的名字,如a,下面调用时要与此名字一致,上下一致就行,此处用这个名字可能要用一个功能。也可是其他名字)

[root@localhost 桌面]# vim /usr/local/nginx/bbs/.htaccess

rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;

rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last;

rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;

rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;

rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;

rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;

rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;

rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;

rewrite ^([^\.]*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ $1/plugin.php?id=$2:$3 last;

if (!-e $request_filename) {

       return 404;

}

修改nginx配置文件,调用上面的伪静态规则(rewrite规则)

[root@localhost 桌面]# vim /usr/local/nginx/conf/nginx.conf

http {

    ...............

    server {

        listen       80;

        server_name  bbs.etiantian.org;

        location / {

            root   bbs;

            index  index.php index.html index.htm;

        include /usr/local/nginx/bbs/.htaccess;     //此处要和上面的对应,也可是别的名字,只要对应就行

        }

        location ~ \.php$ {

            root           bbs;

            ...................

        }

   }

}

wq

[root@localhost 桌面]# /usr/local/nginx/sbin/nginx -s reload

17) 限制来源IP访问使用ngx_http_access_module限制

禁止让某目录让外界访问,但允许某IP访问该目录且支持php解析。

如:

location  ~ ^/oldboy/ {

allow 192.168.4.205;

deny all;

}

location ~ .*\.(php|php5)?$ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

限制指定IP或IP段访问:

location / {

deny  192.168.4.205;

allow 192.168.4.0/24;

allow 172.10.10.0/34;

deny all;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维实战课程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值