官网:http://nginx.org
Nginx:engine X,2002年,开源,商业版
NGINX是免费,开源,高性能的HTTP和反向代理服务器,邮件代理服务器,通用TCP/UDP代理服务器
解决C10K问题(10K Connections)
二次开发版:
Tengine, OpenResty(章亦春)

静态的web资源服务器html,图片,js,CSS,txt等静态资源
结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
http/https协议的反向代理
imap4/pop3协议的反向代理
tcp/udp协议的请求转发(反向代理)

特性

模块化设计,较好的扩展性
高可靠性
支持热部署:不停机更新配置文件,升级版本,更换日志文件
低内存消耗:10000个keep- alive连接模式下的非活动连接,仅需2.5M内存
vent-driven,aio,mmap, sendfile

基本功能

静态资源的web服务器
http协议反向代理服务器
pop3/imap4协议反向代理服务器
FastCGI(LNMP),uWSGI(python)等协议
模块化(非DSO),如zip,SSL模块

web服务相关的功能

虚拟主机(server)
支持keep-alive和管道连接
访问日志(支持基于日志缓冲提高其性能)
url rewirte
路径别名
基于IP及用户的访问控制
支持速率限制及并发数限制
重新配置和在线升级而无须中断客户的工作进程
Memcached 的GET接口

架构图

图片.png

nginx的程序结构

master/worker结构
一个master进程:
负载加载和分析配置文件、管理worker进程、平滑升级
一个或多个worker进程
处理并响应用户请求
缓存相关的进程:
cache loader:载入缓存对象
cache manager:管理缓存对象
Nginx高度模块化,但其模块早期不支持DSO机制;1.9.11版本支持动态装载和卸载
核心模块:

  • core module

标准模块:

  • HTTP模块:ngxhttp*
    • HTTP Core modules默认功能
    • HTTP Optional modules需编译时指定
  • Mail模块ngxmail
  • Stream模块ngxstream*

第三方模块

安装

官方
http://nginx.org/packages/centos/7/x86_64/RPMS/
Fedora-EPEL:
https://mirrors.aliyun.com/epel/7/x86_64/
编译安装:

  1. yum install pcre-devel openssl-devel zlib-devel
  2. useradd -r nginx
  3. ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user= nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
  4. make && make install
  5. # example2--------------------------------------------------------------
  6. ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

