Nginx入门到实践:配置语法
5. Nginx 配置语法
就跟前面文件作用讲解的图所示,Nginx 的主配置文件是 /etc/nginx/nginx.conf,你可以使用 cat -n nginx.conf 来查看配置。
nginx.conf 结构图可以这样概括:
main        # 全局配置,对全局生效
├── events  # 配置影响 Nginx 服务器或与用户的网络连接
├── http    # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│   ├── upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
│   ├── server   # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│   ├── server
│   │   ├── location  # server 块可以包含多个 location 块,location 指令用于匹配 uri
│   │   ├── location
│   │   └── ...
│   └── ...
└── ...
复制代码一个 Nginx 配置文件的结构就像 nginx.conf 显示的那样,配置文件的语法规则:
- 配置文件由指令与指令块构成;
- 每条指令以 ;分号结尾,指令与参数间以空格符号分隔;
- 指令块以 {}大括号将多条指令组织在一起;
- include语句允许组合多个配置文件以提升可维护性;
- 使用 #符号添加注释,提高可读性;
- 使用 $符号使用变量;
- 部分指令的参数支持正则表达式;
5.1 典型配置
Nginx 的典型配置:
user  nginx;                        # 运行用户,默认即是nginx,可以不进行设置
worker_processes  1;                # Nginx 进程数,一般设置为和 CPU 核数一样
error_log  /var/log/nginx/error.log warn;   # Nginx 的错误日志存放目录
pid        /var/run/nginx.pid;      # Nginx 服务启动时的 pid 存放位置
events {
    use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    worker_connections 1024;   # 每个进程允许最大并发数
}
http {   # 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
    # 设置日志模式
    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  /var/log/nginx/access.log  main;   # Nginx访问日志存放位置
    sendfile            on;   # 开启高效传输模式
    tcp_nopush          on;   # 减少网络报文段的数量
    tcp_nodelay         on;
    keepalive_timeout   65;   # 保持连接的时间,也叫超时时间,单位秒
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;      # 文件扩展名与类型映射表
    default_type        application/octet-stream;   # 默认文件类型
    include /etc/nginx/conf.d/*.conf;   # 加载子配置项
    
    server {
    	listen       80;       # 配置监听的端口
    	server_name  localhost;    # 配置的域名
    	
    	location / {
    		root   /usr/share/nginx/html;  # 网站根目录
    		index  index.html index.htm;   # 默认首页文件
    		deny 172.168.22.11;   # 禁止访问的ip地址,可以为all
    		allow 172.168.33.44; # 允许访问的ip地址,可以为all
    	}
    	
    	error_page 500 502 503 504 /50x.html;  # 默认50x对应的访问页面
    	error_page 400 404 error.html;   # 同上
    }
}
复制代码server 块可以包含多个 location 块,location 指令用于匹配 uri,语法:
location [ = | ~ | ~* | ^~] uri {
	...
}
复制代码指令后面:
- =精确匹配路径,用于不含正则表达式的 uri 前,如果匹配成功,不再进行后续的查找;
- ^~用于不含正则表达式的 uri; 前,表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找;
- ~表示用该符号后面的正则去匹配路径,区分大小写;
- ~*表示用该符号后面的正则去匹配路径,不区分大小写。跟- ~优先级都比较低,如有多个location的正则能匹配的话,则使用正则表达式最长的那个;
如果 uri 包含正则表达式,则必须要有 ~ 或 ~* 标志。
5.2 全局变量
Nginx 有一些常用的全局变量,你可以在配置的任何位置使用它们,如下表:
| 全局变量名 | 功能 | 
|---|---|
| $host | 请求信息中的 Host,如果请求中没有Host行,则等于设置的服务器名,不包含端口 | 
| $request_method | 客户端请求类型,如 GET、POST | 
| $remote_addr | 客户端的 IP地址 | 
| $args | 请求中的参数 | 
| $arg_PARAMETER | GET请求中变量名 PARAMETER 参数的值,例如:$http_user_agent(Uaer-Agent 值),$http_referer... | 
| $content_length | 请求头中的 Content-length字段 | 
| $http_user_agent | 客户端agent信息 | 
| $http_cookie | 客户端cookie信息 | 
| $remote_addr | 客户端的IP地址 | 
| $remote_port | 客户端的端口 | 
| $http_user_agent | 客户端agent信息 | 
| $server_protocol | 请求使用的协议,如 HTTP/1.0、HTTP/1.1 | 
| $server_addr | 服务器地址 | 
| $server_name | 服务器名称 | 
| $server_port | 服务器的端口号 | 
| $scheme | HTTP 方法(如http,https) | 
还有更多的内置预定义变量,可以直接搜索关键字「nginx内置预定义变量」可以看到一堆博客写这个,这些变量都可以在配置文件中直接使用。
作者:SHERlocked93
        THE END
    
        
        






