企业级nginx服务优化合集

企业级nginx服务优化(一)

配置文件总结

nginx.conf      httpd.conf    httpd-vhosts.conf  httpd-mpm.conf

my.cnf          php.ini        php-fpm.conf



更改版本信息

curl -I 192.168.10.11

Server: nginx/1.6.3


第一种   修改版本及版本号

nginx编译前更改

src/core/nginx.h

#define nginx_version      1008001

#define NGINX_VERSION      "1.8.1"  #修改想要显示的版本如:2.2.23

#define NGINX_VER          "nginx/" NGINX_VERSION        #将nginx修改成想要显示的软件名称

#define NGINX_VAR          "NGINX" #将nginx修改成想要显示的软件名称(Evan Web Server)

#define NGX_OLDPID_EXT     ".oldbin"

src/http/ngx_http_header_filter_module.c

static char ngx_http_server_string[] = "Server: nginx" CRLF;  #将nginx修改为想要的版本

src/http/ngx_http_special_response.c

"<hr><center>nginx</center>" CRLF  #将nginx修改为想要的版本信息



第二种   隐藏版本号

nginx配置文件里增加 server_tokens off;

server_tokens作用域是http server location语句块

server_tokens默认值是on,表示显示版本信息,设置server_tokens值是off,就可以在所有地方隐藏nginx的版本信息。

http{

server_tokens off;

}

/application/nginx/sbin/nginx -s reload

nginx/1.6.3-----------------------变成了nginx   //404 Not Found



更改掉nginx的用户

grep "#user"    nginx.conf.default           //默认文件

#user  nobody;

1    vim   nginx.conf   //修改配置文件

user  nginx  nginx;

2   ./configure  --user=nginx   --group=nginx

ps -ef | grep nginx

root      56512      1  0 02:35 ?        00:00:00 nginx: master process      //主进程用root运行,可以更为nginx,端口必须大于1024

nginx     57470  56512  0 04:04 ?        00:00:00 nginx: worker process 




配置nginx worker进程个数

worker_processes  1;          //等于CPU的核心数       cat /proc/cpuinfo |grep -c processor 查CPU

更改为

worker_processes  2;    查看

nginx      1822   1784  0 04:14 ?        00:00:00 nginx: worker process

nginx      1823   1784  0 04:14 ?        00:00:00 nginx: worker process



配置worker_cpu-affinity 

worker_processes  2;

worker_cpu_affinity    0101  1010;              //把每个work进程分配到单独的CPU核数上

worker_processes  4;

worker_cpu_affinity    0001  0010 0100 1000 

worker_processes  8;

worker_cpu_affinity    0001  0010 0100 1000  0001 0010 0100 1000



安装压力测试软件  webbench

wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz

tar zxf webbench-1.5.tar.gz

cd webbench-1.5

make && make install

webbench -c 20000  -t 180  http://192.168.10.11/     // -c 表示客户端数,-t 表示时间

taskset - retrieve or set a process’s CPU affinity

taskset  -c  1,2,3   /etc/init.d/mysql  start  //某个进程跑在某个CPU上



事件处理模型优化  在linux下epoll模型

events {  //设定nginx工作模式及连接数上限

      use    epoll;

        worker_connections  20480;    //每个进程的最大连接数,默认1024

}

Max_client=worker_processes*worker_connections;   最大数

进程的最大连接数受系统进程最大打开文件数限制,执行ulimit -HSn 65535,或者配置相应文件的   worker_connections的设置后生效。

worker_rlimit_nofile    65535;      //每个进程最大文件打开数  主标签段



优化服务器名字hash表大小

http://hequan.blog.51cto.com/              //泛解析

http{

server_names_hash_bucket_size   64;

server_names_hash_max_size  512;              //默认为512,一般为CPU L1的4-5倍

}



开启高效的文件传输模式

sendfile  on;

tcp_nopush   on;



连接超时时间      // php服务建议 短连接


keepalive_timeout     60;               //客户端连接保持会话的超时时间

tcp_nodelay    on;

client_header_timeout  15;    //客户端请求头读取超时时间,超过不发送数据,返回408错误

client_body_timeout  15;      //主体

send_timeout    15;    // 响应客户端的超时时间



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

client_max_body_size   10m;           //客户端最大上传               超过了报413错误    0是不检查  php默认2m



fastcgi 调优  

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

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

include        fastcgi.conf;

}

fastcgi_connect_timeout   300;   //连接

fastcgi_send_timeout   300;    //传送请求

fastcgi_read_timeout   300;  //应答

fastcgi_buffer_size   64k;   //缓冲区

fastcgi_buffer     4      64k;            //       多少个 多大的缓冲区

fastcgi_busy_buffer_size   128k;

fastcgi_temp_buffer_size   128k;

