nginx配置文件大解析(优化)

配置文件的设置包含:

main          全局设置
            server        主机设置
            upstream      负载均衡服务器设置
            location      部分用于匹配网页设置
关系:      server继承main;
            location继承server;
            upstream不会继承也不会被继承



1、 user  nginx1;

#运行用户和组;默认用户为nobody;
   
    nginx1   10820 10787  0 12:28 ?        00:00:00 nginx:



2、 worker_processes  16;

#工作进程数,建议设置为等于CPU总核心数

ps -ef 时注意观察worker_processes



3、 worker_rlimit_nofile  4096;

#每个进程打开的文件句柄数=系统总数/4 不要设置成65535



4、 error_log  /usr/log/nginxa1/logs/error.log  warn;
    #全局错误日志存放路径;级别:debug | info | notice | warn | error | crit



5、 pid        logs/nginx.pid;

#pid文件;



6、     #工作模式及连接数上限
        events {
        #每个进程的最大连接数,不要动不动就65535;
        worker_connections  4096;
        #使用epoll(linux2.6的高性能方式)
        use epoll;
                }

#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    #使用epoll(linux2.6的高性能方式)



7、#设定http标签,利用它的反向代理功能提供负载均衡支持
    http {
        #mimie.types 浏览器请求的文件媒体类型

include       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"‘;
         
        $remote_addr直接客户端地址
        $http_x_forwarded_for 间接客户端地址(一般前面会有代理服务器)
        $remote_user 远程客户端用户名称
        $time_local记录访问时间与时区
        $request用户的请求,使用的HTTP协议
        $status 返回状态,200,404,304等
        $body_bytes_sents发送的body字节数
        $http_referer 引用页(从哪个链接访问来的)
        $http_user_agent客户端浏览器

#设置请求日志
        access_log  /usr/log/nginxa1/logs/access.log  main;

#include指令,可以包含任何你想要包含的配置文件,支持文件名匹配。
        #include extra/bbs.conf;[[email protected] scripts]# cat cut_log.sh

#日志切割脚本范例:

cd /application/nginx/logs
        mv www_access.log  www_access_$(date +%F -d -1day).log
        /application/nginx/sbin/nginx -s reload
        [[email protected] scripts]# crontab -l|tail -2
        #cut nginx log by day by oldboy at 201409
        00 00 * * *  /bin/sh  /server/scripts/cut_log.sh >/dev/null 2>&1

#日志分析软件:syslog、rsyslog、Awstats(svn文档)、flume、logstash、scrilbe、kafka、



8、    设定请求缓冲

#接收header的缓冲区大小
        client_header_buffer_size    128k;

该指令用于设置客户端请求的Header头缓冲区大小,默认值为4KB。

large_client_header_buffers  4 256k;

#客户端包体缓冲区大小
        client_body_buffer_size 1024k;

#设置客户端能够上传的文件大小,默认为1m

client_max_body_size 8m;

sendfile on;

#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改 成off。

#开启目录列表访问,合适下载服务器,默认关闭。

autoindex on;

#防止网络阻塞

tcp_nopush on;

#防止网络阻塞

tcp_nodelay on;

#长连接超时时间,单位是秒

keepalive_timeout 120;

#默认编码
        #charset GBK;

#长连接保持时间
        keepalive_timeout  120;

#不显示Nginx版本号
        server_tokens off;

#服务器名字的hash表大小

server_names_hash_bucket_size  64;
        server_names_hash_max_size: 512



9、#开启gzip模块,要求安装gzip 在运行./config时要指定
        gzip on;

#最小压缩文件大小,默认0
        gzip_min_length  1100;

#压缩缓冲区
        gzip_buffers    4 16k;

#压缩类型
        gzip_types  text/plain application/x-javascript text/css application/xml;

#压缩比率,1压缩比最小速度最快;9压缩比最大,传输快,但速度慢,比较消耗cpu资源;
        gzip_comp_level  9;

#压缩通过代理的所有文件
        gzip_proxied     any;
        #vary header支持

#前端服务缓存压缩

gzip_vary        on;

#压缩版本(默认1.1,前端为squid2.5使用1.0)
        gzip_http_version 1.0;

#输出缓冲区
        output_buffers  4 32k;
        postpone_output  1460;

#此功能同apache的mod_deflate压缩功能,依赖ngx_http_gzip_module模块,默认已安装



10、代理设置;
       
        #代理连接超时时间
        proxy_connect_timeout  120;

#代理发送超时时间
        proxy_send_timeout  120;

#代理读超时时间
        proxy_read_timeout  120;

#设置从后端被代理服务器的响应内容缓冲区大小
        proxy_buffer_size  512k;

#开启从后端被代理服务器的响应内容缓冲.
        proxy_buffering on;

#设置从被代理的后端服务器取得的响应内容缓冲区的大小和数量
        proxy_buffers 32 512k;  
    
        #客户端发送header超时
        client_header_timeout  3m;

#客户端发送内容超时
        client_body_timeout    3m;

#发送到客户端超时
        send_timeout           3m;

#proxy_buffers缓冲区,网页平均在32k以下的设置

proxy_buffers 4 32k;

#高负荷下缓冲大小(proxy_buffers*2)

proxy_busy_buffers_size 64k; #

#设定缓存文件夹大小,大于这个值,将从upstream服务器传

proxy_temp_file_write_size 64k;

负载均衡器发给web_server的优化;
        参数如下:
        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;



11、根据cpu核数优化优化进程数;

查看cpu核数
    grep "physical id " /proc/cpuinfo
    physical id    : 0
    address sizes    : 40 bits physical, 48 bits virtual
    physical id    : 0
    address sizes    : 40 bits physical, 48 bits virtual

调度硬件分配
      不同的cpu对应配置参考如下
      四核cpu服务器参数配置:
      worker_cpu_affinity 0001 0010 0100 1000;
      #nginx进程CPU亲和力,即把不同的进程分给不同的CPU处理。这里0001 0010 0100 1000是掩    码,分别代表第1、2、3、4颗cpu核心。
      八核cpu服务器参数配置:
      worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
      worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;

taskset   调整cpu分配  
      另外(taskset - retrieve or set a process’s CPU affinity)命令本身也有分配CPU的功能。

例如:taskset -c 1,2,3 /etc/init.d/mysql start
      资料:http://www.cnblogs.com/edwardlost/archive/2010/10/23/1858991.html



12、fastcgi 参数调整  秒
 
    fastcgi调优(配合PHP引擎动态服务)

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 16k”、“4 64k”等。

fastcgi_busy_buffers_size 128k;
   #建议为fastcgi_buffers的两倍

fastcgi_temp_file_write_size 128k;
   #在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,设置上述数值设置太小时若负载上来时可能报 502 Bad 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参数值时间内的最少使用次数

####进程交互会产生零时文件



13、upstream的负载均衡

upstream xxxx.xx.net{
              #weigth参数表示权值,权值越高被分配到的几率
              #sru_id=a:index=1 ,srun_id=b:index=2, srun_id=c:index=3,srun_id=d:index=4
              server  10.110.5.81:8081 max_fails=3 fail_timeout=30s srun_id=a;
              server  10.110.5.82:8081 max_fails=3 fail_timeout=30s srun_id=b;
              server  10.110.5.83:8084 max_fails=3 fail_timeout=30s srun_id=c;
              server  10.110.5.84:8084 max_fails=3 fail_timeout=30s srun_id=d;
              #保证按照seesion分发
              jvm_route $cookie_JSESSIONID|sessionid;
              #jvm_route $cookie_JSESSIONID|jsessionid;
         }

#weight=NUMBER ——设置服务器的权重,权重数高被分配访问数越高,默认权重1.
        #max_fails=NUMBER——在参数fail_timeout指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失败。默认值为1.设置为0这关闭这项检查
        #fail_timeout=TIME——在经历参数max_fails设置的失败次数后,暂停的时间
        #down——标记服务器为永久离线状态,用于ip_hash指令
        #backup——仅仅在非backup服务器全部繁忙的时候才启动
       
        #upstream模块拥有以下变量:
        # $upstream_addr:处理请求的upstream服务器地址
        # $upstream_status:upstream服务器的应答状态
        # $upstream_response_time:Upstream服务器响应时间(毫秒),多个响应以逗号和冒号分隔。
        # $upstream_http_$HEADER:任意的HTTP协议头信息,例如:$upstream_http_host



14、第一个虚拟服务器
      server {
        #侦听192.168.8.x的80端口
        listen       80;

#主机名地址,可以是ip,或者主机名,多个空格隔开
        server_name  10.10.70.x www.xxx.com;

#定义服务器的默认网站根目录位置

root   html/bbs;

#定义首页索引文件的名称

index index.php index.html index.htm;

}



15、设定查看状态标签status

server {
                listen       80;
                server_name  status.xxx.org;
                stub_status on;
                access_log      off;

}



16、301重定向

server {
        listen       80;
        server_name  blog.etiantian.org;
        root    html/blog;
        index index.html index.htm;
     rewrite ^/(.*) http://www.etiantian.org/$1 permanent;
}
    #访问域名下的所有内容跳转到www.etiantian.org /前为域名;

#为防止别人恶意绑定域名可以使用ip地址重定向;
    #输入ip访问的是第一个域名;
    #.*为内容;$接受;permanent表示永久跳转;



17、expires 缓存功能
    #针对网站运营中的(不经常变化的)图片推送到客户端的浏览器进行缓存;
    优势: 节省宽带 ;减少服务器压力,支持高的并发;浏览器加快,提升用户体验;
    劣势: 网站跟新内容后客户端可能是旧的;测试的时候希望是新的,总是看不到;广告。统计的代码不准确。
    解决劣势
    根据业务需求设置expires的过期时间;
    图片更改(重新上传); 时间1年-10年
    广告,统计,不缓存 ;
    网站改版 元素要改名js ,css ;
    缓存cdn的资源  (***图片) 清理源站图片;让其清理缓存。 (接口 API 或者是web界面管理)

例 :location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
          expires      3650d;
    }
    location 满足条件执行。满足.执行...
    范例2:
    location ~ .*\.(js|css)?$
    {
          expires      30d;
    }
   #server标签里;date -s ""  修改时间 hwlock -c 写入系统时间;