编译参数说明

  1. prefix=PATH set installation prefix #设置安装路径
  2. sbin-path=PATH set nginx binary pathname #设置binary路径
  3. conf-path=PATH set nginx.conf pathname #设置nginx 配置文件路径
  4. error-log-path=PATH set error log pathname #设置错误日志路径
  5. pid-path=PATH set nginx.pid pathname #设置nginx.pid 路径
  6. lock-path=PATH set nginx.lock pathname #设置nginx.lock路径
  7. user=USER set non-privileged user for #设置没有特殊权限的用户执行worker processes
  8. worker processes
  9. group=GROUP set non-privileged group for #设置没有特殊权限的用户执行worker processes
  10. worker processes
  11. builddir=DIR set build directory #设置编译目录
  12. with-rtsig_module enable rtsig module #开启rtsig 模块
  13. with-select_module enable select module #开启select 模块
  14. without-select_module disable select module #关闭 select 模块
  15. with-poll_module enable poll module #启用 poll 模块
  16. without-poll_module disable poll module #关闭poll 模块
  17. with-file-aio enable file AIO support #开启file AIO支持
  18. with-ipv6 enable IPv6 support #开启IPv6 支持
  19. with-http_ssl_module enable ngx_http_ssl_module #开启ssl 模块
  20. with-http_spdy_module enable ngx_http_spdy_module #开启spdy模块
  21. with-http_realip_module enable ngx_http_realip_module #开启 realip 模块
  22. with-http_addition_module enable ngx_http_addition_module #开启 addition 模块
  23. with-http_xslt_module enable ngx_http_xslt_module #开启 xslt模块
  24. with-http_image_filter_module enable ngx_http_image_filter_module #开启 image_filter模块
  25. with-http_geoip_module enable ngx_http_geoip_module #开启geoip模块
  26. with-http_sub_module enable ngx_http_sub_module #开启 sub模块
  27. with-http_dav_module enable ngx_http_dav_module #开启dav 模块
  28. with-http_flv_module enable ngx_http_flv_module #开启 flv模块
  29. with-http_mp4_module enable ngx_http_mp4_module #开启 mp4模块
  30. with-http_gunzip_module enable ngx_http_gunzip_module #开启gunzip模块
  31. with-http_gzip_static_module enable ngx_http_gzip_static_module #开启 gzip_static模块
  32. with-http_auth_request_module enable ngx_http_auth_request_module #开启 auth_request(身份验证请求)模块
  33. with-http_random_index_module enable ngx_http_random_index_module #开启random_index(随机指数)模块
  34. with-http_secure_link_module enable ngx_http_secure_link_module #开启 secure_link(安全链接)模块
  35. with-http_degradation_module enable ngx_http_degradation_module #开启degradation 模块
  36. with-http_stub_status_module enable ngx_http_stub_status_module #开启 stub_status 模块
  37. without-http_charset_module disable ngx_http_charset_module #关闭 charset(字符集) 模块
  38. without-http_gzip_module disable ngx_http_gzip_module #关闭 gzip模块
  39. without-http_ssi_module disable ngx_http_ssi_module #关闭 ssi 模块
  40. without-http_userid_module disable ngx_http_userid_module #关闭 userid模块
  41. without-http_access_module disable ngx_http_access_module #关闭 access模块
  42. without-http_auth_basic_module disable ngx_http_auth_basic_module #关闭 auth_basic (基本身份认证)模块
  43. without-http_autoindex_module disable ngx_http_autoindex_module #关闭 autoindex(自动变址)模块
  44. without-http_geo_module disable ngx_http_geo_module #关闭 geo模块
  45. without-http_map_module disable ngx_http_map_module #关闭 map 模块
  46. without-http_split_clients_module disable ngx_http_split_clients_module #关闭 split_clients (划分客户端)模块
  47. without-http_referer_module disable ngx_http_referer_module #关闭 referer (推荐人)模块
  48. without-http_rewrite_module disable ngx_http_rewrite_module #关闭 rewrite (重写)模块
  49. without-http_proxy_module disable ngx_http_proxy_module #关闭 proxy (代理)模块
  50. without-http_fastcgi_module disable ngx_http_fastcgi_module #关闭 fastcgi模块
  51. without-http_uwsgi_module disable ngx_http_uwsgi_module #关闭 uwsgi 模块
  52. without-http_scgi_module disable ngx_http_scgi_module #关闭 scgi 模块
  53. without-http_memcached_module disable ngx_http_memcached_module #关闭 memcached 模块
  54. without-http_limit_conn_module disable ngx_http_limit_conn_module # 关闭 limit_conn 模块
  55. without-http_limit_req_module disable ngx_http_limit_req_module #关闭 limit_req模块
  56. without-http_empty_gif_module disable ngx_http_empty_gif_module #关闭 empty_gif 模块
  57. without-http_browser_module disable ngx_http_browser_module #关闭 browser 模块
  58. without-http_upstream_ip_hash_module
  59. disable ngx_http_upstream_ip_hash_module #关闭 ip_hash模块
  60. without-http_upstream_least_conn_module
  61. disable ngx_http_upstream_least_conn_module #关闭 least_conn 模块
  62. without-http_upstream_keepalive_module
  63. disable ngx_http_upstream_keepalive_module #关闭 keepalive 模块
  64. with-http_perl_module enable ngx_http_perl_module #开启perl 模块
  65. with-perl_modules_path=PATH set Perl modules path #设置perl模块路径
  66. with-perl=PATH set perl binary pathname #设置perl 命令路径
  67. http-log-path=PATH set http access log pathname #设置访问日志 路径
  68. http-client-body-temp-path=PATH set path to store
  69. http client request body temporary files #设置存储路径 http客户端请求主体临时文件
  70. http-proxy-temp-path=PATH set path to store
  71. http proxy temporary files #设置存储路径 http代理临时文件
  72. http-fastcgi-temp-path=PATH set path to store
  73. http fastcgi temporary files #设置 fastcgi临时文件存储路径
  74. http-uwsgi-temp-path=PATH set path to store
  75. http uwsgi temporary files #设置 uwsgi 临时文件存储路径
  76. http-scgi-temp-path=PATH set path to store
  77. http scgi temporary files #设置 scgi 临时文件存储路径
  78. without-http disable HTTP server #关闭 http server
  79. without-http-cache disable HTTP cache #关闭 http cache
  80. with-mail enable POP3/IMAP4/SMTP proxy module #开启 POP3/IMAP4/SMTP 协议模块
  81. with-mail_ssl_module enable ngx_mail_ssl_module #开启 nginx mail ssl 模块
  82. without-mail_pop3_module disable ngx_mail_pop3_module #关闭 mail pop3模块
  83. without-mail_imap_module disable ngx_mail_imap_module #关闭 mail imap 模块
  84. without-mail_smtp_module disable ngx_mail_smtp_module #关闭 mail smtp 模块
  85. with-google_perftools_module enable ngx_google_perftools_module #开启 nginx google_perftools (谷歌性能工具)模块
  86. with-cpp_test_module enable ngx_cpp_test_module #开启 cpp_test 模块
  87. add-module=PATH enable an external module #开启external(外部)模块
  88. with-cc=PATH set C compiler pathname #设置C 编译器 路径
  89. with-cpp=PATH set C preprocessor pathname #设置 C预编译器 路径
  90. with-cc-opt=OPTIONS set additional C compiler options #设置额外的C编译器选项
  91. with-ld-opt=OPTIONS set additional linker options #设置额外的链接器选项
  92. with-cpu-opt=CPU build for the specified CPU, valid values:
  93. pentium, pentiumpro, pentium3, pentium4,
  94. athlon, opteron, sparc32, sparc64, ppc64 #建立指定的CPU 有效值:
  95. without-pcre disable PCRE library usage #关闭 PCRE 库 使用
  96. with-pcre force PCRE library usage #强制使用指定的PCRE 库
  97. with-pcre=DIR set path to PCRE library sources #指定 pcre 使用路径
  98. with-pcre-opt=OPTIONS set additional build options for PCRE #为PCRE设置额外的构建选项
  99. with-pcre-jit build PCRE with JIT compilation support #构建PCRE JIT编译的支持
  100. with-md5=DIR set path to md5 library sources #设置路径md5库资源
  101. with-md5-opt=OPTIONS set additional build options for md5 #为md5设置额外的构建选项
  102. with-md5-asm use md5 assembler sources #使用md5汇编源
  103. with-sha1=DIR set path to sha1 library sources #设置 sha1 库的路径
  104. with-sha1-opt=OPTIONS set additional build options for sha1 #为sha1设置额外的构建选项
  105. with-sha1-asm use sha1 assembler sources #使用sha1汇编源
  106. with-zlib=DIR set path to zlib library sources #指定 zlib 库的路径
  107. with-zlib-opt=OPTIONS set additional build options for zlib #为zlib 设置额外的构建选项
  108. with-zlib-asm=CPU use zlib assembler sources optimized
  109. for the specified CPU, valid values:
  110. pentium, pentiumpro #使用 zlib汇编优化的来源
  111. with-libatomic force libatomic_ops library usage #强制 使用libatomic
  112. with-libatomic=DIR set path to libatomic_ops library sources #设置 libatomic 路径
  113. with-openssl=DIR set path to OpenSSL library sources #设置 openssl 库的路径
  114. with-openssl-opt=OPTIONS set additional build options for OpenSSL #为 openssl 设置额外的构建选项
  115. with-debug enable debug logging #开启debug 日志