fastcgi_cache   hequan_nginx

fastcgi_cache_valid   200 302  h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any  1m;

fastcgi_cache_min_uses  1;


drwx------ 12 nginx root 4096 4月   5 04:32 fastcgi_temp   // 临时文件



企业级nginx服务优化(二 )

配置nginx  gzip压缩功能

gzip  on;

gzip_min_length   1k;     // 大于1K才压缩

gzip_buffers    4  32k;   // 压缩缓存区大小

gzip_http_version  1.1;

gzip_comp_level  9;   //压缩比率  1-9

gzip_types     text/css  text/xml  application/javascript ;       // 压缩类型,不同版本,类型不一样,

gzip_vary on;   //  vary  header支持



测试软件  unzip test_deflate.zip    火狐流量器加载yslow插件,可以查看缓存结果



 include         mime.types;

# cat        conf/mime.types           //版本不一样,类型不一样

types {

    text/html                             html htm shtml;

    text/css                              css;

    text/xml                              xml;

    image/gif                             gif;

    image/jpeg                            jpeg jpg;

    application/javascript                js;

    application/atom+xml                  atom;

    application/rss+xml                   rss;



apache  mod_deflate  //  编译时  --enable-deflate  



nginx  expire缓存功能      在客户端本地保存多久    在server标签里


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

        {

        expires    3650d;

}

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

        {

        expires 30d;

}


实例:

location ~(robots.txt) {                  //  为robots.txt 为7天并不记录404

          log_not_found  off;

          expires    7d;

          break;

}     


apache


./configure   --enable-expires   


cd /httpd-2.2.22/modules/metadata/              //切到apache 软件目录

/application/apache/bin/apxs  -c -i -a mod_expires.c     // 已dso的方式编译到apache

ll   /aplication/apache2.2.22/modules/mod_expires.so      //检查



http://www.51cto.com/robots.txt     /// 写这样的一个文件

User-agent: *
Crawl-delay: 500
Disallow: /wuyou/
Disallow: /php/
Disallow: /wuyou_admin/

Disallow: /actions/

修改nginx.conf,禁止网络爬虫的ua,返回403。

server {

listen 80;

server_name 127.0.0.1;

#添加如下内容即可防止爬虫

if ($http_user_agent ~* "qihoobot|Baiduspider|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")

{

return 403;    //也可以把上面改成浏览器,禁止浏览器访问

}



配置nginx 日志切割脚本          sysog日志分析         crontlog

日志切割

cd   /application/nginx/logs  &&  \

/bin/mv www_access.log  www_access_$(date  +%F  -d  -1day).log

/application/nginx/sbin/nginx -s reload

crontab -e

00 00 * * *   /bin/sh  /server/scripts/cut_nginx_log.sh    >/dev/null    2&1


不记录不需要的访问日志

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

     {     access_log  off;

}

drwxr-xr-x 2 root root 4096 5月   5 21:09 logs/           //主进程是root 是可以写入logs



最小化apache目录及文件权限

  • 所有站点目录的用户和组都应为root
  • 所有目录权限是755
  • 所有文件权限是644

网站服务的用户不能用root 




限制ip访问

locaion ~  ^/hequan/ {

allow 192.168.10.0/24;

deny all;

}



报错显示

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}


-rw-r--r-- 1 root root   537 4月   3 19:53 50x.html



tmpfs是一种基于内存的文件系统

vim  /etc/rc.local

mount -t tmpfs -o size=16m  tmpfs  /tmp

vim /etc/fstab


df -hT 

Filesystem           Type   Size  Used Avail Use% Mounted on

tmpfs                tmpfs  100M     0  100M   0% /tmp



php_flag  engine  off  //  apache不解析PHP



企业级nginx服务优化(三 )Apache+防盗链

apache   worker/prefork

 /application/apache/bin/apachectl -l | sed -n ‘/worker\|prefork/p‘

  worker.c

Server MPM:     Worker

./configure    --with-mpm=worke  //编译时指定,,默认是prefork



prefork  默认

使用多个子进程,每个子进程只有一个线程

效率高,稳定,安全,比worker消耗资源多

vim  /application/apache/conf/extra/httpd-mpm.conf

<IfModule mpm_prefork_module>

StartServers        10               //服务启动进程数

MinSpareServers      10          //最小空闲数量

MaxSpareServers     15           //最大空闲数量

ServerLimit       2000

MaxClients          1000              //最大进程  并发

MaxRequestsPerChild   5000        //子进程处理的最大进程数           0=不限制

</IfModule>

ps -ef | grep http| grep -v grep | wc -l           //查看并发连接

6



worker    线程与进程的结合

vim  /application/apache/conf/extra/httpd-mpm.conf

<IfModule mpm_worker_module>

    StartServers          2             

    MaxClients           2000           //并发的客户端连接数量

    ServerLimit       25   //总进程数

    MinSpareThreads     50

    MaxSpareThreads     200

    ThreadLimit         200

    ThreadsPerChild        100   // 持续的每个服务器的工作线程数

MaxRequestsPerChild   0   // 单个子进程累计最多处理到少个请求,默认0,不限制的意思

</IfModule>


MaxClient <=  ServerLimit*  ThreadsPerChild

MaxClient %ThreadsPerChild  =0



cat /application/apache/conf/extra/httpd-default.conf

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 5

UseCanonicalName Off

AccessFileName .htaccess

ServerTokens Full

ServerSignature On

HostnameLookups Off



并发连接数

pstree -a | grep http |grep -v grep  | wc -l

110



apache  web 服务防盗链

<Directory "/usr/local/apache2/htdocs/cfan/pic/">

RewriteEngine  on

RewriteCond %{HTTP_REFERER} !^http://网站域名/.*$ [NC]

RewriteRule .*\.(gif|jpg)$   http://代替图标 [R,NC]

</Directory>


Nginx防盗链的配置

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

valid_referers none blocked *.hequan.com hequan z.com;

if ($invalid_referer) {

#rewrite ^/ http://www.hequan .com/403.html;

return 403;

}

}



