配置文件由指令和指令块构成
指令
worker_processes 1; #work进程的数量
#worker_processes:指令
#1:参数
语法:
每条指令 以分号 ; 结尾,
指令与参数间 用空格分隔。
我们可以在文档中看到更多指令
也可以搜索某个指令
指令块
events {
use epoll;
worker_connections 1024; 每个work进程支持的最大连接数
}
当然也可以从指令目录中查找
指令块中可再包含指令快
http {
include mime.types;
server {
listen 80;
server_name www.mynginx.com;
index index.html index.htm index.php;
root /www/wwwroot/mynginx;
location ~ /\.
{
try_files $uri $uri/ /index.php?$query_string;
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
deny all;
}
}
http服务器基本结构
main、http、server、location…
指令的上下文
上下文表示该指令的设置场景,上下文为main,表示worker_processes是全局指令,写在任何指令块的外边。
代表worker_connections只能写在events{}指令块中
正则匹配优先级
server_name
在开始处理一个HTTP请求时,Nginx会取出header头中的Host,与每个server中的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求。有可能一个Host与多个server块中的server_name都匹配,这时就会根据匹配优先级来选择实际处理的server块。
server_name与Host的匹配优先级如下:
1)首先选择所有字符串完全匹配的server_name,如 nginx.2367.com 。
2)其次选择通配符在前面的server_name,如 .2367.com。
3)再次选择通配符在后面的server_name,如nginx.2367. 。
4)最后选择使用正则表达式才匹配的server_name,如 ~^.testweb.com$
如果都不匹配
1、优先选择listen配置项后有default或default_server的
2、找到匹配listen端口的第一个server块
location
语法: location [ = |~ | ~* | ^~ | @ ] /uri/ {…}
~ 表示执行一个正则匹配,区分大小写;
~* 表示执行一个正则匹配,不区分大小写;
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location;
= 进行普通字符精确匹配。也就是完全匹配;
@ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
location会尝试根据用户请求中的URI来匹配上面的/uri表达式。
优先级:
1)等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项
2)前缀普通匹配(^~)优先级次之。不支持正则表达式。使用前缀匹配,如果有多个location匹配的话,则使用表达式最长的那个
3)正则表达式类型(~ ~*)的优先级次之。一旦匹配成功,则不再查找其他匹配项
4)常规字符串匹配,如果有多个location匹配的话,则使用表达式最长的那个
(location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径)