nginx学习笔记

深入理解Nginx

一、Nginx是什么?

二、为什么选择Linux

三、Nginx生成的文件有哪些?

四、Nginx的配置详解?

五、模块功能详解

六、虚拟主机配置详解?

 

 

 

 

 

 

 

 

一、Nginx是什么?

Nginxengine X)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由lgor SysoevRambler.ru(该站点为俄罗斯第二大站点)研发,第一个公开版0.1.0发布于2004104日。其源代码以类似BSD许可证的形式发布,因为它的稳定性,功能扩展性,示例配置文件和低系统资源的消耗而闻名。

二、为什么选择Nginx

1、更快~

单次请求会得到更快的响应

在高峰期(数以万计的并发请求时)比其他web服务器更快的响应;

2、高扩展性~

它完全是由多个不同功能、不同层次、不同类型且耦合度低的模块组成;

3、高可靠性~

官方提供的常用模块稳定性高,master进程在worker进程出错时可  以快速“拉起”新的worker子进程提供服务;

4、低内存消耗~

高并发

5、单机可支持10万以上的并发连接~

6、热部署~

Master管理进程与worker工作进程分离设计,使得Nginx能够提供热部署功能,即可在7×24小时不间断服务的前提下,进行Nginx的可执行文件的升级;

7、最自由的BSD许可协议~

免费,支持二次开发;

三、Nginx的安装和启动

1、安装Nginx

配置Nginxyum

[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学习笔记 

四、Nginx配置详解

1、配置文件

/etc/nginx/nginx.conf

注意事项

Ø 指令必须以分号结束;

Ø 支持使用配置变量

内建变量:由Nginx模块引入,可直接引用;

自定义变量:使用set命令进行定义

如:set variable_name value;  引用变量:$variable_name

2、配置文件的组成

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 0cpu

//0000 0010 1cpu ……

//参数可谓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

Event

Ø 事件驱动的相关配置

worker_connections number;  //每个worker进程所能打开的最大并发连接数;

//服务器承载的最大并发为

//worker_processes * worker_connections

use method      //指明并发连接请求的处理方法

//一般为 use epoll;

accept_mutex on|off    //处理新的连接请求的方法

//on意味着由各worker轮流处理新请求,

//off意味着每个心情求到达都会通知worker进程

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 { …. }

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

=:对URI做精确匹配;例如

http://www.magedu.com/,

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 ….;     //默认资源:httpserver,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;

是否缓存查找时发生错误的文件一类的信息;

 

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

6gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;

nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;

off:对代理的请求不启用;no-cache, no-storeprivate:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;

7gzip_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.

2ssl_certificate file;

当前虚拟主机使用PEM格式的证书文件;

3ssl_certificate_key file;

当前虚拟主机上与其证书匹配的私钥文件;

4ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

支持ssl协议版本,默认为后三个;

5ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;

shared:name:size]:在各worker之间使用一个共享的缓存;

6ssl_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模块;

1valid_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;

适用域:locationif in locationlimit_except

注意:proxy_pass后面的路径不带uri时,其会将locationuri传递给后端主机;

server {

server_name HOSTNAME;

location /uri/ {

proxy http://hos[:port];

}

}

http://HOSTNAME/uri –> http://host/uri

proxy_pass后面的路径是一个uri时,其会将locationuri替换为proxy_passuri

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;

指定要调用的缓存,或关闭缓存机制:

适用域:httpserverlocation

##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;  //fastcgiserver地址;

作用域locationif 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;

适用域:httpserverlocation

Off if_modified_since”字段的请求被忽略;

Before 修改时间小于或者等于这个请求头中“if_modified_since”字段的值;

Exact:精确匹配

####keepalive_disable

禁止同行为不端的浏览器保持长连接。浏览器参数指定的浏览器将会受到影响。Misie6参数将禁止老版本的ie浏览器建立长连接;

语法:keepalive_disable  none |browser….;

默认:keepalive_disable  msie6;

适用域:httpserverlocation

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

