【Nginx】配置文件详解

配置文件结构大致为:

    1.全局配置(user , woker_processes , error_log , pid)

    2.events(网络连接相关,woker_connections)

    3.http(最重要的部分,大部分功能都放在这里)

    4.server(虚拟主机类)

    5.location(server里面)

一:nginx.conf全局配置

user nobody;
定义运行nginx服务的用户,还可以加上组,如usernobodynobody;


worker_processes 1

定义nginx子进程数量,即提供服务的进程数量,该数值建议和服务cpu核数保持一致。除了可以定义数字外,还可以定义为auto,表示让系统自动调整。


error_log logs/error.log;

定义错误日志的路径,可以是相对路径(相对prefix路径的),也可以是绝对路径。该配置可以在此处定义,也可以定义到http、server、location里


error_log logs/error.log notice;

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


pid logs/nginx.pid;

定义nginx进程pid文件所在路径,可以是相对路径,也可以是绝对路径。


worker_rlimit_nofile 100000;

定义nginx最多打开文件数限制。如果没设置的话,这个值为操作系统(ulimit -n)的限制保持一致。把这个值设高,nginx就不会有“too manyopenfiles”问题了。


二:events配置

worker_connections 1024;
定义每个work_process同时开启的最大连接数,即允许最多只能有这么多连接。


accept_mutex on;(节省资源)

当某一个时刻只有一个网络连接请求服务器时,服务器上有多个睡眠的进程会被同时叫醒,这样会损耗一定的服务器性能。Nginx中的accept_mutex设置为on,将会对多个Nginx进程(worker processer)接收连接时进行序列化,防止多个进程争抢资源。默认就是on。


multi_accept on;(提升并发性能)

nginx worker processer可以做到同时接收多个新到达的网络连接,前提是把该参数设置为on。默认为off,即每个workerprocess一次只能接收一个新到达的网络连接。


use epoll;(最高效的事件处理驱动方式)

Nginx服务器提供了多个事件驱动器模型来处理网络消息。

其支持的类型有:select、poll、kqueue、epoll、rtsing、/dev/poll以及eventport。nginx中默认是poll,但不是在所有系统中都可用。epoll是在Linux 2.6+内核中最高效的方式


三:http配置部分(一些优化参数)

MIME-Type

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

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


log_format(该参数详细用法参考 https://my.oschina.net/u/2324318/blog/1938962 )--重要!
log_format main  '$remote_addr - $remote_user [$time_local] "$request" '

                             '$status $body_bytes_sent "$http_referer" '

                              '"$http_user_agent" "$http_x_forwarded_for"';

其中main为日志格式的名字,后面的为nginx的内部变量组成的一串字符串,可获取更详细的日志信息


sendfile on;

是否调用sendfile函数传输文件,默认为off,使用sendfile函数传输,可以减少user mode和kernel mode的切换,从而提升服务器性能。

对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。


sendfile_max_chunk 128k;(上者开启了,此参数才会生效)

该参数限定Nginx worker process每次调用sendfile()函数传输数据的最大值,默认值为0,如果设置为0则无限制。


tcp_nopush on;(助于解决网络堵塞问题)

当tcp_nopush设置为on时,会调用tcp_cork方法进行数据传输。

使用该方法会产生这样的效果:当应用程序产生数据时,内核不会立马封装包,而是当数据量积累到一定量时才会封装,然后传输。这样有助于解决网络堵塞问题默认值为on。举例:快递员收快递、发快递,包裹累积到一定量才会发,节省运输成本。


keepalive_timeout 65 60;

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

第二个值可以省略,它是针对客户端的浏览器来设置的,可以通过curl -I看到header信息中有一项Keep-Alive: timeout=60,如果不设置就没有这一项。

第二个数值设置后,浏览器就会根据这个数值决定何时主动关闭连接,Nginx服务器就不操心了。但有的浏览器并不认可该参数。


send_timeout(服务端判定客户端连接的超时时间)

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

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


client_max_body_size 10m;(客户端向服务端上传文件最大值)

浏览器在发送含有较大HTTP包体的请求时,其头部会有一个Content-Length字段,client_max_body_size是用来限制Content-Length所示值的大小的。

这个限制包体的配置不用等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中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。


gzip_buffers 4 16k;(表示设置几个多少K的buffer)

设置系统获取几个单位的buffer用于存储gzip的压缩结果数据流。416k代表分配4个16k的buffer。


gzip_comp_level 6;

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


gzip_types mime-type ... ;

匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。在conf/mime.conf里查看对应的type。示例:gzip_typestext/plainapplication/x-javascripttext/csstext/htmlapplication/xml;


gzip_proxied any;(如果后端已经设置压缩了,那么作为ng代理服务器没必要在启用压缩了)

Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”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 - 无条件启用压缩

http的header参考:https://kb.cnblogs.com/page/92320/


gzip_vary on;

和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。

四:Server项:

nginx.conf server部分配置

server{} 包含在http{}内部,每一个server{}都是一个虚拟主机(站点)。


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(即每一个站点)设置它们自己的访问日志。

        ##在server{}里有很多location配置段

  location / {

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

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

    }

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

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

    location = /50x.html {

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

    }

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

    #location ~ \.php$ {

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

    #}

    #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相关的变量

    #}

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

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

    #}

}


# HTTPS server

#

#server {

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

#    server_name  localhost;

### 以下为ssl相关配置

#    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;

#    }

#}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342