nginx特性及配置文件说明

服务器 struggling 1948次浏览 0个评论
文章目录

一,nginx特性


基本功能:

静态资源的web服务器,能缓存打开的文件描述符;

反向代理服务器,缓存、负载均衡;

支持FastCGI;

模块化,非DSO机制,过滤器gzip,SSI和图像大小调整等;

支持SSL;



扩展功能:

基于名称和IP做虚拟主机;

支持keepalive;

支持平滑配置更新或程序版本升级;

定制访问日志,支持使用日志缓存以提高性能;

支持url rewrite;

支持路径别名;

支持基于IP及用户的认证;

支持速率限制,并发限制等;



nginx的模块类别:

核心模块;

标准http模块;

可选的http模块;

邮件模块;

第三方扩展模块;



nginx的基本架构:

一个master,进程生成一个或多个worker进程;

事件驱动:kqueue, epoll, /dev/poll;

    消息通知:select, poll, rt signals

支持sendfile, sendfile64

文件AIO

支持mmap


nginx: 非阻塞IO模型、基于事件驱动、一个master进程多个worker进程,一个worker进程响应多个用户请求。

二,正常运行的必备配置

    1、user username [groupname];   指定运行worker进程的用户和组

    2、pid /path/to/pidfile_name;   指定nginx的pid文件

    3、worker_rlimit_nofile;        指定一个worker进程所能够打开的最大文件句柄数,指连接数;

    4、worker_rlimit_sigpending ;   设定每个用户能够发往worker进程的信号的数量;

三,优化性能相关的配置

1、worker_processes;   worker进程的个数;通常其数值应该为CPU的物理核心数减1;

2、worker_cpu_affinity cpumask …;   cpu亲缘性,以此减少上下文切换

   如果是8核并要绑定在6颗cpu上,可使用如下定义:

 
      worker_processes 6; 
      worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000; 
          

3、ssl_engine device;   在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备;

4、timer_resolution t;   每次内核事件调用返回时,都会使用gettimeofday()来更新nginx缓存时钟;timer_resolution用于定义每隔多久才会由gettimeofday()更新一次缓存时钟;x86-64系统上,gettimeofday()代价已经很小,可以忽略此配置;

5、worker_priority nice;   定义优先级,-20,19之间的值,对系统性能增强非常关键

四,事件相关的配置

1、accept_mutex [on|off];  是否打开Ningx的负载均衡锁;此锁能够让多个worker进轮流地、序列化地与新的客户端建立连接;而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不再将请求调度此worker;

2、lock_file /path/to/lock_file;   lock文件,accept_mutex定义为off则无效

3、accept_mutex_delay #ms;   accept锁模式中,一个worker进程为取得accept锁的等待时长;如果某worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁;

4、multi_accept on|off;   是否允许一次性地响应多个用户请求;默认为Off;

5、use [epoll|rtsig|select|poll];   定义使用的事件模型,建议让nginx自动选择;

6、worker_connections ;   每个worker能够并发响应最大请求数;

五,用于调试、定位问题的配置

1、daemon on|off;   是否让ningx运行后台;默认为on,调试时可以设置为off,使得所有信息去接输出控制台;

2、master_process on|off;   是否以master/worker模式运行nginx;默认为on;调试时可设置off只启动worker进程以方便追踪;

3、error_log /path/to/error_log level [ debug | info | notice | warn | error | crit | alert | emerg ];   错误日志文件及其级别,默认为error级别,错误日志在全局级别,访问日志在虚拟主机级别,调试时可以使用debug级别,但要求在编译时必须使用–with-debug启用debug功能;

六,虚拟主机相关的配置

1、server {}

定义一个虚拟主机;nginx支持使用基于主机名或IP的虚拟主机;

2、listen

listen address[:port];
listen port;    

default_server:定义此server为http中默认的server;如果所有的server中没有任何一个listen使用此参数,那么第一个server即为默认server; 
rcvbuf=SIZE: 接收缓冲大小;
sndbuf=SIZE: 发送缓冲大小;
ssl: https server;

3、server_name […];

server_name可以跟多个主机名,名称中可以使用通配符和正则表达式(通常以~开头);当nginx收到一个请求时,会取出其首部的server的值,而后跟众server_name进行比较;比较方式:

    (1) 先做精确匹配;www.feiyu.com 
    (2) 左侧通配符匹配;*.feiyu.com
    (3) 右侧通配符匹配;www.abc.com, www.*
    (4) 正则表达式匹配: ~^.*\.feiyu\.com$

4、server_name_hash_bucket_size 32|64|128;

为了实现快速主机查找,nginx使用hash表来保存主机名;

5、location

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }

功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理;比如:http://www.feiyu.com/images/logo.gif

=:精确匹配(优先级高);
~:正则表达式模式匹配,匹配时区分字符大小写
~*:正则表达式模式匹配,匹配时忽略字符大小写
^~: URI前半部分匹配,不检查正则表达式

匹配优先级:

字符字面量最精确匹配、正则表达式检索(由第一个匹配到所处理)、按字符字面量

七,网络连接相关的设置

1、keepalive_timeout time;   保持连接的超时时长;默认为75秒;

2、keepalive_requests n;   在一次长连接上允许承载的最大请求数;

3、keepalive_disable [msie6 | safari | none ];   对指定的浏览器禁止使用长连接;

4、tcp_nodelay on|off;    对keepalive连接是否使用TCP_NODELAY选项;

5、client_header_timeout time;   读取http请求首部的超时时长;

6、client_body_timeout time;   读取http请求包体的超时时长;

7、send_timeout time;   发送响应的超时时长;

八,对客户端请求的限制

1、limit_except method … { … }

指定对范围之外的其它方法的访问控制;