设置当读取大的客户端请求时缓冲的最大数目和尺寸。在缓冲的一个请求行不能超过这个尺寸。或者客户端414uri太大请求)信息被返回。一个请求头部域也不能超过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_modulengx_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];

基于指定的keyhash表实现请求调度,此处的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,udpUnix域套接字代理的数据流;

proxy_pass adress;

设置代理服务器的地址。地址可以指定为域名或IP地址和端口;

作用域:server

示例:

proxy_pass localhost12345;

或作为UNIX域套接字路径:

proxy_pass unix/tmp/stream.socket;

如果域名解析为多个地址,则所有这些地址都将以循环方式使用。此外,地址可被指定为一个 服务器组。

地址也可以使用变量(1.11.3)指定:

proxy_pass $ upstream

proxy_connect_timeout time

定义与代理服务器建立连接的超时;

默认超时时间是60s

作用域:streamserver

proxy_timeout timeout;

设置timeout两者之间的连续度或者写在客户端或代理服务器连接操作。如果在此时间内没有数据传输,则连接关闭;

 

 

六、Nginx虚拟主机配置详解

1、什么是虚拟主机?

虚拟主机是特殊的软硬件技术,他把一台服务器主机分成一台台“虚拟主机”,每台虚拟主机都可以成为一个独立的网站,具有独立的域名,并可提供独立的Internet服务;

利用虚拟主机的特性,Nginx完全可以使用一台服务器提供完全独立的WWWMAILFTP服务或同时为多个站点进行服务。

2、虚拟主机的类别

基于IP的虚拟主机

基于端口的虚拟主机

基于域名的虚拟主机

该种虚拟主机为最常用的虚拟主机形式;

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

(0)
guo_ruillinguo_ruillin
上一篇 2017-03-15
下一篇 2017-03-15

相关推荐

  • 关于取路径名与基名的探讨和扩展-20160806

                          关于取路径名与基名的探讨和扩展     这两天学习grep  ,   egrep  ,  sed  &nb…

    Linux干货 2016-08-07
  • 第九周作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; 2、写一个脚本     (1) 获取当前主机的主机名,保存于hostname变量中;     (2) 判断此变量的值是否为loc…

    2017-04-20
  • grep、egrep正则表达式之初窥门径

    何谓正则表达式 正则表达式,又称正规表示法、常规表示法(Regular Expression,在代码中常简写为regex、regexp或RE),是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的…

    2015-03-19
  • 使用 nice、cpulimit 和 cgroups 限制 cpu 占用率

    Linux内核是一名了不起的马戏表演者,它在进程和系统资源间小心地玩着杂耍,并保持系统的正常运转。 同时,内核也很公正:它将资源公平地分配给各个进程。 但是,如果你需要给一个重要进程提高优先级时,该怎么做呢? 或者是,如何降低一个进程的优先级? 又或者,如何限制一组进程所使用的资源呢? 答案是需要由用户来为内核指定进程的优先级 大部分进程启动时的优先级是相同…

    Linux干货 2015-02-14
  • 老王的心路历程(二):下一站Web体验监控产品

    在上一篇文章中,和大家聊到了建立Web应用体验监控体系,经过了概念阶段,也完成了技术选型,就进入了把实质性的产品研发阶段。作为产品经理,时刻不敢忘记我们的产品目标:无限感知你的用户,建立完备的体验监控体系,驱动产品的设计、开发和运维! 一、一切皆操作 仔细分析终端用户和Web应用及网站的交互过程,无论是打开页面、点击链接或按钮,还是填写表单、提交查询,一切皆…

    2016-08-15
  • HAProxy初探及简单案例_Net21_第二周

    前言 随着互联网业务的迅猛发展,大型电商平台和门户网站对系统的可用性和可靠性的要求越来越高,高可用集群、负载均衡集群成为一种热门的系统架构解决方案。在众多的负载均衡解决方案中,有基于硬件的负载均衡设备,例如F5、Big-IP等,也有基于软件的负载均衡产品,如LVS、Nginx以及本文介绍的HAProxy等。在软件的负载均衡产品中,又分为两种实现方式,分别是基…

    Linux干货 2016-07-22