首页 > 代码库 > Nginx入门--安装和配置

Nginx入门--安装和配置

Nginx简介

    nginx是一款由俄罗斯程序设计师Lgor Sysoev开发的高性能HTTP和反向代理服务器软件。它可以运行在UNIX、GNU/Linux、BSD以及Microsoft等操作系统中轻量级的服务器软件,目前世界排名第三,第一占据大部分的市场份额的是apache,第二的是微软公司的IIS站的比重大约是23%。nginx自开发出来04年公布出来市场份额逐年上升,到今年年底已经达到14%左右,所拥有的功能是前两者所没有的,估计占据市场份额还要不断增大,因此好好学习一下这个流行的服务器软件还是很有必要的。

Nginx的特性

  模块化设计 较好的扩展性  高可靠性  低内存消耗   支持热部署(不停机更新配置文件,更换日志文件,更新服务程序文件。)

Nginx的基本功能

    提供静态资源的web服务器,能缓存打开的文件文件描述符

     支持http、smtp、pop3协议的反向代理服务器

     支持缓存和简单的负载均衡和容错

     支持FastCGI

     模块化,非DSO机制,过滤器zip,SSI及图像大小调整;

     支持SSL

Nginx的扩展功能
    基于名称和IP的虚拟主机;
    支持keepalive
    支持平滑升级
    定制访问日志 ,支持使用日志缓冲区提高日志存储性能
    支持url rewrite
   支持路径别名
   支持基于IP及用户的访问控制
   支持速率限制,支持并发数限制

Nginx的基本架构:
一个master进程,生成一个或多个worker
事件驱动: epoll, kqueue, /dev/poll (event ports)
消息通知:select, poll, rt signals
支持sendfile, sendfile64
支持AIO
支持mmap

nginx工作模式: 非阻塞、事件驱动、一个master生成一个或多个worker, 每个worker响应n个请求。

概括图:技术分享


Nginx的编译安装方法

      从官网下载好源码包并解压到/usr/src目录中:tar xf nginx-1.6.2.tar.gz -C /usr/src

    为防止编译安装过程中出现问题,yum安装Development Tools和Server Platform Development包组

    添加nginx系统组:groupadd -r nginx

    添加nginx系统用户:useradd -g nginx -r nginx

    切换到nginx的解压目录中,准备执行编译安装相关操作:cd /usr/src/nginx-1.6.2/;建议编译安装之前先使用./configure --help 根据自己的需求添加模块。

root@localhost nginx-1.6.2]# ./configure --prefix=/usr/local/nginx \  # nginx安装目录
 --conf-path=/etc/nginx/nginx.conf  \              # nginx配置文件路径
 --user=nginx  \                                   # 指定启动nginx的系统用户          
  --group=nginx  \                                 # 制动启动nginx的系统组
  --error-log-path=/var/log/nginx/error.log \      # 错误日志文件路径
  --http-log-path=/var/log/nginx/access.log \      # 访问日志路径
  --pid-path=/var/run/nginx/nginx.pid   \          # pid文件路径
  --lock-path=/var/lock/nginx.lock   \             # 锁文件路径
  --with-http_ssl_module   \                       # 启用ssl模块
  --with-http_stub_status_module \             # 启用NginxStatus功能,以监控nginx当前状态
  --with-http_gzip_static_module  \            # 启用gzip_static_module模块
  --with-http_flv_module   \                   # 启用流媒体模块
  --with-http_mp4_module   \                   # 启用mp4流媒体模块        
  --http-client-body-temp-path=/var/tmp/nginx/client \ # 客户端请求报文包体临时文件路径
  --http-proxy-temp-path=/var/tmp/nginx/proxy  \        # 报文反向代理临时文件路径
  --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \     # 报文FastCGI临时文件路径
[root@localhost nginx-1.6.2]# make && make install

以上安装的过程是需要安装prce-devel和openssl-devel包组的,如果没有提前安装会报错的。

编译安装以后首先需要编写Nginx的服务脚本使其可以正常启动和关闭。操作如下:

vim /etc/rc.d/init.d/nginx  编辑脚本内容为:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse #               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
  
