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)
上一篇 2017-03-15 19:09
下一篇 2017-03-15 19:09

相关推荐

  • NFS服务

    NFS服务:       NFS:Network File System 网络文件系统,基于内核的文件系统。 Sun公司开发,通过使用NFS,用户和程序可以像访 问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现 。 RPC采用C/S模式。客户机请求程序…

    2017-08-14
  • Support

    A high value will take longer for the mic to stop taking input and vice versa. When the key is not being pressed, no matter how much you will talk, others will not be able to hear …

    Linux干货 2022-12-15
  • linux三剑客之grep

    linux三剑客之grep        所谓三剑客的工具有“grep”、“sed” 、“awk”,他们都是不谋而合的文本搜索查找处理的强大工具。grep 是 Ken Thompson 写的,他也是 Unix 的创造者。 gerp及正则表达式    grep全称(GLobal search Regu…

    Linux干货 2016-08-08
  • yum用法第二篇-自定义创建yum仓库

    一、前言      上次写了yum命令的介绍及常见使用说明,这次打算继续整理下如何自定义创建yum仓库,这在企业中也是非常常见的设置方式,有些公司为了服务器安全是不允许连接外网的,自定义创建yum仓库正好可以实现局域网单独安装管理程序包这种需求。 二、用法说明      1.使用…

    Linux干货 2015-09-22
  • 从Linux小白到大牛——与狼共舞的日子2

    马哥教育网络班21期+第2周课程练习 1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cp:copy,复制文件 cp SRC DEST   SRC为文件     如果目录不存在:新建DEST,并将SRC中内容填充至DEST中     如果目…

    Linux干货 2016-07-17
  • 8.3_Linux习题和作业

    课堂习题 1.当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作? 答:不能cd进该目录 2.当用户xiaoqiang对/testdir 目录无读权限时,意味着无法做哪些操作? 答:不能查看目录内的文件列表,不能cd,也不能查看目录里面文件的元数据 3.当用户wangcai 对/testdir 目录无写权限时,该目录下的只读文件…

    Linux干货 2016-08-05