nginx配置文件讲解和常用的nginx调优参数配置

nginx配置文件讲解和常用的nginx调优参数配置

# cat /usr/local/nginx/conf/nginx.conf |grep -v "^$"

-----------------------------下面是全局部分----------------------------------------------

user  nobody;        #启动nginx时候,以哪个用户身份来运行nginx,主进程是root,运行worker进程身份是这个

worker_processes  2;  #定义worker进程有几个,一般几核cpu就调成几核,每个cpu分配一个worker进程

error_log  logs/error.log crit;          #只记录重要的错误日志,根据情况使用

error_log  logs/error.log  notice;     #记录的错误日志类型多,简单的错误日志也记录,根据情况使用

#error_log  logs/error.log  info;

常见的错误日志级别有[debug|info|notice|warn|error|crit|alert|emerg],级别越高记录的信息越少,如果不定义默认是error.

worker_rlimit_nofile 100000;  #定义nginx最多打开文件数限制。建议设置为102400,前提示系统的也设置大点ulimit -n 102400

#如果没设置的话,这个值为操作系统(ulimit -n)的限制保持一致。

#把这个值设高,nginx就不会有“too many open files”问题了。

pid        logs/nginx.pid;            #定义nginx的pid号存放

-----------------------------下面是event事件模型部分-------------------------------------

events {

worker_connections  10000; #定义每个work_process同时开启的最大连接数,即允许最多只能有这么多连接。建议为10240,不建议太大。

                            #如果有2个worker进程,那么最多同时能开启的最大连接数是:10000*2=20000

                            #对于一般的一般设置10000就足够,如果百度等高并发网站,或许能设置3~5万都有可能.

accept_mutex on;  #某一个时刻只有一个网络连接请求服务器时,服务器上有多个睡眠的进程会被同时叫醒,这样会损耗一定的服务器性能。

#设置为on,将会对多个进程(worker processer)接收连接时进行序列化,防止多个worker进程争抢资源,默认就是on。

                #设置为on后,当新请求进来时,多个worker睡眠的进程,就只允许一个进程接收响应,就不用多个同时响应抢夺资源了.

multi_accept on; #on是:每个worker进程能同时接收多个网络连接,如果是off,每个worker process一次只能接收一个新到达的网络连接.

use epoll;  #使用epoll事件模型,提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,效率高。

              # nginx支持的类型有:select、poll、kqueue、epoll、rtsing、/dev/poll以及eventport,但只有epoll适合linux平台

}

-----------------------------下面是http部分-----------------------------------------------