配置

配置文件的组成部分:

  • 主配置文件:nginx.conf
  • 子配置文件:include conf.d/*.conf
  • fastcgi, uwsgi,scgi等协议相关的配置文件
  • mime.types:支持的mime类型

    主配置文件的配置指令:

    directive value [value2 …];
    注意:
    (1)指令必须以分号结尾
    (2)支持使用配置变量

  • 内建变量

由Nginx模块引入,可直接引用

  • 自定义变量

由用户使用set命令定义:set $variable_name value;

  • 引用变量

$variable_name

主配置文件结构:四部分

main block:主配置段,即全局配置段,对http,mail都有效
event{
} 事件驱动相关的配置
http{
} http/https协议相关配置段
mail{
} mail协议相关配置段
stream{
} stream服务器相关配置段

  1. http{
  2. ...
  3. server的公共配置
  4. server{每个每server用于定义一个虚拟主机
  5. }
  6. server{
  7. ...
  8. server_name虚拟主机名
  9. root主目录
  10. alias
  11. 路径别名
  12. location [OPERATOR] URL{ 指定URL的特性
  13. ...
  14. if CONDITION {
  15. ...
  16. }
  17. }
  18. }
  19. }

Main全局配置段常见的配置指令分类
正常运行必备的配置
优化性能相关的配置
用于调试及定位问题相关的配置
事件驱动相关的配置
帮助文档http://nginx.org/en/docs/

正常运行必备的配置:

帮助文档:https://nginx.org/en/docs/ngx_core_module.html
1、user
Syntax: user user [group];
Default: user nobody nobody;
Context: main
指定worker进程的运行身份,如组不指定,默认和用户名同名
2、pid /PATH/TO/PID_FILE
指定存储nginx主进程PID的文件路径
3、include file | mask
指明包含进来的其它配置文件片断
4、load_module file
模块加载配置文件:/usr/share/nginx/modules/*.conf
指明要装载的动态模块路径: /usr/lib64/nginx/modules

性能优化相关的配置:

1、worker_processes number| auto
worker进程的数量;通常应该为当前主机的cpu的物理核心数
2、worker_cpu_affinity cpumask
worker_cpu_affinity auto [cpumask]提高缓存命中率
CPU MASK : 0000001:0号CPU
00000010:1号CPU
10000000:8号CPU
worker_cpu_affinity 0001 0010 0100 1000;
worker_cpu_affinity 0101 1010;
3、worker_priority number
指定worker进程的nice值,设定worker进程优先级:[-20,20]
4、worker_rlimit_nofile number
worker进程所能够打开的文件数量。上限,如65535

事件驱动相关的配置:

events{

}
1、worker_connections number

  • 每个worker进程所能够打开的最大并发连接数数量,

如10240 总最大并发数:worker_ processes * worker_connections
2、use method

  • 指明并发连接请求的处理方法,默认自动选择最优方法 use epoll;

3、accept_mutex on|off互斥

  • 处理新的连接请求的方法;on指由各个worker轮流处理新请求,Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接,造成“惊群”,影响性能

调试和定位问题:

1、daemon on|off
是否以守护进程方式运行nignx,默认是守护进程方式
2、master_process on|off
是否以master/worker模型运行nginx;默认为on ,off将不启动worker
3、error_log file [level]

  • 错误日志文件及其级别;出于调试需要,可设定为debug;但debug仅在编译时使用了“—with-debug”选项时才有效
  • 方式:file/path/logfile;
  • stderr:发送到标准错误
  • syslog:server-address[,parameter=values]:发送到syslog memory:size内存
  • level:debug|info| notice|warn|error|crit|alter|emerg

与套接字相关的配置:

ngx_http_core_module

配置一个虚拟主机

1、server{…}

  1. server{
  2. listen address[:PORT],PORT;
  3. server_name SERVER_NAME;
  4. root /PATH/TO/DOCUMENT_ROOT;
  5. }

2、listen PORT|address[:port]|unix:/PATH/TO/SOCKET_ FILE

listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
default_server 设定为默认虚拟主机
ssI 限制仅能够通过ssl连接提供服务
backlog=number 超过并发连接数后,新请求进,入后援队列的长度
rcvbuf=size 接收缓冲区大小
sndbuf=size 发送缓冲区大小

注意:
(1)基于port;
listen PORT;
指令监听在不同的端
(2)基于ip的虚拟主机
listen IP:PORT;
IP地址不同
(3)基于hostname
server_name fqdn; 指令指向不同的主机名

3、server_name name …;

虚拟主机的主机名称后可跟多个由空白字符分隔的字符串

  • 支持*通配任意长度的任意字符

server_name .foo.com www.foo.

  • 支持~起始的字符做正则表达式模式匹配,性能原因慎用

server_name ~^www\d+.foo.com$
说明:\d表示[0-9]
匹配优先级机制从高到低:
(1)首先是字符串精确匹配如: www.foo.com
(2)左侧通配符如:.foo.com
(3)右侧通配符如:www.foo.
(4)正则表达式如: ~^.*.foo.com$
(5) default_server

4、tcp_nodelay on | off;

在keepalived模式下的连接是否启用TCP_ NODELAY选项
当为off时,延迟发送,合并多个请求后再发送
默认On时,不延迟发送
可用于:http,server, location

5、sendfile ag I off;

是否启用sendfile功能,在内核中封装报文直接发送
默认Off

6、server_tokens on| off| build | string

是否在响应报文的Server首部显示nginx版本

定义路径相关的配置

7、root

设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径
可用于http,server, location, if in location

示例
http://www.foo.com/images/logo.jpg —> /data/www/vhosts/foo/logo.jpg

  1. server{
  2. root /data/www/vhost1;
  3. }

8、location [ = | ~ | ~* | ^~ ] uri {…}

location @name{…}
在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置

示例
http://www.foo.com/images/logo.jpg —> /data/imgs/images/logo.jpg

  1. server{...
  2. server_name www.foo.com;
  3. location /images/{
  4. root /data/imgs/;
  5. }
  6. }

9、alias path

路径别名,文档映射的另一 种机制;仅能用于location上下文
示例:

  1. http://www.magedu.com/bbs/index.php --> http://www.magedu.com/web/forum/index.html
  2. location /bbs/{
  3. alias /web/forum/;
  4. }
  5. http://www.magedu.com/bbs/index.php --> http://www.magedu.com/web/forum/bbs/index.html
  6. location/bbs/{
  7. root /web/forum/;
  8. }

注意:location中使用root指令和alias指令的意义不同
(a) root,给定的路径对应于location中的/uri/左侧的/
(b) alias,给定的路径对应于location中的/uri/右侧的/

10、index file …;

指定默认网页文件,注意:ngxhttp index_module模块
=对URI做精确匹配

location= / {

}
http://www.foo.com/ 匹配
http://www.foo.com/index.html 不匹配
^~ 对URI的最左边部分做匹配检查,不区分字符大小写
~ 对URI做正则表达式模式匹配,区分字符大小写
~* 对URI做正则表达式模式匹配,不区分字符大小写
不带符号 匹配起始于此uri的所有的uri
匹配优先级从高到低:

  • =
  • ^~
  • ~
  • ~*
  • 不带符号

示例:
http://www.foo.com/index.html —> /vhosts/www/htdocs/index.html

  1. server{
  2. root / vhosts/www/htdocs/

示例:
http://www.foo.com/admin/index.html —> /webapps/app1/data/admin/index.html

  1. server{
  2. root /vhosts/www/htdocs/
  3. location /admin/{
  4. root /webapps/app1/data/
  5. }
  6. }
  1. location=/{ # http://www.foo.com/
  2. [configuration A]
  3. }
  4. location /{ # http://www.foo.com/index.html
  5. [configuration B]
  6. }
  7. location /documents/{ # http://www.foo.com/documents/linux.txt
  8. [configuration C]
  9. }
  10. location ^~/images/{ # http://www.foo.com/images/logo.jpeg
  11. [configuration D]
  12. }
  13. location ~*\.(gifljpgljpeg)${ # http://www.foo.com/documents/logo.jpg
  14. [configuration E]
  15. }

11、error_page code …[=[response]] uri

定义错误页,以指定的响应状态码进行
模块:ngx_http_core_module
响应
可用位置:http,server,location, if in location
error_page 404 /404.html
error_page 404 =200 /404.html

12、try_files file … uri;try_files file …=code;
访问资源不存在,返回默认资源
按顺序检查文件是否存在,返回第一 个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一 个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误

  1. location /images/{
  2. try_files $uri /images/default.gif;
  3. }
  4. location /{
  5. try_files $uri $uri/index.html $uri.html =404;
  6. }

定义客户端请求的相关配置

13、keepalive_timeout timeout [header_timeout];

设定保持连接超时时长,0表示禁止长连接,默认为75s

14、keepalive_requests number;

在一次长连接上所允许请求的资源的最大数量 默认为100

15、keepalive_disable none | browser …

对哪种浏览器禁用长连接

16、 send_timeout time;

向客户端发送响应报文的超时时长,1比处是指两次写操作之间的间隔时长,而非整个响应过程的传输时长

17、 Client_body_buffer_size size;

用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由下面client_body_temp_path指令所定义的位置

18、client_body_temp_path path [level1 [level2 [level3]]];

设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量
目录名为16进制的数字;

client_body_temp_path /var/tmp/client_body 1 2 2

1 1级目录占1位16进制,即2^4=16个目录0-f
2 2级目录占2位16进制,即2^8=256个目录00-ff
2 3级目录占2位16进制,即2^8=256个目录00-ff

对客户端进行限制的相关配置

19、 limit_rate rate;

限制响应给客户端的传输速率,单位是bytes/second
默认值0表示无限制

20、limit_except method…{…},仅用于location

限制客户端使用除了指定的请求方法之外的其它方法
method:GET, HEAD, POST, PUT, DELETE
MKCOL, COPY, MOVE, OPTIONS, PROPFIND,
PROPPATCH, LOCK, UNLOCK, PATCH

  1. limit_except GET{
  2. allow 192.168.1.0/24;
  3. deny all;
  4. }因为GET时包含HEAD的,所以是除了GETHEAD之外其它方法仅允许192.168.1.0/24网段主机使用

文件操作优化的配置

21、aio on | off | threads[=pool];

是否启用aio功能

22、directio size | off;

当文件大于等于给定大小时,例如directio 4m,同步(直接)写磁盘,而非写缓存

23、open_file_cache off;

open_file_cache max=N [inactive=time];
nginx可以缓存以下三种信息:
(1)文件元数据:文件的描述符、文件大小和最近一次的修改时间
(2)打开的目录结构
(3)没有找到的或者没有权限访问的文件的相关信息
max=N:可缓存的缓存项上限;达到上限后会使用LRU(最近最少使用)算法实现管理
inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项,将被删除

24、open_file_cache_errors on | off;

是否缓存查找时发生错误的文件一类的信息
默认值为off

25、open_file_cache_min_uses number;

open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定
的次数方可被归类为活动项
默认值为1

26、open_file_cache_valid time;

缓存项有效性的检查频率
默认值为60s

ngx_http_access_module模块
实现基于ip的访问控制功能
1、allow address | CIDR | unix:| all;
2、deny address | CIDR| unix:| all;
http, server, lotation, limit_except
自上而下检查,一旦匹配,将生效,条件严格的置前
示例:

  1. location /{
  2. deny 192.168.1.1;
  3. allow 192.168.1.0/24;
  4. allow 10.1.1.0/16;
  5. allow 2001:0db8::/32;
  6. deny all;
  7. }

用户访问

ngx_http_auth_basic_modu!e模块
实现基于用户的访问控制,使用basic机制进行用户认证
1、auth_basic string | off;
2、auth_basic_user_file file;

  1. location /admin/{
  2. auth_basic "Admin Area";
  3. auth_basic_user_file /etc/nginx/.ngxpasswd;
  4. }

用户口令文件:
1、明文文本:格式name:password:comment
2、加密文本:由htpasswd命令实现
httpd-tools所提供

ngxhttp_stub_status module模块
用于输出nginx的基本状态信息
输出信息示例:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465 # 三个数字分别对应accepts,handled,requests三个值
Reading: 6 Writing: 179 Waiting: 106
Active connections:当前状态,活动状态的连接数
accepts:统计总值,已经接受的客户端请求的总数
handled:统计总值,已经处理完成的客户端请求的总数
requests:统计总值,客户端发来的总的请求数
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
Writing:当前状态,正在向客户端:发送响应报文过程中的连接数
Waiting:当前状态,正在等待客户端发出请求的空闲连接数
1、stub_status;
示例:

  1. location /status {
  2. stub_status;
  3. allow 172.16.0.0/16;
  4. deny all;
  5. }

日志

ngx_http_log_module模块
context :http
指定日志格式记录请求
1、log_format name string …;
string可以使用nginx核心模块及其它模块内嵌的变量
$remote_addr 访问端地址
$remote_user 访问端用户
$time_local 本地时间
$request 访问的url
$status 状态码
$body_bytes_sent 发送的数据包把报文
$http_referer 从哪个网站跳转过来的
$http_user_agent 浏览器的版本类型

  1. log_format combined '$remote_addr - $remote_user [$time_local] '
  2. '"$request" $status $body_bytes_sent '
  3. '"$http_referer" "$http_user_agent"';

2、access_log path [format [buffer= size] [gzip[=level]] [flush=time][if=condition]];
访问日志文件路径,格式及相关的缓冲的配置
access_log off;
buffer=size
flush=time

  1. log_format compression "$remote_ addr-$remote_user [$time_local]"
  2. "$request" $status $bytes_sent"
  3. "$http_referer" "$http_user_ agent" "$gzip_ratio";
  4. # 生产环境可以加buffer 测试环境不用加
  5. access_log /spool/logs/nginx access.log compression buffer= 32k;

3、openlog_file_cache max=N [inactive=time] [min_uses=N][valid=time];
open_log_file_cache off;
缓存各日志文件相关的元数据信息
max:缓存的最大文件描述符数量
min
uses:在inactive指定的时长内访问大于等于此值方可被当作活动项
inactive:非活动时长
valid:验证缓存中各缓存项是否为活动项的时间间隔

压缩

ngx_http_gzip_module
用gzip方法压缩响应数据,节约带宽

1、gzip on | off;
启用或禁用gzip压缩
2、gzip_comp_level level;
压缩比由低到高:1到9
默认:1
3、gzip_disable regex…;
匹配到客户端浏览器不执行压缩
4、gzip_min_length length;
启用压缩功能的响应报文大小阈值
5、gzip_http_version 1.0 | 1.14
设定启用压缩功能时,协议的最小版本
默认:1.1
6、gzip_buffers number size;
支持实现压缩功能时缓冲区数量及每个缓存区的大小
默认:32 4k或16 8k
7、gzip_types mime-type …
指明仅对哪些类型的资源执行压缩操作;即压缩过滤器
默认包含有text/html,不用显示指定,否则出错
8、gzip_vary on | off;
如果启用压缩,是否在响应报文首部插入“Vary:Accept-Encoding”

9、gzipproxied off | expired | no-cache| no-store| private | no_last_modified| no etag| auth | any …
nginx充当代理服务器时,对于后端服务器的响应报文,在何种条件下启用压缩功能
off:不启用压缩
expired, no-cache, no-store,private:对后端服务器的响应报文首部
Cache-Control值任何一个,启用压缩功能
示例:

  1. gzip on;
  2. gzip_comp_level 6;
  3. gzip_min_length 64;
  4. gzip_proxied any;
  5. gzip_types text/xml text/css application/javascript text/plain;

加密

ngx_http_ssl_module模块:
1、ssI on | off;
为指定虚拟机启用HTTPS protocol,建议用listen指令代替
2、ssl_certificate file;
当前虚拟主机使用PEM格式的证书文件
3、ssl_certificate_key file;
当前虚拟主机上与其证书匹配的私钥文件
4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持ssI协议版本,默认为后三个
5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
none:通知客户端支持ssI session cache,但实际不支持
builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
[shared:name:size]:在各worker之间使用一个共享的缓存