Nginx入门到实践:配置语法

2020-08-2617:53:47服务器及运维Comments1,502 views字数 2499阅读模式

5. Nginx 配置语法

就跟前面文件作用讲解的图所示,Nginx 的主配置文件是 /etc/nginx/nginx.conf,你可以使用 cat -n nginx.conf 来查看配置。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

nginx.conf 结构图可以这样概括:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

main        # 全局配置,对全局生效
├── events  # 配置影响 Nginx 服务器或与用户的网络连接
├── http    # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│   ├── upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
│   ├── server   # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│   ├── server
│   │   ├── location  # server 块可以包含多个 location 块,location 指令用于匹配 uri
│   │   ├── location
│   │   └── ...
│   └── ...
└── ...
复制代码

一个 Nginx 配置文件的结构就像 nginx.conf 显示的那样,配置文件的语法规则:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

  1. 配置文件由指令与指令块构成;
  2. 每条指令以 ; 分号结尾,指令与参数间以空格符号分隔;
  3. 指令块以 {} 大括号将多条指令组织在一起;
  4. include 语句允许组合多个配置文件以提升可维护性;
  5. 使用 # 符号添加注释,提高可读性;
  6. 使用 $ 符号使用变量;
  7. 部分指令的参数支持正则表达式;

5.1 典型配置

Nginx 的典型配置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

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,语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

location [ = | ~ | ~* | ^~] uri {
	...
}
复制代码

指令后面:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

  1. = 精确匹配路径,用于不含正则表达式的 uri 前,如果匹配成功,不再进行后续的查找;
  2. ^~ 用于不含正则表达式的 uri; 前,表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找;
  3. ~ 表示用该符号后面的正则去匹配路径,区分大小写;
  4. ~* 表示用该符号后面的正则去匹配路径,不区分大小写。跟 ~ 优先级都比较低,如有多个location的正则能匹配的话,则使用正则表达式最长的那个;

如果 uri 包含正则表达式,则必须要有 ~~* 标志。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

5.2 全局变量

Nginx 有一些常用的全局变量,你可以在配置的任何位置使用它们,如下表:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

全局变量名功能
$host请求信息中的 Host,如果请求中没有 Host 行,则等于设置的服务器名,不包含端口
$request_method客户端请求类型,如 GETPOST
$remote_addr客户端的 IP 地址
$args请求中的参数
$arg_PARAMETERGET 请求中变量名 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.0HTTP/1.1
$server_addr服务器地址
$server_name服务器名称
$server_port服务器的端口号
$schemeHTTP 方法(如http,https)

还有更多的内置预定义变量,可以直接搜索关键字「nginx内置预定义变量」可以看到一堆博客写这个,这些变量都可以在配置文件中直接使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

作者:SHERlocked93文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/20150.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunwei/20150.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定