深入理解Nginx
一、Nginx是什么?
二、为什么选择Linux ?
三、Nginx生成的文件有哪些?
四、Nginx的配置详解?
五、模块功能详解
六、虚拟主机配置详解?
一、Nginx是什么?
Nginx(engine X)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由lgor Sysoev为Rambler.ru(该站点为俄罗斯第二大站点)研发,第一个公开版0.1.0发布于2004年10月4日。其源代码以类似BSD许可证的形式发布,因为它的稳定性,功能扩展性,示例配置文件和低系统资源的消耗而闻名。
二、为什么选择Nginx?
1、更快~
u 单次请求会得到更快的响应
u 在高峰期(数以万计的并发请求时)比其他web服务器更快的响应;
2、高扩展性~
u 它完全是由多个不同功能、不同层次、不同类型且耦合度低的模块组成;
3、高可靠性~
u 官方提供的常用模块稳定性高,master进程在worker进程出错时可 以快速“拉起”新的worker子进程提供服务;
4、低内存消耗~
u 高并发
5、单机可支持10万以上的并发连接~
6、热部署~
u Master管理进程与worker工作进程分离设计,使得Nginx能够提供热部署功能,即可在7×24小时不间断服务的前提下,进行Nginx的可执行文件的升级;
7、最自由的BSD许可协议~
u 免费,支持二次开发;
三、Nginx的安装和启动
1、安装Nginx
配置Nginx的yum源
[root@localhost yum.repos.d]# cat nginx.repo
[nginx]
name=nginx
baseurl=http://nginx.org/packages/centos/7/x86_64/
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]#
安装Nginx
[root@localhost yum.repos.d]# yum install -y nginx
生成的文件
[root@localhost yum.repos.d]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d //虚拟主机配置目录
/etc/nginx/conf.d/default.conf //默认的虚拟主机配置
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf //nginx的配置文件
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx //主Nginx程序
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.10.2
/usr/share/doc/nginx-1.10.2/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx
[root@localhost yum.repos.d]#
2、Nginx的启动和测试
启动
[root@localhost yum.repos.d]# systemctl start nginx.service
[root@localhost yum.repos.d]# ss -antp|grep :80
LISTEN 0 128 *:80 //可监听到80端口已经启用 *:* users:(("nginx",pid=34244,fd=6),("nginx",pid=34243,fd=6))
[root@localhost yum.repos.d]#
测试
访问:http://172.16.80.72
四、Nginx配置详解
1、配置文件
/etc/nginx/nginx.conf
注意事项
Ø 指令必须以分号结束;
Ø 支持使用配置变量
内建变量:由Nginx模块引入,可直接引用;
自定义变量:使用set命令进行定义
如:set variable_name value; 引用变量:$variable_name
2、配置文件的组成
u Manblock
Ø 正常运行必备的配置
user nginx; //用户为nginx
pid /var/run/nginx.pid; //主进程pid表示存放路径
Include file | mask; //指明包含进来的其他配置文件片段
load_module file; //指明要装载的动态模块
Ø 优化性能的相关配置
worker_processes 1; //工作进程数量,一般小于或者等于实际的CPU数量
//参数也可为auto,自动分配cpu数量;
worker_cpu_affinity cpumask …; //绑定工作cpu;
//0000 0001 为0号cpu
//0000 0010 为1号cpu ……
//参数可谓auto,自动选择cpu进行工作;
work_priority number; //指定worker进程的nice值,设定worker进程优先 //级:[-20,20]
worker_rlimit_nofile number; //worker进程所能够打开的文件数量上限;
//理论值应为$(ulimit -n) 除以worker进程数
//实际应为ulimit -n
Ø 用于调试和定位问题的相关配置
daemon on|off; //是否以守护进程运行Nginx;
master_process on|off; //是否以master/worker模型运行nginx;默认为on;
error_log /var/log/nginx/error.log debug; //error_log file [level];
//错误日志存放位置,日志级别
//debug,info,notice,warn,error,crit,alert,emerg
u Event
Ø 事件驱动的相关配置
worker_connections number; //每个worker进程所能打开的最大并发连接数;
//服务器承载的最大并发为
//worker_processes * worker_connections
use method //指明并发连接请求的处理方法
//一般为 use epoll;
accept_mutex on|off //处理新的连接请求的方法
//on意味着由各worker轮流处理新请求,
//off意味着每个心情求到达都会通知worker进程
u http
Ø 与套接字相关配置
server { …. } //配置一个虚拟主机
server{
listen address[:port]|port;
Server_name SERVER_NAME;
Root /path/to/Document_root
}
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: 设定为默认虚拟主机;
//ssl:限制仅能够通过ssl连接提供服务
//backlog=number:后援列队长度
//rcvbuf=size:接收缓冲区大小
//sndbuf=size:发送缓冲区大小
server_name name ….;
指明虚拟主机名称:后可跟多个由空白字符分隔的字符串;
支持*统配任意字符串:server_name *.magedu.com www.magedu.*
//*处可为任意字符
支持“~”起始的字符做正则表达式模式匹配:server_name ~^www\d+\.magedu\.com$ // \d+ :为至少一个数字;
Server_name的匹配机制如下:
a. 字符串精确匹配
b. 左侧*通配符
c. 右侧*通配符
d. 正则表达式
Tcp_nodelay on|off //在keepalived模式下的连接是否启用TCP_NODELAY //选项;
Sendfile on|off //是否启动sendfile功能
Root path:
设置web资源路径映射;用于指明用户请求url所对应的本地文件系统上的文档 所在目录路径;
可用位置:http,server,location,if in location
Location [ = | ~ | ~* | ^~ ] uri { …. }
Location @name { …. }
在一个server中location配置段可存在多个,用于实现从uri到文件系统弄的路径映射;nginx会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;
=:对URI做精确匹配;例如
http://www.magedu.com/index.html
Location = / {
…..
}
~:对URI做正则表达式模式匹配,区分字符大小写;
~*:对URI做正则表达式模式匹配,不区分字符大小写;
^~:对URI的左半部分做匹配检查,不区分字符大小写;
不带符号:匹配起始于此uri的所有url;
匹配优先级:=,^~,~,~*,不带符号;
root /vhosts/www/htdocs/
http://www.magedu.com/index.html –> /vhosts/www/htdocs/index.html
server {
root /vhosts/www/htdocs/
location /admin/ {
root /webapps/app1/data/
}
}
alias path;
定义路径别名,文档映射的另一种机制;仅能使用与location上下文;
1. root,给定的路径对应于location中/uri/左侧的/;
2. alias,给定的路径对应于location中的/uri/左侧的/;
Index file ….; //默认资源:http,server,location
Error_page code ..[=[responde]] uri;
//code 是响应码,定义响应码相关页面;
try_files file … uri;
Ø 定义客户端请求的相关配置
Keepalive_timeout timeout [header timeout];
//设定保持连接的超时时长,0表示禁止长连接; //默认为75s;
Keepalive_requests number; //在第一次长连接上所允许请求的资源的最大数量,
//默认为100;
Keepalive_disable none | browser ….;
//禁止使用何种浏览器;
Send_timeout time; //向客户端发送响应报文的超时时长,此处,是指两次写 //操作之间的间隔时长;
Client_body_buffer_size size;
用于接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,将其暂存到磁盘上由clien_body_temp_path指令所定义的位置;
Client_body_temp_path path [level1 [level2 [level3]] ];
设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;
例如:client_body_temp_path /var/tmp/client_body 1 2 2 //16进制数字
Ø 对客户端进行限制的相关配置
Limit_rate rate; //限制响应给客户端的速率,
//单位bytes/second,0表示不限制;
Limit_except method …. //允许method的客户端
Limit_except GET {
Allow 192.168.1.0/24;
Deny all ;
}
Ø 文件操作优化配置
Aio on | off threads[=pool]; //是否启用aio功能;
//aio异步读取
Directio size | off;
在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例 如directio 4m;
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指令所指定的次数的缓存项即为非活动项;
Open_file_cache_valid time; //缓存项有效性的检查频率;默认为60s;
open_file_cache_min_uses number;
在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;
Open_file_cache_errors on | off;
是否缓存查找时发生错误的文件一类的信息;
u mail
五、Nginx的模块详解
ngx_http_access_module
Ngx_http_auth_basic_module
Ngx_http_stub_status_module
Ngx_http_stub_status_module
Ngx-http_log_module
Ngx_http_gzip_module模块;
Ngx_http_ssl_module模块;
ngx_http_rewrite_module模块;
Ngx_http_refer_modulem模块;
Ngx_http_proxy_module模块;
Ngx_http_headers_module模块;
ngx_http_fastcgi_module模块;
Ngx_http_core_module模块;
Ngx_http_upstream_module模块;
Ngx_stream_proxy_module模块;
ngx_stream_core_module模块;
Ngx_http_access_module模块
本模块主要实现基于ip的访问控制功能;
Allow address |CIDR |unix: |all; //允许访问的ip;
Deny address |CIDR |unix; |all; //拒绝的访问Ip;
适用于:http,server,laction,limit_except;
Ngx_http_auth_basic_module模块
实现基于用户的访问控制,使用basic机制进行用户认证;
Auth_basic string | off;
Auth_basic_user_file file;
Location /admin/ {
Alias /webapps/app1/data/;
Auth_basic “admin area”
Auth_basic_user_file /etc/nginx/.ngxpasswd;
}
nginx本身不提供htpasswd命令,htpasswd命令则有httpd-tools提供;
Ngx_http_stub_status_module模块
实现用于输出Nginx的基本状态信息;
Active connections : 291
Server accepts handled requests
Xxx xxx xxx xxx
Reading :6 writing: 179 waiting 106
Active connetions:活动状态的连接数;
Accetps : 已经接受的客户端请求的总数;
Handled:已经完成处理完成的客户端请求总数;
Requests:客户端发来的总的请求书;
Writing:处于向客户端发送响应报文过程中的连接数;
Waiting:处于等待客户端发出来的请求的空闲连接数;
stub_status;
配置实例:
Location /basic_status {
Stub_status;
}
Ngx-http_log_module模块
log_format name string ….; //实现日志格式模块
String 可以使用Nginx核心模块及其他模块内嵌的变量;
Access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
Access_log off;
访问日志文件路径,格式及相关的缓冲的配置;
open_log_file_cache max=N [incative=time] [min_uses=N] [valid=time];
Open_log_file-cache off;
缓存各日志文件相关的元数据信息;
Max:缓存的最大文件描述符数量;
min_uses:在inactive指定的时长内访问大于等于此值方可被当做活动项;
Inactive:非活动项;
Valid:这个指多长时间检查一次缓存信息有效性。也就是说即使我一直访问这个文件,30S后会检查此文件的更改信息是否编发,发现变化就更新。
Ngx_http_gzip_module模块;
静态压缩模块
1、gzip on | off; //gzip开关
2、gzip_comp_level level; //压缩级别[1-9];
3、gzip_disable regex …;
将"User-Agent"请求头进行正则匹配,满足regex正则的请求对其响应时不启用gzip压缩,通常用来去除ie6等对gzip压缩支持不是很好的浏览器的gzip压缩;
4、gzip_min_length length;
启用gizp压缩的响应临界值大小,仅与响应头的"Content-Length"的值进行比较,只有大于gzip_min_length的响应才会进行压缩,比较合理的值是1000;
5、gzip_buffers number size;
设置gzip压缩时使用的缓冲区的个数以及每个缓冲区的大小,例如gzip_buffers 32 4k表示一共32个缓冲区,每个缓冲区4KB;
6、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;
nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
off:对代理的请求不启用;no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;
7、gzip_types mime-type …;
压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;
指定需要压缩的响应内容类型,例如text/css application/javascript application/json application/xml分别表示对css js json xml进行压缩,多个用空格分开,*表示所有。注意:text/html类型总会被压缩,不需要显式的指定
Ngx_http_ssl_module模块;
1、 ssl on | off;
Enables the HTTPS protocol for the given virtual server.
2、ssl_certificate file;
当前虚拟主机使用PEM格式的证书文件;
3、ssl_certificate_key file;
当前虚拟主机上与其证书匹配的私钥文件;
4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持ssl协议版本,默认为后三个;
5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;
shared:name:size]:在各worker之间使用一个共享的缓存;
6、ssl_session_timeout time;
客户端一侧的连接可以复用ssl session cache中缓存 的ssl参数的有效时长;
配置示例:
server {
listen 443 ssl;
server_name www.magedu.com;
root /vhosts/ssl/htdocs;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:sslcache:20m;
}
ngx_http_rewrite_module模块;
将用户请求的URI基于regex所描述的模式进行检查,而后完成替换;
1、rewrite regex replacement [flag]
将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;
注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
[flag]:
last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环;
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;
redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;
2、Return
Return code [text];
Return code URL;
Return URL;
停止处理并指定返回code到客户端。
3、 rewrite_log on | off;
是否开启重写日志;
4、 if (condition) { … }
引入一个新的配置上下文 ;条件满足时,执行配置块中的配置指令;server, location;
condition:
比较操作符:
==
!=
~:模式匹配,区分字符大小写;
~*:模式匹配,不区分字符大小写;
!~:模式不匹配,区分字符大小写;
!~*:模式不匹配,不区分字符大小写;
文件及目录存在性判断:
-e, !-e
-f, !-f
-d, !-d
-x, !-x
5、set $variable value;
设置用户自定义变量;
Ngx_http_refer_modulem模块;
1、valid_referers none | blocked | server_names | string …;
定义referer首部的合法可用值;
none:请求报文首部没有referer首部;
blocked:请求报文的referer首部没有值;
server_names:参数,其可以有值作为主机名或主机名模式;
arbitrary_string:直接字符串,但可使用*作通配符;
regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*\.magedu\.com;
配置示例:
valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
if($invalid_referer) {
return 403;
}
Ngx_http_proxy_module模块;
代理模块
##proxy_pass URL;
适用域:location,if in location,limit_except;
注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;
server {
…
server_name HOSTNAME;
location /uri/ {
proxy http://hos[:port];
}
…
}
http://HOSTNAME/uri –> http://host/uri
proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri;
server {
…
server_name HOSTNAME;
location /uri/ {
proxy http://host/new_uri/;
}
…
}
http://HOSTNAME/uri/ –> http://host/new_uri/
##proxy_set_header field value;
设定发往后端主机的请求报文的请求首部的值:
proxy_set_header X-Real-IP $remote_addr;
Proxy_set_header X-Fowaeded-For $proxy_add_x_forwarded_for;
##proxy_cache_path
定义可用于proxy功能的缓存;Context:http
proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
##proxy_cache zone |off;
指定要调用的缓存,或关闭缓存机制:
适用域:http,server,location
##proxy_cache_key string;
缓存中用于“键”的内容;
Proxy_cache_key $scheme$proxy_host$request_uri;
##proxy_cache_valid [code …] time;
定义对特定响应吗的响应内容的缓存时长;
定义在http{…}中;
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;
定义在需要调用缓存功能的配置段,例如server{…};
proxy_cache pxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
##proxy_cache_use_stale
##proxy_cache_methods GET | HEAD | POST….;
##proxy_hide_header fidle;
##proxy_connect_timeout time; 默认为60s;
Ngx_http_headers_module模块;
向代理服务器响应,给客户端的的响应报文添加自定义首部,或者修改指定首部的值;
##add_header name valie [always]; //添加自定义首部
add_header X-via $server_addr;
Add_header X-Accel $server_name;
##expires [modified] time;
Expires epoch |max | off;
用于定义expire或者Cache-Control首部的值;
ngx_http_fastcgi_module模块;
本模块主要用于连接fastcgi;用于lnmp搭建;
## fastcgi_pass address; //fastcgi的server地址;
作用域location,if in location;
##fastcgi_index name; //fastcgi默认的主页页面;
##fastcgi_param parameter value [if_not_empty];
应该设置一个参数传递给FastCGI服务器。值可以包含文本、变量和它们的组合。这些指令是继承了以前的水平当且仅当没有fastcgi_param指令定义在当前水平。
/etc/nginx/fastcgi_params 定义了变量传递参数;
示例:
location ~* \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
//fpm变量名称, /usr/share/nginx/html$fastcgi_script_name;
//$fastcgi_script_name; $之前不应该有/,因为在资源访问的时候本身就有一个/; nginx的变量名称
include fastcgi_params;
}
配置示例2:通过/pm_status和/ping来获取fpm server状态信息;
location ~* ^/(pm_status|ping)$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
###fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
用于定义fastcgi的缓存;缓存位置为磁盘上的文件系统,由path所指定路径来定义;
Levels=levels; 缓存目录的层级数量,以及每一级的目录数量,levels=ONE:TWO:THREE, leves=1:2:2
Keys_zone=name:size //K/v映射的内存空间的名称及大小;
Inactive=time //非活动时长
max_size=size //磁盘上用于缓存数据的缓存空间上限
###fastcgi_cache zone |off ; //调用指定的缓存空间来缓存数据;
//作用域:http,server,location
###fastcgi_cache_key string; //定义用做缓存项的key的字符串;
###fastcgi_cache_min_uses number; //缓存空间中的缓存项在inactive定义的非活动内至 //少要被访问所指定的次数方可被认作是活动项;
###fastcgi_cache_valid [code …] time //不同响应吗各自的缓存时长;
示例:
http {
…
fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;
…
server {
…
location ~* \.php$ {
…
fastcgi_cache fcgi;
fastcgi_cache_key $request_uri;
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 301 1h;
fastcgi_cache_valid any 1m;
…
}
…
}
…
}
fastcgi_keep_conn on
Ngx_http_core_module:
http核心模块
####aio on|off |sendfile; //默认为关闭
该指令的功能是启用或禁用异步I/0 (AIO);
适用域:http,server,location
####alias path;
针对location中的位置指定一个别名,访问location中的相关信息相当于访问别名的位置;
location /images/ {
alias /data/w3/images/;
}
####client_body_buffer_size size;
设置读取客户端请求的body时的缓存大小。在某些情况下当前请求的body大于缓存尺寸时,body将被缓存到本地磁盘的临时文件中。默认情况下缓冲区大小是两个内存页的大小;
用法:client_body_buffer_size 8K|16K
适用域:http,server,location
####cilent_body_in_file_only on|clean |off //默认为off;
确定nginx是否应该保存整个客户端请求的body在文件里。
适用域:http,server,location
####client_body_in_single_buffer on|off
确定Nginx是否应该保存整个客户端请求的body在单个缓存中。这个指令被推荐使用当用户使用“$request_body”变量时;
适用域:http,server,location
####client_body_temp_path path[level1 [level2 [level3 ]]];
定义一个存储客户端请求body的临时文件目录,3级子目录的层次结构,可以使用下面指定的目录。
示例:client_body_temp_path /spoo/nginx/client_temp;
适用域:http,server,location
一个临时文件可能看起来像这样:
/ spool/nginx/client_temp/7/45/00000123457
####http
为http服务器相关配置指令提供一个上下文环境
语法:http{…}
适用域:主配置文件
####if_modified_since off|exact |before;
规定如何对响应时间同请求头中“if-Modified-Since”字段的值进行比较。
默认:if_modified_since exact;
适用域:http,server,location;
Off “if_modified_since”字段的请求被忽略;
Before 修改时间小于或者等于这个请求头中“if_modified_since”字段的值;
Exact:精确匹配
####keepalive_disable
禁止同行为不端的浏览器保持长连接。浏览器参数指定的浏览器将会受到影响。Misie6参数将禁止老版本的ie浏览器建立长连接;
语法:keepalive_disable none |browser….;
默认:keepalive_disable msie6;
适用域:http,server,location;
####keepalive_requests number;
设置一个长连接中最多可以允许的request请求数量。当超过这个数量后,这个链接被释放。
默认:keepalive_requests 100;
适用域:http,server,location
####keepalive_timeout
设置一个客户端的链接在server端保持存活的超时时间。参数为0则禁止客户端的keep-alive的链接。可选参数用来在http相应头中设置一个字段,字段名称keep-alive,字段值为:header_timeou;
语法:keepalive_timeout timeout[header_timeout];
默认:keepalive_timeout 75s;
适用域:http,server,location
####large_client_header_buffers numbersize;
设置当读取大的客户端请求时缓冲的最大数目和尺寸。在缓冲的一个请求行不能超过这个尺寸。或者客户端414(uri太大请求)信息被返回。一个请求头部域也不能超过buffer的尺寸,或者客户端成收到400(坏的请求)信息。缓冲仅在被需要时才创建。默认的buffer的尺寸是8k字节。如果请求的处理接受后,处理连接被转换成keep-alive状态,缓冲被释放。
默认:large_client_header_buffers 4 8k;
适用域:http,server
####limit_except
现在在一个location配置中允许的内置方法。这个方法参数可以是下面参数:GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, or PATCH。运行Get方法也允许Head方法。到其他方法的访问能够采用ngx_http_access_module和ngx_http_auth_basic_module指令来限定。
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
####limit_rate
向客户端相应的传输速度限制。这个速率制定的单位是 字节/秒钟。 特殊值0禁止这个速度值限制。该限制是针对每个请求的, 为此假设一个客户端模拟打开两个客户端连接,总的被现在的速度将是制定速率的2被。
速度也能用$limit_rate变量来设置。当速度限制在一个特定的条件下发生时,这种现实是比较好的。例如:
server {
if ($slow) {
set $limit_rate 4k;
}
…
}
另外这个速度限制也能在X-Accel-Limit-Rate相应头中指令中进行控制。本指令的功能能够通过proxy_ignore_headers指令来限制。
####limit_rate_after
设置初始之后,对客户端的进一步相应的速度限制.
location /flv/ {
flv;
limit_rate_after 500k;
limit_rate 50k;
}
ngx_http_upstream_module模块
用于定义组负载均衡组
####upstream name {…..}
定义后端的服务器组;引入一个新的上下文;
默认的调度方法是wrr;
作用域:http
####server address [parameters];
定义服务器地址和相关的参数;
地址格式:
IP[:PORT]
HOSTNAME[:PORT]
Unix:/PATH/TO/SOME_SOCK_FILE
参数:
Weight=number //权重,默认为1
max_fails=number //失败尝试的最大次数;
fail_timeout=time //设置服务器为不可用状态的超时时长;
Backup //把服务器标记为“备用”状态;
Down //手动标记其为不可用,一般灰度上线时可采用该方式;
####least_conn;
最少连接调度算法:
当server拥有不同权重时为wlc;当所有后端主机的连接数相同时;则使用wrr进行调度;
####least_time_header | last byte;
最短平均响应时长和最少连接;
Header:response_header;
Last_byte:full_response;
仅plus有效
####ip_hash;
源地址绑定;
####hash key [consistent];
基于指定的key的hash表实现请求调度,此处的key可以文本、变量或者二者的组合;
Consistent:参数,指定使用一致性hash算法;
示例:
Hash $request_uri consistent
Hash $remote_addr
Hash $cookie_name
####keepalive connections;
可以使用长连接的连接数量;
ngx_stream_core_module模块;
Listen address:”port” [ssl] [udp] [backlog=number] [bind] [ipv6only=on|off] [reuseport]
默认为监听tcp协议;
Udp:监听udp协议的端口;
ngx_stream_proxy_module模块
允许在tcp,udp和Unix域套接字代理的数据流;
proxy_pass adress;
设置代理服务器的地址。地址可以指定为域名或IP地址和端口;
作用域:server;
示例:
proxy_pass localhost:12345;
或作为UNIX域套接字路径:
proxy_pass unix:/tmp/stream.socket;
如果域名解析为多个地址,则所有这些地址都将以循环方式使用。此外,地址可被指定为一个 服务器组。
地址也可以使用变量(1.11.3)指定:
proxy_pass $ upstream
proxy_connect_timeout time;
定义与代理服务器建立连接的超时;
默认超时时间是60s;
作用域:stream,server
proxy_timeout timeout;
设置timeout两者之间的连续度或者写在客户端或代理服务器连接操作。如果在此时间内没有数据传输,则连接关闭;
六、Nginx虚拟主机配置详解
1、什么是虚拟主机?
虚拟主机是特殊的软硬件技术,他把一台服务器主机分成一台台“虚拟主机”,每台虚拟主机都可以成为一个独立的网站,具有独立的域名,并可提供独立的Internet服务;
利用虚拟主机的特性,Nginx完全可以使用一台服务器提供完全独立的WWW、MAIL、FTP服务或同时为多个站点进行服务。
2、虚拟主机的类别
u 基于IP的虚拟主机
u 基于端口的虚拟主机
u 基于域名的虚拟主机
该种虚拟主机为最常用的虚拟主机形式;
3、虚拟主机的配置
1、基于IP的虚拟主机
server {
listen 80; //监听80端口
server_name 172.16.80.72; //服务器地址为
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
root /nginx/ip; //该路径为本定义虚拟主机的Document的路径
# index.html; //默认的主页面可以不写;
}
error_page 404 /404.html;
location = /404.html { //定义404错误页面
root /nginx/ip;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /nginx/ip
}
2、基于端口的虚拟主机
server {
listen 81; //监听80端口
server_name 172.16.80.72; //服务器地址为
}
3、基于域名的虚拟主机
server {
listen 80; //监听80端口
server_name www.guoruilin.com; //服务器地址为
}
原创文章,作者:guo_ruillin,如若转载,请注明出处:http://www.178linux.com/66628