Nginx入门到实践:配置语法

2023年 7月 10日 20.5k 0

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 客户端请求类型,如 GETPOST
    $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.0HTTP/1.1
    $server_addr 服务器地址
    $server_name 服务器名称
    $server_port 服务器的端口号
    $scheme HTTP 方法(如http,https)

    还有更多的内置预定义变量,可以直接搜索关键字「nginx内置预定义变量」可以看到一堆博客写这个,这些变量都可以在配置文件中直接使用。

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论