例:

limit_except GET {
              allow 172.16.0.0/16;
              deny all;
       }

除了GET 以外的其他方法只允许 172.16.0.0/16 网段访问。

2、client_max_body_size SIZE;   http请求包体的最大值;常用于限定客户所能够请求的最大包体;根据请求首部中的Content-Length来检测,以避免无用的传输;

3、limit_rate speed;    限制客户端每秒钟传输的字节数;默认为0,表示没有限制;

4、limit_rate_after time;    nginx向客户发送响应报文时,如果时长超出了此处指定的时长,则后续的发送过程开始限速;

九,文件操作的优化

1、sendfile on|off;   sendfile 是一个系统调用,直接在内核空间完成文件发送,不需要先 read 再 write,没有上下文切换开销。

2、aio on|off;   是否启用aio功能;

3、open_file_cache max=N [inactive=time]|off;  是否打开文件缓存功能;

         max: 缓存条目的最大值;当满了以后将根据LRU算法进行置换;

         inactive: 某缓存条目在指定时长时没有被访问过时,将自动被删除;默认为60s;

     缓存的信息包括:

         文件句柄、文件大小和上次修改时间;

         已经打开的目录结构;

         没有找到或没有访问权限的信息;

4、open_file_cache_errors on|off;   是否缓存文件找不到或没有权限访问等相关信息;

5、open_file_cache_valid time;   多长时间检查一次缓存中的条目是否超出非活动时长,默认为60s;

6、open_file_cache_min_use #;   在inactive指定的时长内被访问超此处指定的次数地,才不会被删除;

十,对客户端请求的特殊处理

1、ignore_invalid_headers on|off;  是否忽略不合法的http首部;默认为on; off意味着请求首部中出现不合规的首部将拒绝响应;只能用于server和http;

2、log_not_found on|off;  是否将文件找不到的信息也记录进错误日志中;

3、resolver address;   指定nginx使用的dns服务器地址;

4、resover_timeout time;   指定DNS解析超时时长,默认为30s;

5、server_tokens on|off;   是否在错误页面中显示nginx的版本号;

十一,内存及磁盘资源分配

1、client_body_in_file_only on|clean|off;  HTTP的包体是否存储在磁盘文件中;非off表示存储,即使包体大小为0也会创建一个磁盘文件;on表示请求结束后包体文件不会被删除,clean表示会被删除;

2、client_body_in_single_buffer on|off;   HTTP的包体是否存储在内存buffer当中;默认为off;

3、cleint_body_buffer_size size;   nginx接收HTTP包体的内存缓冲区大小;

4、client_body_temp_path dir-path [level1 [level2 [level3]]];

      HTTP包体存放的临时目录;

      client_body_temp_path /var/tmp/client/ 1 2

5、client_header_buffer_size size;   正常情况下接收用户请求的http报文header部分时分配的buffer大小;默认为1k;

6、large_client_header_buffers number size;   存储超大Http请求首部的内存buffer大小及个数;

7、connection_pool_size size;   nginx对于每个建立成功的tcp连接都会预先分配一个内存池,此处即用于设定此内存池的初始大小;默认为256;

8、request_pool_size size;    nginx在处理每个http请求时会预先分配一个内存池,此处即用于设定此内存池的初始大小;默认为4k;

十二,http核心模块的内置变量

$uri: 当前请求的uri,不带参数;

$request_uri: 请求的uri,带完整参数;

$host: http请求报文中host首部;如果请求中没有host首部,则以处理此请求的虚拟主机的主机名代替;

$hostname: nginx服务运行在的主机的主机名;

$remote_addr: 客户端IP

$remote_port: 客户端Port

$remote_user: 使用用户认证时客户端用户输入的用户名;

$request_filename: 用户请求中的URI经过本地root或alias转换后映射的本地的文件路径;

$request_method: 请求方法

$server_addr: 服务器地址

$server_name: 服务器名称

$server_port: 服务器端口

$server_protocol: 服务器向客户端发送响应时的协议,如http/1.1, http/1.0

$scheme: 在请求中使用scheme, 如https://www.feiyu.com/中的https;

$http_HEADER: 匹配请求报文中指定的HEADER,$http_host匹配请求报文中的host首部

$sent_http_HEADER: 匹配响应报文中指定的HEADER,例如$http_content_type匹配响应报文中的content-type首部;

$document_root:当前请求映射到的root配置;

十三,文件路径定义

1、root path; 设置web资源路径;用于指定请求的根文档目录;

    location / {
        root /www/htdocs;
    }

    location ^~ /images/ {   
        root /web;
    }
   

可以匹配到 http://www.feiyu.com/images/b.html,文件的路径为 /web/images/b.html

2、alias path; 只能用于location中,用于路径别名;

    location / {
        root /www/htdocs;
    }

    location ^~ /images/ {
        alias /web/;
    }
    

说明:文件放在 /web 下,但要使用 /images/b.html 进行访问

3、index file …; 定义默认页面,可参跟多个值;

4、error_page code … [=[response]] uri; 错误页面重定向;

    error_page  404  =200  /404.html;    #‘=’表示重定向状态码,没有时,若访问了未存在页面,日志中显示404,定义后,则显示200

当对于某个请求返回错误时,如果匹配上了error_page指令中设定的code,则重定向到新的URI中。

5、try_files path1 [path2 …] uri; #尝试访问多个文件后才重定

自左至右尝试读取由path所指定路径,在第一次找到即停止并返回;如果所有path均不存在,则返回最后一个uri;

    location ~* ^/documents/(.*)$ {
        root /www/htdocs;
        try_files $uri /docu/$1 /temp.html;
    }

DevOps-田飞雨 》》转载请注明源地址
喜欢 (5)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址