18、防盗链

location

#表示对哪种类型的文件实行防盗链
    ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {

valid_referers
    none blocked *.yiibase.com yiibase.com;

#来源判断;

if($invalid_referer)
        {

#rewrite
    ^/ http://www.xxx.com/error.html;

#返回结果,可以指定具体的图片;

return403;

}

}



19、url访问控制(文件、图片、ip都可以设置):

location ~ ^/images/.*\.(php|php5)$  
#图片
            {
                  deny all;
    location ~ ^/static/.*\.(php|php5)$
               }
         {
                   deny all;
            }
    location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$
#附件和头像        
{
            deny all;
        }

location /admin/ { return 403; }
              location /templates/ { return 403; }
#返回状态返回码;location是有顺序的,根据规则调整;



20、伪静态:

待补~~!!!



21、robot.txt 机器人设置

查看: http://www.baidu.com/robots.txt

使用:网站的收录几率降低;

不使用:降低网站的资源消耗;

范例:根据不同的浏览器访问设置:

if ($http_user_agent ~* "Firefox|MSIE")
    {
    return 403;
    }


22、保证网站不遭受木马侵入

1、站点内所有目录和文件的用户和组都因该为root!
    2、站点内所有目录权限默认为755;(不能往目录放文件)
    3、站点内所有文件权限默认为644;(不能改文件)
    注意 网站服务的程序使用的用户不可以使用root。
    解决方案:找到上传的目录,授权nginx 可以访问;比较安全!
    架构上优化:动态web集群  (架三个web服务,正常浏览、上传、下载各一个服务器)适合所有的web服务器 ;
    mount 挂载优化  : mount -o nosuid,noexec,nodev

