摘要: nginx的配置文件类似于一门优雅的编程语言,弄懂了它的规范就可以自定义配置文件了,这个很重要~

1,结构分析

nginx配置文件中主要包括六块:main,events,http,server,location,upstream

结构如下图:

main块:主要控制nginx子进程的所属用户/用户组、派生子进程数、错误日志位置/级别、pid位置、子进程优先级、进程对应cpu、进程能够打开的文件描述符数目等

events块:控制nginx处理连接的方式

http块:是nginx处理http请求的主要配置模块,大多数配置都在这里面进行

server块:是nginx中主机的配置块,可以配置多个虚拟主机

location块:是server中对应的目录级别的控制块,可以有多个

upstream块:是nginx做反向代理和负载均衡的配置块,可以有多个

2,配置命令解释

nginx中每条配置命令都必须要以分号“;”结束!

user  nobody;  //配置nginx 子进程使用的用户和组

worker_processes  1; //配置nginx衍生的工作进程数,一般值为CPU总核数或者总核数的两倍

error_log  logs/error.log   notice; //配置错误日志的存放位置,错误日志的级别有:debug,info,notice,warn,error,crit

pid  logs/nginx.pid;  //指定nginx  pid的存放路径

worker_rlimit_nofile   51200; //配置文件描述符数量

events {

use  epoll; //使用网络I/O模型,linux系统推荐使用epoll,FreeBSD推荐使用kqueue

worker_connections  1024; //允许并发连接的最大请求数

#multi_accept on;  //暂时还没了解其作用

}

http {

include       mime.types; //包含指定的文件(可以含路径)

default_type  application/octet-stream;

#charset   utf-8;  //默认的字符编码集

client_max_body_size  8m; //配置客户端能够上传的文件大小

keepalive_timeout  65;  //连接超时时间

#gzip  on; //是否开启gzip压缩(还需要和其它配置项共同起作用)

//配置访问日志格式

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/host.access.log  main;  //启用访问日志,并且指定日志采用的格式

server {

listen       80; //主机监听端口(可以是ip:port格式,默认监听127.0.0.1)

server_name  localhost; //主机域名

index  index.php  index.html; //默认索引文件

root  /html; //主机站点跟目录地址

#error_page   404    /404.html;  //404页面地址(可以配置其它错误页面地址如500等,格式一样)

location / {

}

location ~ .*\.(js|css)?$ {

expires   1h;  //配置所有的js,css文件缓存1小时

}

}

}

以上为Nginx配置文件中基本的配置命令说明,下面对常见的nginx配置做详细的案例解释和说明。上面的部分只是对nginx配置文件的一个大概的认识,使得自己对nginx的配置文件不再陌生!

3,nginx Rewrite 语法分析

nginx Rewrite 相关的指令有:if,rewrite,set,return,break,uninitalized_variable_warn等。

4.1 break指令:

语法:break;

默认值:none

使用范围:if,server,location

作用:完成当前的规则集,不再处理rewrite指令,需要和last加以区分

4.2 if指令:

语法:if ( condition ) { ... }

默认值:none

使用范围:server,location

作用:用于检测一个条件是否符合,符合则执行大括号内的语句。不支持嵌套,不支持多个条件&&或||处理

condition的范围:

4.2.1 变量名,但是不包括空字符串“”,或者任何以0开始的字符串

4.2.2 变量可以比较,用“=”或者“!=”

4.2.3 变量可以匹配正则表达式,用“~*”(不区分大小写)或者“~”(区分大小写),可以采用“!”来表示取反,如“!~”或者“!~*”

4.2.4 “!-f”和“-f”用来判断文件是否存在

4.2.5 “-e”和“!-e”用来文件或者目录是否存在

4.2.6 “-d”和“!-d”用来判断目录是否存在

4.2.7 “-x”和“!-x”用来判断文件是否可执行

4.2.8  正则表达式中支持“()”分组,分组的值在后面可以通过$1~$9来引用

4.3 return指令:

语法:return code;

默认值:none

使用范围:server,if,location

作用:用于结束规则的执行和返回状态码给客户端。状态码的值可以是:204,400,402~406,408,410,411,413,416以及500~504,另外非标准状态码444,表示以不发送任何的Header头来结束连接。

状态码解释,如下图:

4.4 rewrite指令:

语法:rewrite  regex  replacement  flag;

默认值:none

使用范围:server,if,location