# Source function library.
. /etc/rc.d/init.d/functions
  
# Source networking configuration.
. /etc/sysconfig/network
  
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
  
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
  
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
  
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  
lockfile=/var/lock/subsys/nginx
  
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed ‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -`
   options=`$nginx -V 2>&1 | grep ‘configure arguments:‘`
   for opt in $options; do
   if [ `echo $opt | grep ‘.*-temp-path‘` ]; then
   value=http://www.mamicode.com/`echo $opt | cut -d "=" -f 2`
   if [ ! -d "$value" ]; then
   # echo "creating" $value
   mkdir -p $value && chown -R $user $value
   fi
   fi
   done
}
  
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
  
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
  
restart() {
configtest || return $?
stop
sleep 1
start
}
  
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
  
force_reload() {
restart
}
  
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
  
rh_status() {
status $prog
}
  
rh_status_q() {
rh_status >/dev/null 2>&1
}
  
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac

接着更改服务脚本的权限设置开机启动:

技术分享在浏览器上测试:

技术分享


Nginx常用配置(配置文件/etc/nginx/nginx.conf)

         Nginx的配置文件是一个纯文本,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的。每个block一般以一个大括号“{}”来表示,block可以分为几个层次,整个配置文件中main指令位于最高层,在main层下面可以有Events、HTTP等层级,而在HTTP层中又包含了server层,即server block,server block中又可分为location层,并且一个server block中可以包含多个location block。

         

main主配置段的指令的类别

    用于调试、定位问题

    正常运行必备的配置

    优化性能的配置

    事件相关配置

    master以root身份运行,因为小于1024的端口也就是80只有root有权限启动;

    worker是以我们指定的用户运行



正常运行的必备配置:

1、user USERNAME  [GROUPNAME];

指定运行worker进程的用户和组,例如:user  nginx  nginx;#指定运行worker进程的用户和组,如果在编译中没有指定,需将注释去掉,以nobody身份运行worker进程

2、指定PID文件:   Pid   /path/to/pid_file  #指定Nginx的pid文件,如果在编译中没有指定,需要在main配置段中定义

3、worker_rlimit_nofile   #:指定一个worker进程所能够打开的最大文件句柄数;

         service  nginx  reload   重新 加载 nginx配置文件;

4、worker_rlimit_sigpending  #:指定每个用户能够发往worker的信号数量;


优化性能的相关配置

1    worker_process NUM 设定master进程启动的worker进程数,具体需要看CPU的核心数,生产环境中常将其设置为cpu核心数减1

2    worker_cpu_affinity CPUMASK…… 绑定worker进程至指定CPU上,如:

               worker_processes     4;

               worker_cpu_affinity 0001 0010 0100 1000;

3    timer_resolution INTERVAL 设定更新缓存的时间间隔,如:timer_resolution  100ms;

4    worker_priority nice_NUM 设定worker进程运行的优先级(按nice值设置),默认为0;如:worker_priority -20


事件event相关的配置(以下配置需写在event {……}中)

1    worker_connections NUM  每个worker进程所能够响应的最大并发请求数,它与worker_processes共同决定能响应的最大客户数maxclients的值。

                   maxclients = worker_processes * worker_connections

2    而在反向代理场景中,其计算方法与上述公式不同,因为默认情况下浏览器将打开2个连接,而nginx会为每一个连接打开2个文件描述符,因此,其maxclients的计算方法为:

                  maxclients = worker_processes * worker_connections/4

3    accept_mutex on|off 是否打开Nginx的负载均衡锁,设为on时,能使多个worker进程轮流地、序列化地与响应新请求

4    lock_file /PATH/TO/LOCK_FILE 负载均衡锁的路径

5    accept_mutex_delay INTERVAL 等待负载均衡锁的时间间隔

6    use epoll|rgsig|select|poll 设定worker进程使用的事件模型IO,建议让Nginx自动选择


用于调试、定位问题的相关配置

    daemon off|on  是否以守护进程的方式启动nginx,定位问题时设为off,正常环境为on

    master_process on|off  是否以master/worker模型来运行nginx

    error_log /PATH/TO/error_log debug|info|notice|warn|error|crit|alert|emerg  设定错误日志文件及其级别;出于调试的目的,可以使用debug级别,但此级别只有在编译nginx时使用了--with-debug选项才有效;要禁用错误日志,不能使用“error_log off;”,而要使用类似如下选项:

    error_log /dev/null crit   。



http配置段的常用参数


虚拟主机相关的配置:

1、server{ }

定义一个虚拟主机:

 

2、listen

监听的端口

完整格式:

listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

 

listen address[:port] [default_server]  ssl 

 

backlog=number;指明TCP协议backlog队列大小。默认为 -1,表示不启用;

 

rcvbuf=size; 指明接收缓冲大小,设定监听的句柄的SO_RCVBUF参数;

 

ssl:当前监听的端口必须要使用ssl协议;

 

例如:

listen  172.16.100.8:8080

 

3、server_name  name  […]:

相当于httpd的主机名

后可跟多个主机名;名称还可以使用通配符和正则表达式 (~) ;

 

nginx收到一个请求时,会取出报文中的hostname会跟我们定义的各个虚拟主机进行匹配

 

(1)先做精确匹配;www.magedu.com;

(2)左侧通配符匹配,例如:*.magedu.com;

(3)右侧通配符匹配,例如:www.*;

(4)正则表达式匹配,例如:~^.*\.magedu\.com$

(5)default_server  如果以上都不匹配,就由这项进行匹配;


server的配置格式:

例:


Server {

Listen 8080;

Server_name www.zhangjian.com;

Location /  {

Root   "web/htdocs";

}

}

 

此时如果导入了服务类脚本可以用:

Service   nginx   configtest   测试语法格式  等同于  nginx  -t

Service nginx reload   语法没有问题,重新加载配置文件(刚刚启动了新的监听端口,必须重启服务)

Service nginx restart

  

yum    -y     install     elinks

Eliks   -dump   http://www.zhangjian.com   用Linux主机测试指定网页   --dump代表不进入交互模式,显示完立即退出

 

4、localtion [=|~\~*|*~] /uri {…}

location @name

功能:允许根据用户请求的URI来匹配定义的各Location,匹配到时,此请求将被相应的Location块中的配置所处理;

 

允许根据用户请求的URL来匹配location中所给定的表达式,一旦匹配,将由localtion中所给定的配置进行处理;

 

例:

server {

localtion /images{ }

localtion /bbs { }

localtion /

}

 

http://www.magedu.com/images  此时就被第一个location所匹配了

  

=:精确匹配,把用户请求的URI,与各location匹配

~:正则表达式模式匹配,匹配时区分字符大小写

~*:正则表达式模式匹配,不区分字符大小写

^~:做URI的前半部分匹配,匹配时不检查正则表达式; 优先级较高

  

=代表精确匹配  只有在写 www.magedu.com/ 时才能被=号匹配

  

匹配优先级:精确匹配(=)、^~、~ 和 ~*、最后由不带符号的URL进行左侧匹配

当被多个location所匹配时,这些优先级还一样,就会被第一个location所匹配;

  

5、root 实现文件路径定义;

设置web的资源路径映射,用于指明请求的URL所对应的文档的根目录路径

可直接用于server中,也可以用于localtion段中;

 

location  /images/ {

root   "/web/imgs/";

}

以/web/imgs 为根,也就是必须在根目标下存在images目录;

 

http://www.magedu.com/images/a.jpg

 

6、alias path

用于Location配置段,定义路径别名

 

location  /images/ {

alias /www/pictures/;   

}

把images直接映射为 /www/pictures  ,在找images目录时,直接找/www/pictures即可;

 

回头实现一下这两个实验;

 

注意:root表示指明路径为对应location的 “/”URL; alias表示路径映射,即location中的 URL是相对于alias所指明的路径而言;

 

7、index file

默认主页面:

index     index.html;

 

8、error_page  code  […]   [=code]   URI | @name   根据http状态码重定向错误页面

 

error_page   404    /404.html   如果错误状态码为  404,那么给它返回指定的页面

 

=[code]:以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;

 

例如:

 

Server  {
Listen  80;
Server_name  www.zhangjian.com;
Location /  {
root "/web/htdocs";
error_page  404  /404.html;   如果发生了404错误,那么我就给它指定到一个页面;
 
}
location  /images/   {
Alias  "/web/imgs/";
}
}

1)可重写向成 另一个路径,也可重定向成一个URL;

error_page  404 http://mail.zhangjian.com/index.html;    此处如果发生了404错误,我给它重定向成了一个指定的URL

 

2)也可以改响应码,本来请求的不存在,我也可以给你返回一个200响应码;

error_page  404  =200   /404.html;    本来发生的错误是404   此处我将它的响应码改成了200;

 

3)可以只写一个  =   会由你转向的页面的响应码做为响应码;

error_page  404  =   /hello.html     此处只写了一个=号,而没指定响应码,代表发生了404错误,我会去找hello.html,并以hello.html的状态响应码为最终响应码;   放在此处也就是说 hello.html没有什么错误的话,就会给它返回一个200;

 

9、try_files

try_files   path1  [,path…]  URI

用户访问指定的URI下,如果第一个找不着就找第二个,第二个找不着就找第三个,如果都找不找就找Location所在的段;




网络连接相关的配置:

1、keepalive_timeout time:

保持连接的超时时长,默认为75s;

 

2、keepalive_requests  #:

在一次保持连接上允许承载最大资源请求数

 

3、keepalive_disable [msie6|safari|none]

为指定类型的浏览器禁用长连接

 

4、tcp_nodelay on|off

对长连接是否使用 TCP_NODELAY选项;

默认tcp不会把非常小的资源发送过去,要攒够更多的小报文一起发送

 

5、client_header_timeout  time:

读取http请求报文首部的超时时长;

 

6、client_body_timeout time:

读取Httpd请求报文的body部分的超时时长;

 

7、send_timeout  time:

发送响应报文的超时时长;

 

对客户端请求进行限制:

1、limit_except  METHOD {…}

指定对范围之外的其它方法的访问控制;

 limit_except GET {

allow 172.16.0.0/16;
deny all;
}

如果客户端请求时使用的是 GET以外的方法,只允许172.16.0.0以外的客户端


2、client_body_max_size  SIZE:

限制请求报文中body部分的上限; 通过检测请求报文首部中的"Content_Length"来判定;

 

3、limit_rate  speed:

限制客户端每秒钟传输的字节数,默认为0表示无限制 ;

上面这些配置通常都可以用在 http   server   或 location  段中的;

http段代表全局生效,server代表主机名生效,location代表某个目录下生效。


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

    limit_except METHOD {...} 通过limit_except后面指定的方法名来限制用户请求,如:

limit_except GET {

allow 172.16.0.0/16;

deny all;

}


    client_body_max_size SIZE 限制请求报文中body部分的上限,通过检测请求报文首部中的"Content_Length"来判定,例如,用户试图上传一个10GB的文件,Nginx在收完包头后,发现Content-Length超过client_max_body_size定义的值,就直接发送413 ("Request Entity Too Large")响应给客户端

    limit_rate SPEED 限制客户端每秒种传输的字节数,默认为0,表示无限制;



对内存或磁盘资源进行分配

    client_body_in_file_only on|clean|off 请求报文的body部分是否可暂存于磁盘;on表示允许,并且即使请求结束,也不会删除暂存的内容;clean表示会删除;off(默认)不允许暂存; 

    client_body_in_single_buffer on|off 请求报文的body部分是否可暂存于内存buffer中。当然,如果HTTP包体的大小超过了下面client_body_buffer_size设置的值,包体还是会写入到磁盘文件中

    client_body_buffer_size size 设定内存buffer的大小

    client_body_temp_path DIR [level1 [level2 [level3 [level4]]]] 请求报文的body部分的临时存放目录,在接收HTTP包体时,如果包体的大小大于client_body_buffer_size,则会以一个递增的整数命名并存放到client_body_temp_path指定的目录中。后面跟着的level1、level2、level3,是为了防止一个目录下的文件数量太多,从而导致性能下降,因此使用了level参数,这样可以按照临时文件名最多再加三层目录。例如:client_body_temp_path /var/tmp/nginx/client  1 2

    client_header_buffer_size SIZE 存储超大HTTP头部的内存buffer大小。


MIME类型相关的配置

    types {……} 定义MIME types至文件的扩展名;例如:

types {

text/html .html;

image/jpeg  .jpg;

}

    default_type MIME-TYPE 当找不到相应的MIME type与文件扩展名之间的映射时,使用默认的MIME-TYPE作为HTTP header中的Content-Type

    F、文件操作优化相关的配置:

    sendfile on|off 是否启用sendfile系统调用来发送文件,设为on,表示减少内核态与用户态之间的两次内存复制,这样就会从磁盘中读取文件后直接在内核态发送到网卡设备,提高了发送文件的效率。

    aio on|off 是否启用异步I/O,与sendfile功能互斥

    directio size|off 是否使用O_DIRECT选项去请求读取文件,与sendfile功能互斥;

    open_file_cache max=N[inactive=time]|off 是否打开文件缓存

nginx可以缓存以下三种信息:

(1) 文件句柄、文件大小和最近一次修改时间;

(2) 打开目录的目录结构;

(3) 没有找到的或者没有权限操作的文件的相关信息;

max=N表示可缓存的最大条目上限;一旦到达上限,则会使用LRU从缓存中删除最近最少使用的条目;

inactive=time: 在inactive指定的时长内没有被访问过的缓存条目就会淘汰;

如:open_file_cache max=1000 inactive=20s;

    open_file_cache_errors on|off 是否缓存打开文件错误的信息

    open_file_cache_min_uses INTERVAL检查一次缓存中缓存条目有效性的时间间隔;默认60s;

讲了一大堆,其实我们重点关注以下几项就足以应付生产环境中的需求了:

 server{}, location{}, listen, server_name, root, alias,    keepalive_timeout,keepalive_requests, error_page

                                     


Nginx优化相关配置

1.基于IP的访问控制

    在http, server, location中使用 allow, deny指令定义,匹配法则类似于iptables,自上而下依次匹配,如:

                        location / {

                            deny  192.168.1.1;

                            allow 192.168.1.0/24;

                            allow 10.1.1.0/16;

                            deny  all;

                        }

2.基于用户的basic认证配置

    auth_basic "AUTH_NAME"

    auth_basic_user_file /PATH/TO/PASSWD_FILE,建议使用htpasswd命令创建用户账号文件;

例如:

                        location /wp-login.php {

                            auth_basic ‘Welcome WordPress‘;

                            auth_basic_user_file  /home/mypwd/pass;

                        }        

3.基于gzip实现响应报文压缩 

    gzip on|off  是否开启gzip压缩,开启之后节省网络带宽,却增加了服务器CPU的开销

    gzip_http_version 1.1|1.0  设定启用gzip压缩时客户端请求使用的http协议版本号

    gzip_min_length LENGTH 设定最小压缩的页面,注:若页面过小,可能导致页面越压越大,单位为B,如:gzip_min_length 1024

    gzip_buffers NUM SIZE 设定存储压缩后的响应报文的缓存区数量及大小,默认为一个页面的大小,具体大小依赖于系统平台,不是4K就是8K(getconf PAGE_SIZE 获取系统内存页面大小),例如:gzip_buffers 4 8k

    gzip_comp_level 3 设定gzip的压缩级别,1压缩比最小处理速度最快,9压缩比最大但处理最慢,同时也最消耗CPU,一般设置为3就可以了

    gzip_types MIME_TYPE设定gzip压缩的MIME类型

    gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any]根据某些请求和应答来决定是否在对代理请求的应答启用压缩,代理请求取决于请求头中的“Via”字段,指令中可以同时指定多个不同的参数。

gzip使用举例:

    #开启gzip压缩功能,对用户请求的页面进行压缩处理,以达到节省网络带宽,提高网站速度的作用。
    gzip  on;
    #允许压缩的页面最小字节数。建议值为大于1024字节,小于1K的压缩可能无效果
    gzip_min_length  1000;
    #设置系统获取几个单位的缓存用于存储gzip压缩结果数据流。此设置为:按照原始数据大小以16K为单位的4倍大小申请内存空间。如果不设置的话,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩的结果。
    gzip_buffers     4 16k;
    #指定需要被压缩的文件媒体类型
    gzip_types       text/* text/css text/vnd.wap.wml application/javascript application/x-javascript
    application/xml application/xhtml application/xhtml+xml application/wml application/action;
    #设置压缩比,值为1-9,压缩比最大,处理速度会越慢
    gzip_comp_level  9;
    #nginx做反向代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩
    gzip_proxied     any;
    #识别http协议的版本,只有1.1版本的压缩,因为可能早期的浏览器或http客户端可能不支持gzip压缩
    gzip_http_version 1.1;
    #如果IE1-6的浏览器的gzip压缩,因为他们不支持
    gzip_disable "MSIE [1-6].(?!.*SV1)";
    #gzip_vary的作用是在http响应中增加一行“Vary: Accept-Encoding”,目的是改变反向代理服务器的缓存策略,反向代理服务器会根据后端服务器是否带Vary头采用不同的缓存策略。
    gzip_vary on;



定制响应首部

headers_module  

add_header name value [always]:

expires  TIME,设定缓存时间

如:

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${
                           expires 30d;
                 }


 

local段中:

        add_header  X-header   testheader;  首部名称   首部值  这块没有任何意义,自己随便写的

 

此时在用浏览器访问一次,开启调试模式,看报文首部,即可看出来结果

 


定制访问日志

log_module

log_format   定义日志格式

access_log    定义访问日志

 

格式:

log_forat compression ‘$remote_addr - $remote_user [$time_local]‘

"‘$request" $status $bytes_sent‘

"‘$http_referer" "$http_user_agent" "$gzip_ratio"‘;

 

access_log  /spool/logs/nginx-access.log  commpression  buffer=32k;

 

$处使用的是 log自带的变量:

commpression:日志名

remote_addr:客户端IP地址

remote_user:如果客户端登陆了,客户端的用户名

time_local:当前服务器端时间

request:用户请求的内容,请求的URL,包括整个请求符

status:状态码

bytes_sent:发送的字节数

http_referer:上一次页面,从哪跳转过来

http_user_agent: 浏览器类型

gzip_ratio:压缩比

 

buffer:缓存大小

flush=time:每隔多长时间从内存中刷到磁盘上一次,写的时间越长发生磁盘I/O的调用越少,性能越好,但是万一崩溃了丢失的量也越多;

 

如果不定义它也有默认格式,但是将来可能会经常需要定义成与 httpd的combined格式相同的格式;

combined是一种常用的日志格式。


定义合法引用,防盗链 

valid_referers none | blocked | server_names | string ...如:   

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${
                    valid_referers none blocked www.stu24.com stu24.com;
                    if ($invalid_referer){
                               return 403;
                    }
}


定义路径重写,与正则表达式结合if判断使用

    rewrite regex replacement [flag]

flag标记有四种格式:

            last 相当于Apache中的L

            break 中止Rewirte,不在继续匹配

            redirect  返回临时重定向的HTTP状态302,相当于Apache中的R

            permanent 返回永久重定向的HTTP状态301,相当于Apache中的R=301

    if (condition) {

    ...

    }

条件conditon可以是如下任何内容:

            一个变量名;false如果这个变量是空字符串或者以0开始的字符串;

            使用= ,!= 比较的一个变量和字符串

            使用~, ~*与正则表达式匹配的变量,如果这个正则表达式中包含},;则整个表达式需要用" 或‘ 包围

            使用-f ,!-f 检查一个文件是否存在

            使用-d, !-d 检查一个目录是否存在

            使用-e ,!-e 检查一个文件、目录、符号链接是否存在

            使用-x , !-x 检查一个文件是否可执行

    return STATUS URL 结束规则时执行并返回状态码给客户端

    set VARIABLE VALUE 定义一个变量,并给变量赋值。




































Nginx入门--安装和配置