http {

include       mime.types;  #定义nginx能识别的网络资源媒体类型:文本、html、js、css、流媒体等)查看:cat conf/ mime.types

                           #告诉nginx怎么识别不同资源类型,否则nginx不知道你访问图片谁视频等

    default_type  application/octet-stream;     #定义默认的type,如果不定义该行,默认为text/plain.

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #定义日志格式,main是别名,也可其他,但要和下面一致

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;                                      #调用定义的日志格式

sendfile        on;                   #是否调用sendfile函数传输文件.

#使用sendfile函数传输,可以减少user mode和kernel mode的切换,从而提升服务器性能.

    sendfile_max_chunk 128k;     #限定worker进程每次调用sendfile()函数传输数据的最大值,默认值为0,0是无限制,上面为on才管用

tcp_nopush     on;         #会调用tcp_cork方法进行数据传输

#产生的效果是:当应用程序产生数据时,内核不会立马封装包,而是当数据量积累到一定量时才会封装,然后传输。

#这样有助于解决网络堵塞问题,默认值为on。例:快递员收发快递,包裹累积到一定量才会发,节省运输成本。

keepalive_timeout 65 60;   #该参数有两个值,第一个值设置nginx服务器与客户端会话结束后仍旧保持连接的最长时间,单位是秒,默认为75s.

#第二个值可以省略,它是针对客户端的浏览器来设置的。

#第二个数值设置后,浏览器就会根据这个数值决定何时主动关闭连接,nginx服务器就不操心了

#但有的浏览器并不认可该参数。定义长连接的超时时间,建议30s,太短或者太长都不一定合适

keepalive_requests 50000; #定义当客户端和服务端处于长连接的情况下,每个客户端最多可以请求多少次,可以设置很大,比如50000

reset_timeout_connection on;  #设置为on的话,当客户端不再向服务端发送请求时,允许服务端关闭该连接。

client_body_timeout 10;  #客户端如果在该指定时间内没有加载完body数据,则断开连接,单位是秒,默认60,可以设置为10

send_timeout 60;        #这个超时时间是发送响应的超时时间,即nginx服务器向客户端发送了数据包,但客户端一直没有去接收这个数据包。

#如果某个连接超过send_timeout定义的超时时间,那么nginx将会关闭这个连接。

client_max_body_size 10m;  #浏览器在发送含有较大HTTP包体的请求时,其头部会有一个Content-Length字段,

#client_max_body_size是用来限制Content-Length所示值的大小的。

#如果浏览器发送给nginx的包体太大,超过了设置的值,nginx会直接返回413错误。

#这个限制包体的配置不用等nginx接收完所有HTTP包体,就可以告诉用户请求过大不被接受,会返回413状态码。

#例如:用户试图上传一个1GB的文件,nginx在收完包头后,发现Content-Length超过client_max_body_size定义的值,

#就直接发送413(Request Entity Too Large)响应给客户端。

gzip on;              #是否开启gzip压缩

gzip_min_length 1k;    #设置允许压缩的最小字节数,页面字节数从header头得content-length中进行获取,

#默认值是0, 不管页面多大都压缩, 建议设置成大于1k的字节数,小于1k可能会越压越大,即: gzip_min_length 1024;

                      # gzip_min_length 1k; 相当于 gzip_min_length 1024;

gzip_buffers 16 8k;      #设置压缩缓冲区,设置系统获取几个单位的buffer用于存储gzip的压缩结果数据流。

                      #16 8k代表分配16个8k的buffer。

gzip_http_version 1.1;  #用于识别 http 协议的版本,和http协议版本一致:是http/1.1,故请设置为 1.1

gzip_comp_level 6;    #设置gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

gzip_types    text/plain application/x-javascript text/css application/xml application/x-httpd-php image/jpeg image/gif image/png;

                  #设置对哪些文件类型进行压缩,在/usr/local/nginx/conf/mime.types里查看对应的type.

gzip_disable "MSIE 6\.";   #IE6浏览器不启用压缩。

gzip_vary on;     #和http头有关系,会在响应头加个 Vary: Accept-Encoding,可以让前端的缓存服务器缓存经过gzip压缩的页面

          #设置让前端的缓存服务器缓存经过gzip压缩的页面,即:将压缩的数据缓存起来         

#例如:用Squid缓存经过Nginx压缩的数据

gzip_proxied any;  #nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩

                 #nginx不做反向代理,可以不用开启,设置为off即可

                 #匹配的前提是后端服务器必须要返回包含”Via”的 header头。

                 #以下为可用的值:

                 #off - 关闭所有的代理结果数据的压缩

                 #expired - 启用压缩,如果header头中包含 "Expires" 头信息

                 #no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息

                 #no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息

                 #private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息

                 #no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息

                 #no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息

                 #auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息

                 #any - 无条件启用压缩

--------------下面是server部分(虚拟主机)(在http部分里)--------------

    server {

        listen       80;         #监听端口为80,可以自定义其他端口,也可以加上IP地址,如:listen 127.0.0.1:8080;

        server_name  localhost;  #定义网站域名,可以写多个,用空格分隔。

        #charset koi8-r;         #定义网站的字符集,一般不设置,而是在网页代码中设置。网页有乱码时候可试试

        #access_log  logs/host.access.log  main;  #定义访问日志,可针对每一个server设置访问日志,也可在http中设置全局访问日志。

        location / {                     #/表示网站的根目录

            root   html;                #定义网站根目录,目录可以是相对路径也可以是绝对路径

            index  index.html index.htm;  #定义站点的默认页.

        }

        #error_page  404              /404.html;              # 404.html; 定义404页面

        error_page   500 502 503 504  /50x.html;               #当状态码为500、502、503、504时,则访问50x.html

        location = /50x.html {                                  #定义50x.html页面,一般在网站根目录下定义

            root   html;                                      #定义50x.html所在路径

        }

#下面是定义访问php脚本时,将会执行本location{}部分指令

        #location ~ \.php$ {

        #    proxy_pass   http://127.0.0.1;        #proxy_pass后面指定要访问的url链接,用proxy_pass实现代理

        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #

        #location ~ \.php$ {

        #    root           html;

        #    fastcgi_pass   127.0.0.1:9000;         #定义FastCGI服务器监听端口与地址,支持两种形式,1 IP:Port, 2 unix:/path/to/sockt

        #    fastcgi_index  index.php;

        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; #定义SCRIPT_FILENAME变量,后面的路径/scripts为上面的root指定的目录

        #    include        fastcgi_params;    #引用prefix/conf/fastcgi_params文件,该文件定义了fastcgi相关的变量

        #}

        # deny access to .htaccess files, if Apache's document root

        # concurs with nginx's one

        #

        #location ~ /\.ht {        #访问的url中,以/.ht开头的,如,www.example.com/.htaccess,会被拒绝,返回403状态码。

        #    deny  all;         #这里的all指的是所有的请求。

        #}

    }

    #server {

    #    listen       8000;                            #监听8000端口

    #    listen       somename:8080;                  #指定ip:port

    #    server_name  somename  another.alias;        #指定多个server_name

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}

    # HTTPS server

    #server {

    #    listen       443 ssl;                   #监听443端口,即ssl

    #    server_name  localhost;              

    #    ssl_certificate      cert.pem;           #指定pem文件路径

    #    ssl_certificate_key  cert.key;            #指定key文件路径

    #    ssl_session_cache    shared:SSL:1m;    #指定session cache大小

#    ssl_session_timeout  5m;              #指定session超时时间

#    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;     #指定ssl协议

    #    ssl_ciphers  HIGH:!aNULL:!MD5;        #指定ssl算法

    #    ssl_prefer_server_ciphers  on;          #优先采取服务器算法

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

运维实战课程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值