作用:该指令用于重定向URI或者更改字符串的内容,指令根据配置文件中的顺序来执行。注意:rewrite只针对相对路径,即匹配的是URL地址中主机名之后的内容。如果你想匹配主机名,则需要使用 if 语句。

flag标记:

last --- 相当于Apache中的[L]标记,表示该条是最后一条规则,后面的规则不继续匹配,但是要重新发起请求

break --- 本条规则匹配完成后,终止匹配,不再匹配后面的规则

redirect --- 返回302重定向地址,浏览器地址栏会显示跳转后的地址

premanent --- 返回301永久重定向,浏览器地址栏会显示跳转后的地址

说明:last 和 break 作用类似,但是它们之间有一定的区别。在使用 alias 指令时必须要用 last 标记,在使用 proxy_pass 指令时则要使用 break 标记。last 标记表示,在本条rewrite规则执行完成之后需要对其所在的 server 段重新发起请求,而 break 则在本条规则匹配完成之后,终止匹配,不再对后面的的规则匹配。通常情况下,在“根location”中,如:location / { ... }  或者在 server 中直接编写的 rewrite 指令,推荐使用 last ,而在其它块儿中则推荐使用 break。

最后:如果匹配到的URI中含有参数即类似于/app/test.php?id=5之类,默认情况下,rewrite之后参数会被附加到替换串的后面,那么你可以通过在替换串的后面增加“?”来取消这个动作!

4.5 set指令:

语法:set  variable  value;

默认值:none

使用范围:server,location,if

作用:该指令用于定义一个变量,并且给变量进行赋值。变量的值可以是文本、一个变量或者变量和文本的联合,文本需要用引号引起来。

4.6 uninitalized_variable_warn指令:

语法:uninitalized_variable_warn   on|off;

默认值: on

使用范围:http,server,location,if

作用:用于开启或者关闭记录关于未初始化变量的警告信息

nginx Rewrite 中可以使用的全局变量:$args,$content_lenght,$content_type,$document_root,$document_uri,$host,$http_user_agent,$http_cookie,$limit_rate,$request_body_file,$request_method,$remote_addr,$remote_port,$remote_user,$request_filename,$request_uri,$query_string,$scheme,$server_protocol,$server_addr,$server_name,$server_port,$uri。

nginx Rewrite 中遵循PCRE的正则表达式规范,这个可以自行去参照PHP中的正则表达式规范。

4,虚拟主机配置

nginx虚拟机的配置和apache虚拟主机配置方式类似,只是个人感觉还稍简单一些,不像apache那么“抽”。

首先在nginx.conf的http端中增加一个server段,因为在nginx的配置文件中每一个server段都是一个虚拟机,我们配置的是“基于域名的虚拟主机”,增加的server段如下:

server {

listen  80; //配置虚拟机监听的端口,默认ip为127.0.0.1,也可以写成ip:port格式来显式指定

server_name  www.test.com;  //配置虚拟机的server name 可以指定多个,用空格隔开

root  /var/www/test; //配置虚拟机的根目录

index  index.php  index.html; //配置默认的索引文件

access_log   logs/test.access.log  main;  //配置虚拟机的访问日志并指定日志格式采用“main”

error_page  404  /404.html; //配置虚拟机的404页面

location ~ .+\.php($|/) {  //用来支持解析php页面

fastcgi_pass  127.0.0.1:9000;

fastcgi_index  index.php?IF_REWRITE=1;

include fastcgi_params;

set $script $uri;

set $path_info  "/";

if ($uri ~ "^(.+\.php)(/.+)") {

set $script     $1;

set $path_info  $2;

}

fastcgi_param PATH_INFO $path_info;

fastcgi_param SCRIPT_FILENAME  $document_root/$script;

fastcgi_param SCRIPT_NAME $script;

access_log off;

}

}

修改好nginx的配置文件之后,接着修改hosts文件,增加如下一行:

127.0.0.1   www.test.com

然后重启 nginx 和 php-fpm 之后,在浏览器中输入www.test.com查看到对应的内容就表示配置成功!

5,Rewrite实例解析

6,日志文件配置与切割

7,压缩输出配置

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.1;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/css application/xml;

gzip_vary on;

配置指令如上,查看是否起作用,请查看http的响应头信息查看是否含有Accept-Encoding: gzip; 也可以通过比较Content-Length 来对比。

8,自动列目录配置

9,nginx缓存配置

10,nginx负载均衡和反向代理配置与优化

