Code前端首页关于Code前端联系我们

Nginx 入门实践:配置语法

terry 2年前 (2023-09-28) 阅读数 60 #未命名

5。 Nginx配置语法

如图解释上一个文件的功能,Nginx的主要配置文件是/etc/nginx/nginx.conf,可以使用 nginx.conf 查看配置。

nginx.conf 结构图可以概括如下:

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

Nginx 配置文件的结构如nginx.conf♼所示。配置文件的语法规则:

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

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,语法:❀❀directive:精确匹配路径,在uri之前使用不带正则表达式,如果匹配成功,则不再进行后续搜索;

  • ^~用于没有正则表达式的uri; before表示如果该符号后面的字符是最佳匹配,则应用该规则,不再进行后续搜索;
  • ~表示使用符号后面的正则表达式来匹配路径,区分大小写;
  • ~*表示使用符号后面的正则表达式来匹配路径,不区分大小写。 ~的优先级相对较低。如果有多个位置正则表达式可以匹配,则使用最长的正则表达式;
  • 如果 uri 包含正则表达式,则必须包含 ~~* 个字符。 ? Host,如果请求中没有 Host 行,则它等于指定的服务器名称,但端口

    除外$request_method客户请求类型,例如 GETPOST$remote_addr❀'IP 地址 $args$Request 中的参数request.arg_PARAMETERGET 请求中变量名PARAMETER参数的值为$http_user_agent-为。 ..$content_lengthContent-length请求头中的字段有关客户端cookie的信息$remote_addr客户端IP地址$remote_port客户的端口 $http_user_agent客户端代理信息 $使用$作为 HTTP/1.0HTTP/1.1$server_addr服务器地址$服务器名称ServerName$No$ $schema HTTP 方法(如 http、https)

    有几个内置的预定义变量。可以直接搜索关键字“nginx内置预定义变量”,可以看到很多博客写这方面的内容。这些变量可以直接在配置文件中使用。

    作者:SHERlocked93

    版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    热门