企业级nginx服务优化(四 )伪静态+php.ini

apache伪静态

打开apache的配置文件httpd.conf

1.把#LoadModule rewrite_module modules/mod_rewrite.so前面的#去掉。

2.找到

#

# AllowOverride controls what directives may be placed in .htaccess files.

# It can be “All”, “None”, or any combination of the keywords:

# Options FileInfo AuthConfig Limit

#

AllowOverride None

把 AllowOverride None 改为 AllowOverride All



Discuz伪静态配置文件

Apache Web Server(独立主机用户)

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{QUERY_STRING} ^(.*)$
        RewriteRule ^(.*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2&%1
        RewriteCond %{QUERY_STRING} ^(.*)$
        RewriteRule ^(.*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3&%1
        RewriteCond %{QUERY_STRING} ^(.*)$
        RewriteRule ^(.*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3&%1
        RewriteCond %{QUERY_STRING} ^(.*)$
        RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page\%3D$4&page=$3&%1
        RewriteCond %{QUERY_STRING} ^(.*)$
        RewriteRule ^(.*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3&%1
        RewriteCond %{QUERY_STRING} ^(.*)$
        RewriteRule ^(.*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3&%1
        RewriteCond %{QUERY_STRING} ^(.*)$
        RewriteRule ^(.*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3&%1
        RewriteCond %{QUERY_STRING} ^(.*)$
        RewriteRule ^(.*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3&%1
        RewriteCond %{QUERY_STRING} ^(.*)$
        RewriteRule ^(.*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ $1/plugin.php?id=$2:$3&%1

</IfModule>



正则表达式匹配,其中:

代码如下:

* ~ 为区分大小写匹配

* ~* 为不区分大小写匹配

* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

文件及目录匹配,其中:

* -f和!-f用来判断是否存在文件

* -d和!-d用来判断是否存在目录

* -e和!-e用来判断是否存在文件或目录

* -x和!-x用来判断文件是否可执行

flag标记有:

* last 相当于Apache里的[L]标记,表示完成rewrite

* break 终止匹配, 不再匹配后面的规则

* redirect 返回302临时重定向 地址栏会显示跳转后的地址

* permanent 返回301永久重定向 地址栏会显示跳转后的地址



Discuz伪静态配置文件

Nginx Web Server

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;

}



CDN



php                 php.ini              php-fpm.com-------nginx+fcgi


php.ini

338 safe_mode = On                             // 安全模式打开

344 safe_mode_gid = Off

385 disable_functions = system,passthru,exec,shell_exec,popen,p hpinfo                       //关闭危险函数,如果打开的安全模式,就不用了

435 expose_php = Off                                 //关闭php版本信息在http头中的泄露

703 register_globals = Off                             //默认关闭全局环境变量

756 magic_quotes_gpc = On                         //打开    防止SQL注入

538 display_errors = Off                                          //错误信息关闭,测试时开启

           643 error_log = /app/logs/php_errors.log            // 上面打开,下面才可以

444 max_execution_time = 30                         //脚本最大允许执行时间 秒

465 memory_limit = 128M                                  //脚本申请到的最大内存字节数

454 max_input_time = 60                                  //脚本等待输入数据最长时间

891 upload_max_filesize = 2M                             //最大上传文件

894 max_file_uploads = 20                                    //1个请求最大上传文件数量

902 allow_url_fopen = Off              //禁止打开远程地址

854 cgi.fix_pathinfo=0                   //防止nginx文件类型错误解析漏洞

1461 session.save_handler = memcache

1490 session.save_path = "tcp://192.168.10.11:11211"       //为memcached数据库缓存的ip及端口



CGI      公共网关接口

PastCGI   php-fpm

php5.3以上: --enable-fpm

php5.2    --enable-fastcgi          --enable-fpm   --enalbe-force-cgi

vim /application/php/etc/php-fpm.conf

pm = dynamic

pid =  /app/logs/php-fpm.pid

error_log = /app/logs/php-fpm.log

log_level = error

rlimit_files = 32768

listen.owner = nginx

listen.group = nginx

pm.max_children = 1024

pm.start_servers = 16

pm.min_spare_servers = 5

pm.max_spare_servers = 20

pm.process_idle_timeout = 15s;

pm.max_requests = 2048

slowlog = /app/logs/$pool.log.slow

request_slowlog_timeout = 10

时间: 2024-10-10 08:57:33

企业级nginx服务优化合集的相关文章

nginx重点优化合集一

nginx特色 支持高并发 资源消耗少 负载均衡 缓存功能 支持异步网络 nginx虚拟主机 worker_processes  1; events { worker_connections  1024; } http { include       mime.types; default_type  application/octet-stream; sendfile        on; keepalive_timeout  65; include  extra/www.conf; incl

企业级Nginx服务基础到架构优化详解--25条

1.隐藏nginx header版本号 2.更改源码隐藏软件名称 3.更改nginx默认用户及用户组 4.配置nginx worker进程个数 5.根据CPU核数进行nginx进程优化 6.nginx事件处理模型优化 7.调整Nginx worker单个进程允许的客户端最大连接数 8.配置Nginx worker进程最大打开文件数 9.开启高效的文件传输模式 10.设置连接超时时间 11.上传文件大小设置(动态应用) 12.fastcgi调优(配合PHP引擎动态服务) 13.配置nginx gz

企业级Nginx服务基础到架构优化详解

1.隐藏nginx header版本号 2.更改源码隐藏软件名称 3.更改nginx默认用户及用户组 4.配置nginx worker进程个数 5.根据CPU核数进行nginx进程优化 6.nginx事件处理模型优化 7.调整Nginx worker单个进程允许的客户端最大连接数 8.配置Nginx worker进程最大打开文件数 9.开启高效的文件传输模式 10.设置连接超时时间 11.上传文件大小设置(动态应用) 12.fastcgi调优(配合PHP引擎动态服务) 13.配置nginx gz

企业级nginx服务优化(一)

配置文件总结 nginx.conf      httpd.conf    httpd-vhosts.conf  httpd-mpm.conf my.cnf          php.ini        php-fpm.conf 更改版本信息 curl -I 192.168.10.11 Server: nginx/1.6.3 第一种   修改版本及版本号 nginx编译前更改 src/core/nginx.h #define nginx_version      1008001 #define

企业级nginx服务优化(二 )

配置nginx  gzip压缩功能 gzip  on; gzip_min_length   1k;     // 大于1K才压缩 gzip_buffers    4  32k;   // 压缩缓存区大小 gzip_http_version  1.1; gzip_comp_level  9;   //压缩比率  1-9 gzip_types     text/css  text/xml  application/javascript ;       // 压缩类型,不同版本,类型不一样, gzip

企业级nginx服务优化(三 )Apache+防盗链

apache   worker/prefork  /application/apache/bin/apachectl -l | sed -n '/worker\|prefork/p'   worker.c Server MPM:     Worker ./configure    --with-mpm=worke  //编译时指定,,默认是prefork prefork  默认 使用多个子进程,每个子进程只有一个线程 效率高,稳定,安全,比worker消耗资源多 vim  /applicatio

企业级nginx服务优化(四 )伪静态+php.ini

apache伪静态 打开apache的配置文件httpd.conf 1.把#LoadModule rewrite_module modules/mod_rewrite.so前面的#去掉. 2.找到 # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywor

企业级Web Nginx 服务优化

企业级Web Nginx 服务优化 http://blog.51cto.com/search/result?q=%E4%BC%81%E4%B8%9A%E7%BA%A7Web+Nginx+%E6%9C%8D%E5%8A%A1%E4%BC%98%E5%8C%96%285%29 企业级nginx服务优化合集 企业级nginx服务优化(一) 企业级nginx服务优化(二 ) 企业级Web Nginx 服务优化(1) 企业级Web Nginx 服务优化(2) 企业级Web Nginx 服务优化(3) 企业

web网站集群之企业级Nginx Web服务优化详解

1. 隐藏nginx版本信息优化(安全优化) 官方参考链接:http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens Syntax:  server_tokens on | off | build | string; Default: server_tokens on;(默认显示nginx服务版本) Context: http, server, location 实践配置: server { listen