nginx配置文件结构,语法,配置命令解释的更多相关文章

  1. nginx 之 https 证书配置

    HTTPS原理和作用 为什么需要HTTPS 原因:HTTP不安全 传输数据被中间人盗用.信息泄露 数据内容劫持.篡改 HTTPS协议的实现 对传输内容进行加密以及身份验证 对称加密:加密秘钥和解密秘钥 ...

  2. nginx配置文件结构及location块语法规则

    一. nginx配置文件结构介绍 二. location语法规则: 用法示例: location [=|~|~*|^~] /uri/ { … } # 讲解如下: 1.  = 开头表示精确匹配 2.  ...

  3. 【nginx】nginx配置文件结构,内置变量及参数调优

    Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的.每个block一般以一个大括号“{”来表示.block 可以分为几个层次,整 ...

  4. nginx模型概念和配置文件结构

    一. nginx模型概念: Nginx会按需同时运行多个进程: 一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程( ...

  5. nginx配置文件结构

    nginx配置文件结构   全局参数 配置系统全局参数如:worker_processes 工作子进程数量.error_log 错误日志路径.pid 进程IDEvent一般是配置nginx工作模式及连 ...

  6. Nginx教程(四) Location配置与ReWrite语法

    Nginx教程(四) Location配置与ReWrite语法 1 Location语法规则 1.1 Location规则 语法规则: location [=|~|~*|^~] /uri/ {- } ...

  7. centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课

    centos   LB负载均衡集群 三种模式区别 LVS/NAT 配置  LVS/DR 配置  LVS/DR + keepalived配置  nginx ip_hash 实现长连接  LVS是四层LB ...

  8. nginx的配置和基本使用命令

    配置文件基本说明 配置文件位置:/usr/local/nginx/conf/nginx.conf #设置用户群,nobody代表低权限用户 #user nobody; #工作衍生进程数,通常代表CPU ...

  9. Nginx教程(四) Location配置与ReWrite语法 (转)

    Nginx教程(四) Location配置与ReWrite语法 1 Location语法规则 1.1 Location规则 语法规则: location [=|~|~*|^~] /uri/ {… } ...

随机推荐

  1. python 获取几小时之前,几分钟前,几天前,几个月前,及几年前的具体时间

    引入以下两个包: import datetime import arrow 具体代码 # import datetime # import arrow def getTime(self, flag,d ...

  2. Eclipse技术: 项目文件中过滤.o文件

    1. 右建项目 -> Properties. 2. 增加过滤规则

  3. Windows 环境 cygwin 安装 SSH

    本文内容 安装环境 安装 cygwin 安装 SSH 服务 启动 sshd 服务 SSH 免密码登录 验证 SSH 是否已安装成功 验证 SSH 是否可以免密码登录本机 安装环境 Windows 20 ...

  4. FPipe, CMD命令行下的端口重定向工具

    英文文档: FPipe v2. - TCP/UDP port redirector. Copyright (c) by Foundstone, Inc. http://www.foundstone.c ...

  5. Python中字符串的Format用法。

    一.例子: "]) "_".join(map(lambda x:str(x),[1,2,3,4])) "{0}-{1}".format(3.4,34) ...

  6. IntelliJ IDEA安装主题详细步骤

    主题下载网址:http://color-themes.com/?view=index 本文测试的软件版本:IntelliJ IDEA 2016.1.2 一.下载主题包   1 1. 打开上述网址(ht ...

  7. CDH的安装和设置

    采用伪分布模式安装和设置CDH,前提是已经安装了Java和SSH. 1. 下载hadoop-2.6.0-cdh5.9.0,复制到/opt/下,再解压: 2. 进入/opt/hadoop-2.6.0-c ...

  8. Tensorflow设置显存自适应,显存比例

    1. 按比例 config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.4 session = ...

  9. 一张图弄明确开源协议-GPL、BSD、MIT、Mozilla、Apache和LGPL 之间的差别

    导读 在开源软件中常常看到各种协议说明.GPL.BSD.MIT.Mozilla.Apache和LGPL. - 这些协议之间的有什么差别 - 怎样选择合适的开源协议 请看下文,特作记录一篇,以供兴许查看 ...

  10. jquery 如何获取有多个class名的元素

      1.情景展示 如何使用jquery获取带有多个class样式的元素? 2.解决方案 $("p.opinion.mb15.gray2e.max2line.mr20:contains('大摩 ...