官网: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接口
架构图
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/
编译安装:
yum install pcre-devel openssl-devel zlib-devel
useradd -r nginx
./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
make && make install
# example2--------------------------------------------------------------
./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'
编译参数说明
–prefix=PATH set installation prefix #设置安装路径
–sbin-path=PATH set nginx binary pathname #设置binary路径
–conf-path=PATH set nginx.conf pathname #设置nginx 配置文件路径
–error-log-path=PATH set error log pathname #设置错误日志路径
–pid-path=PATH set nginx.pid pathname #设置nginx.pid 路径
–lock-path=PATH set nginx.lock pathname #设置nginx.lock路径
–user=USER set non-privileged user for #设置没有特殊权限的用户执行worker processes
worker processes
–group=GROUP set non-privileged group for #设置没有特殊权限的用户执行worker processes
worker processes
–builddir=DIR set build directory #设置编译目录
–with-rtsig_module enable rtsig module #开启rtsig 模块
–with-select_module enable select module #开启select 模块
–without-select_module disable select module #关闭 select 模块
–with-poll_module enable poll module #启用 poll 模块
–without-poll_module disable poll module #关闭poll 模块
–with-file-aio enable file AIO support #开启file AIO支持
–with-ipv6 enable IPv6 support #开启IPv6 支持
–with-http_ssl_module enable ngx_http_ssl_module #开启ssl 模块
–with-http_spdy_module enable ngx_http_spdy_module #开启spdy模块
–with-http_realip_module enable ngx_http_realip_module #开启 realip 模块
–with-http_addition_module enable ngx_http_addition_module #开启 addition 模块
–with-http_xslt_module enable ngx_http_xslt_module #开启 xslt模块
–with-http_image_filter_module enable ngx_http_image_filter_module #开启 image_filter模块
–with-http_geoip_module enable ngx_http_geoip_module #开启geoip模块
–with-http_sub_module enable ngx_http_sub_module #开启 sub模块
–with-http_dav_module enable ngx_http_dav_module #开启dav 模块
–with-http_flv_module enable ngx_http_flv_module #开启 flv模块
–with-http_mp4_module enable ngx_http_mp4_module #开启 mp4模块
–with-http_gunzip_module enable ngx_http_gunzip_module #开启gunzip模块
–with-http_gzip_static_module enable ngx_http_gzip_static_module #开启 gzip_static模块
–with-http_auth_request_module enable ngx_http_auth_request_module #开启 auth_request(身份验证请求)模块
–with-http_random_index_module enable ngx_http_random_index_module #开启random_index(随机指数)模块
–with-http_secure_link_module enable ngx_http_secure_link_module #开启 secure_link(安全链接)模块
–with-http_degradation_module enable ngx_http_degradation_module #开启degradation 模块
–with-http_stub_status_module enable ngx_http_stub_status_module #开启 stub_status 模块
–without-http_charset_module disable ngx_http_charset_module #关闭 charset(字符集) 模块
–without-http_gzip_module disable ngx_http_gzip_module #关闭 gzip模块
–without-http_ssi_module disable ngx_http_ssi_module #关闭 ssi 模块
–without-http_userid_module disable ngx_http_userid_module #关闭 userid模块
–without-http_access_module disable ngx_http_access_module #关闭 access模块
–without-http_auth_basic_module disable ngx_http_auth_basic_module #关闭 auth_basic (基本身份认证)模块
–without-http_autoindex_module disable ngx_http_autoindex_module #关闭 autoindex(自动变址)模块
–without-http_geo_module disable ngx_http_geo_module #关闭 geo模块
–without-http_map_module disable ngx_http_map_module #关闭 map 模块
–without-http_split_clients_module disable ngx_http_split_clients_module #关闭 split_clients (划分客户端)模块
–without-http_referer_module disable ngx_http_referer_module #关闭 referer (推荐人)模块
–without-http_rewrite_module disable ngx_http_rewrite_module #关闭 rewrite (重写)模块
–without-http_proxy_module disable ngx_http_proxy_module #关闭 proxy (代理)模块
–without-http_fastcgi_module disable ngx_http_fastcgi_module #关闭 fastcgi模块
–without-http_uwsgi_module disable ngx_http_uwsgi_module #关闭 uwsgi 模块
–without-http_scgi_module disable ngx_http_scgi_module #关闭 scgi 模块
–without-http_memcached_module disable ngx_http_memcached_module #关闭 memcached 模块
–without-http_limit_conn_module disable ngx_http_limit_conn_module # 关闭 limit_conn 模块
–without-http_limit_req_module disable ngx_http_limit_req_module #关闭 limit_req模块
–without-http_empty_gif_module disable ngx_http_empty_gif_module #关闭 empty_gif 模块
–without-http_browser_module disable ngx_http_browser_module #关闭 browser 模块
–without-http_upstream_ip_hash_module
disable ngx_http_upstream_ip_hash_module #关闭 ip_hash模块
–without-http_upstream_least_conn_module
disable ngx_http_upstream_least_conn_module #关闭 least_conn 模块
–without-http_upstream_keepalive_module
disable ngx_http_upstream_keepalive_module #关闭 keepalive 模块
–with-http_perl_module enable ngx_http_perl_module #开启perl 模块
–with-perl_modules_path=PATH set Perl modules path #设置perl模块路径
–with-perl=PATH set perl binary pathname #设置perl 命令路径
–http-log-path=PATH set http access log pathname #设置访问日志 路径
–http-client-body-temp-path=PATH set path to store
http client request body temporary files #设置存储路径 http客户端请求主体临时文件
–http-proxy-temp-path=PATH set path to store
http proxy temporary files #设置存储路径 http代理临时文件
–http-fastcgi-temp-path=PATH set path to store
http fastcgi temporary files #设置 fastcgi临时文件存储路径
–http-uwsgi-temp-path=PATH set path to store
http uwsgi temporary files #设置 uwsgi 临时文件存储路径
–http-scgi-temp-path=PATH set path to store
http scgi temporary files #设置 scgi 临时文件存储路径
–without-http disable HTTP server #关闭 http server
–without-http-cache disable HTTP cache #关闭 http cache
–with-mail enable POP3/IMAP4/SMTP proxy module #开启 POP3/IMAP4/SMTP 协议模块
–with-mail_ssl_module enable ngx_mail_ssl_module #开启 nginx mail ssl 模块
–without-mail_pop3_module disable ngx_mail_pop3_module #关闭 mail pop3模块
–without-mail_imap_module disable ngx_mail_imap_module #关闭 mail imap 模块
–without-mail_smtp_module disable ngx_mail_smtp_module #关闭 mail smtp 模块
–with-google_perftools_module enable ngx_google_perftools_module #开启 nginx google_perftools (谷歌性能工具)模块
–with-cpp_test_module enable ngx_cpp_test_module #开启 cpp_test 模块
–add-module=PATH enable an external module #开启external(外部)模块
–with-cc=PATH set C compiler pathname #设置C 编译器 路径
–with-cpp=PATH set C preprocessor pathname #设置 C预编译器 路径
–with-cc-opt=OPTIONS set additional C compiler options #设置额外的C编译器选项
–with-ld-opt=OPTIONS set additional linker options #设置额外的链接器选项
–with-cpu-opt=CPU build for the specified CPU, valid values:
pentium, pentiumpro, pentium3, pentium4,
athlon, opteron, sparc32, sparc64, ppc64 #建立指定的CPU 有效值:
–without-pcre disable PCRE library usage #关闭 PCRE 库 使用
–with-pcre force PCRE library usage #强制使用指定的PCRE 库
–with-pcre=DIR set path to PCRE library sources #指定 pcre 使用路径
–with-pcre-opt=OPTIONS set additional build options for PCRE #为PCRE设置额外的构建选项
–with-pcre-jit build PCRE with JIT compilation support #构建PCRE JIT编译的支持
–with-md5=DIR set path to md5 library sources #设置路径md5库资源
–with-md5-opt=OPTIONS set additional build options for md5 #为md5设置额外的构建选项
–with-md5-asm use md5 assembler sources #使用md5汇编源
–with-sha1=DIR set path to sha1 library sources #设置 sha1 库的路径
–with-sha1-opt=OPTIONS set additional build options for sha1 #为sha1设置额外的构建选项
–with-sha1-asm use sha1 assembler sources #使用sha1汇编源
–with-zlib=DIR set path to zlib library sources #指定 zlib 库的路径
–with-zlib-opt=OPTIONS set additional build options for zlib #为zlib 设置额外的构建选项
–with-zlib-asm=CPU use zlib assembler sources optimized
for the specified CPU, valid values:
pentium, pentiumpro #使用 zlib汇编优化的来源
–with-libatomic force libatomic_ops library usage #强制 使用libatomic
–with-libatomic=DIR set path to libatomic_ops library sources #设置 libatomic 路径
–with-openssl=DIR set path to OpenSSL library sources #设置 openssl 库的路径
–with-openssl-opt=OPTIONS set additional build options for OpenSSL #为 openssl 设置额外的构建选项
–with-debug enable debug logging #开启debug 日志
配置
配置文件的组成部分:
- 主配置文件:nginx.conf
- 子配置文件:include conf.d/*.conf
- fastcgi, uwsgi,scgi等协议相关的配置文件
-
主配置文件的配置指令:
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服务器相关配置段
http{
...
各server的公共配置
server{每个每server用于定义一个虚拟主机
}
server{
...
server_name虚拟主机名
root主目录
alias
路径别名
location [OPERATOR] URL{ 指定URL的特性
...
if CONDITION {
...
}
}
}
}
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{…}
server{
listen address[:PORT],PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;
}
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
server{
root /data/www/vhost1;
}
8、location [ = | ~ | ~* | ^~ ] uri {…}
location @name{…}
在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置
示例
http://www.foo.com/images/logo.jpg —> /data/imgs/images/logo.jpg
server{...
server_name www.foo.com;
location /images/{
root /data/imgs/;
}
}
9、alias path
路径别名,文档映射的另一 种机制;仅能用于location上下文
示例:
http://www.magedu.com/bbs/index.php --> http://www.magedu.com/web/forum/index.html
location /bbs/{
alias /web/forum/;
}
http://www.magedu.com/bbs/index.php --> http://www.magedu.com/web/forum/bbs/index.html
location/bbs/{
root /web/forum/;
}
注意: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
server{
root / vhosts/www/htdocs/
示例:
http://www.foo.com/admin/index.html —> /webapps/app1/data/admin/index.html
server{
root /vhosts/www/htdocs/
location /admin/{
root /webapps/app1/data/
}
}
location=/{ # http://www.foo.com/
[configuration A]
}
location /{ # http://www.foo.com/index.html
[configuration B]
}
location /documents/{ # http://www.foo.com/documents/linux.txt
[configuration C]
}
location ^~/images/{ # http://www.foo.com/images/logo.jpeg
[configuration D]
}
location ~*\.(gifljpgljpeg)${ # http://www.foo.com/documents/logo.jpg
[configuration E]
}
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错误
location /images/{
try_files $uri /images/default.gif;
}
location /{
try_files $uri $uri/index.html $uri.html =404;
}
定义客户端请求的相关配置
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
limit_except GET{
allow 192.168.1.0/24;
deny all;
}因为GET时包含HEAD的,所以是除了GET和HEAD之外其它方法仅允许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
自上而下检查,一旦匹配,将生效,条件严格的置前
示例:
location /{
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
用户访问
ngx_http_auth_basic_modu!e模块
实现基于用户的访问控制,使用basic机制进行用户认证
1、auth_basic string | off;
2、auth_basic_user_file file;
location /admin/{
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.ngxpasswd;
}
用户口令文件:
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;
示例:
location /status {
stub_status;
allow 172.16.0.0/16;
deny all;
}
日志
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 浏览器的版本类型
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$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
log_format compression "$remote_ addr-$remote_user [$time_local]"
"$request" $status $bytes_sent"
"$http_referer" "$http_user_ agent" "$gzip_ratio";
# 生产环境可以加buffer 测试环境不用加
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值任何一个,启用压缩功能
示例:
gzip on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
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之间使用一个共享的缓存