时间: 2024-07-30 21:38:42

nginx配置文件大解析(优化)的相关文章

nginx配置文件大解析

配置文件的主要组成部分:      1) main配置段 2) http {       } 3) mail 配置指令要以分号结尾,语法格式:directive valuel [value2...]; 支持使用变量: 1)模块内置变量; 2)自定义变量;set var_name value 主配置段的指令的类别:            1)用于调试.定位问题            2)正常运行必备的配置            3)优化性能的配置            4)事件相关的配置 正常运行

nginx 配置文件解释及优化安全

worker_processes  4;                                           # 根据核数选择 worker_cpu_affinity   0001 0010 0100 1000;                     # 绑定nginx worker进程到不同的cpu worker_rlimit_nofile    65535;                                 # 每个worker进程打开最大打开文件数(受系统限

Nginx配置文件、优化详解

上篇<编译安装nginx>已将nginx安装好,这篇写nginx配置文件和部分优化参数. 查看nginx的配置文件路径,可以使用nginx配置文件检查命令nginx -t: 1 [[email protected] ~]# nginx -t 2 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok #编译安装后的nginx配置文件路径3 nginx: configuration file /etc/nginx/ngin

Nginx配置文件的优化

Nginx配置文件中需要优化的参数为以下几项: worker_processes 8; Nginx配置文件进程数,可以按照cpu数目来指定,一般为它的倍数. worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; 为每个进程指定一个cpu,上例中将8个进程分配到8个cpu,也可以将一个进程分配到多个cpu. worker_rlimit_nofile 102400; N

[NGINX] - 配置文件优化 - NGINX.CONF

Nginx 本文主要针对公司的Nginx负载均衡配置进行解释,配置文件在最下方.因为公司没有使用PHP,所以NGINX里面并没有太多facgi模块相关优化  NGINX.CONF user 语法: user user[group]; 标签: main 定义user和工作group 进程使用的凭证.如果group省略,user则使用名称等于的组. worker_processes 1 句法: worker_processes number | auto; 2 默认: worker_processe

Nginx的配置文件(nginx.conf)解析

步骤一:vi nginx.conf配置文件,参考本博文的最下面总结,自行去设置 最后nginx.conf内容为 步骤二:每次修改了nginx.conf配置文件后,都要reload下. index.html里写入如下内容 步骤三: 先来配一个路由映射 因为,我们的nginx.conf为 以上, 是基于域名的虚拟主机的nginx.conf配置.    当然,我们也可以基于端口的虚拟主机的nginx.conf配置 当然,我们也可以基于ip的虚拟主机的nginx.conf配置 当然,我们用完之后,你也可

Nginx配置文件优化详解

Nginx配置文件优化详解 对nginx进行优化是重点也是难点,这里给出一些常用的优化措施,以及相关参数的所代表的意思.有些参数需要结合公司服务器进行设置. 全局变量的优化: #定义Nginx运行的用户和用户组user  www  www: #启动进程,通常设置成和cpu的数量相等 worker_processes  8: #为每个进程分配cpu. worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 

nginx指令中的优化(配置文件)

nginx指令中的优化(配置文件)worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数.worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; 为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu.worker_rlimit_nofile 102400; 这个指令是指当一个

解析Nginx配置文件

Nginx安装完毕后,会产生相应的安装目录,根据前面的安装路径,Nginx的配置文件路径为/opt/nginx/conf,其中nginx.conf为Nginx的主配置文件.这里重点介绍下nginx.conf这个配置文件. Nginx配置文件主要分成四部分:main(全局设置).server(主机设置).upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置).main部分设置的指令将影响其他所有设置:server部分的指令主要用于指定主机和端口:upstream指令