Nginx配置文件语法_通配符的使用

文章目录

  • Nginx配置文件语法概述_Nginx配置文件中使用通配符
      • Nginx 配置文件语法概述
      • `http` 块的作用
      • `server_name _;` 的意义
      • Nginx 配置文件中的通配符及其用法
      • 总结
  • Nginx配置文件语法构成
      • Nginx 配置块
      • Nginx 配置指令
      • 总结
  • Nginx变量
      • 常用 Nginx 变量
      • 总结

Nginx配置文件语法概述_Nginx配置文件中使用通配符

在 Nginx 配置文件中,http 块是用于配置 HTTP 服务的主要块。它包含了与 HTTP 相关的所有配置项,如服务器、位置、代理、缓存等。http 块可以包含多个 server 块,每个 server 块代表一个虚拟主机。

Nginx 配置文件语法概述

Nginx 配置文件的基本语法结构如下:

  1. 全局指令:位于配置文件的最上面,影响整个 Nginx 实例的行为。

    user nginx;
    worker_processes auto;
    
  2. events:用于配置 Nginx 的工作进程如何处理事件。

    events {
        worker_connections 1024;
    }
    
  3. http:用于配置 HTTP 相关的设置,包括虚拟主机(server 块)、代理设置、缓存配置等。

    http {
        include mime.types;
        default_type application/octet-stream;
        
        # 其他 HTTP 配置
        
        server {
            listen 80;
            server_name example.com;
            
            location / {
                root /var/www/html;
                index index.html;
            }
        }
    }
    

http 块的作用

  1. 配置全局 HTTP 设置http 块内的配置适用于所有的 server 块。可以在这里定义全局的 HTTP 设置,比如日志格式、默认 MIME 类型、连接超时等。

    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;
        
        client_max_body_size 10M;
    }
    
  2. 定义 server:在 http 块内可以包含多个 server 块,每个 server 块代表一个虚拟主机,可以配置不同的主机名、端口和位置规则。

    http {
        server {
            listen 80;
            server_name example.com;
            
            location / {
                root /var/www/example;
                index index.html;
            }
        }
        
        server {
            listen 80;
            server_name test.com;
            
            location / {
                root /var/www/test;
                index index.html;
            }
        }
    }
    
  3. 定义 locationhttp 块内可以包含 location 块,用于匹配请求的 URI,并定义如何处理这些请求。

    http {
        server {
            listen 80;
            server_name example.com;
            
            location /images/ {
                root /var/www/example;
            }
            
            location /api/ {
                proxy_pass http://backend_api;
            }
        }
    }
    
  4. 配置 HTTP 代理和负载均衡http 块可以设置代理和负载均衡规则,用于将请求转发到后端服务器或集群中。

    http {
        upstream backend {
            server backend1.example.com;
            server backend2.example.com;
        }
        
        server {
            listen 80;
            server_name example.com;
            
            location / {
                proxy_pass http://backend;
            }
        }
    }
    

总结来说,http 块在 Nginx 配置文件中是用来定义 HTTP 服务的全局设置、虚拟主机和位置匹配规则的关键部分。

在 Nginx 配置文件中,server_name _; 中的 _ 是一个特殊的用法,通常用于匹配所有没有显式指定 server_name 的请求。下面详细说明 _ 的含义,并列举其他通配符写法及其用法。

server_name _; 的意义

server_name 指令中,使用 _ 是一种特殊的写法,用于作为默认的 catch-all 服务器。即,它用于匹配没有明确匹配到其他 server_name 的请求。通常这个写法被用来配置一个默认的虚拟主机,当没有其他 server_name 匹配时,_ 会被触发。

server {
    listen 80;
    server_name _;  # 匹配所有未指定的请求
    location / {
        root /var/www/default;
    }
}

Nginx 配置文件中的通配符及其用法

在 Nginx 配置文件中,通配符主要用于 server_namelocation 指令中,以支持灵活的匹配模式。以下是几种通配符写法及其含义:

  1. 通配符 *(星号)

    • server_name 中的用法

      • *.example.com:匹配 example.com 下的所有子域名,如 www.example.comapi.example.com 等。
      • *example.com:匹配所有以 example.com 结尾的域名,如 test.example.comsubdomain.example.com
      server {
          listen 80;
          server_name *.example.com;  # 匹配 example.com 下的所有子域名
          location / {
              root /var/www/subdomain;
          }
      }
      
    • location 中的用法

      • location /images/*:匹配以 /images/ 开头的所有请求,如 /images/photo.jpg/images/gallery/.
      server {
          listen 80;
          server_name example.com;
      
          location /images/ {
              root /var/www/images;
          }
      
          location /images/* {
              # 匹配 /images/ 下面的所有请求
          }
      }
      
  2. 通配符 ~(波浪号)

    • 正则匹配

      • location ~ ^/images/\d+:使用正则表达式匹配以 /images/ 开头并跟随数字的请求。
      server {
          listen 80;
          server_name example.com;
      
          location ~ ^/images/\d+ {
              root /var/www/images;
          }
      }
      
  3. 通配符 ~*(波浪号加星号)

    • 不区分大小写的正则匹配

      • location ~* \.(jpg|png)$:使用不区分大小写的正则表达式匹配所有以 .jpg.png 结尾的请求。
      server {
          listen 80;
          server_name example.com;
      
          location ~* \.(jpg|png)$ {
              root /var/www/images;
          }
      }
      
  4. 通配符 =(等号)

    • 精确匹配

      • location = /specific-path:仅匹配 /specific-path,不会匹配其他类似的路径。
      server {
          listen 80;
          server_name example.com;
      
          location = /specific-path {
              root /var/www/specific;
          }
      }
      

总结

  • _:在 server_name 中,通常作为默认的 catch-all 服务器。
  • *:用于匹配域名或路径中的任意字符,可以是前缀或后缀匹配。
  • ~:用于正则表达式匹配,区分大小写。
  • ~*:用于不区分大小写的正则表达式匹配。
  • =:用于精确匹配特定路径。

这些通配符和匹配规则可以帮助你在 Nginx 中实现灵活且高效的请求处理。

Nginx配置文件语法构成

在 Nginx 配置中,(blocks)和 指令(directives)是两个核心概念。以下是对 Nginx 的主要块和指令的详细说明:

Nginx 配置块

Nginx 配置文件使用块来组织配置内容。每个块包含一个或多个指令,并可以嵌套其他块。主要的配置块包括:

  1. http

    • 功能:用于配置 HTTP 服务的全局设置。

    • 位置:通常在 Nginx 配置文件的最外层,或者嵌套在 events 块中。

    • 示例

      http {
          include       mime.types;
          default_type  application/octet-stream;
      
          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;
      
          sendfile        on;
          tcp_nopush      on;
          tcp_nodelay     on;
          keepalive_timeout  65;
      
          include /etc/nginx/conf.d/*.conf;
          include /etc/nginx/sites-enabled/*;
      }
      
  2. server

    • 功能:用于定义虚拟主机的设置。

    • 位置:通常在 http 块内。

    • 示例

      server {
          listen       80;
          server_name  example.com www.example.com;
      
          location / {
              root   /usr/share/nginx/html;
              index  index.html index.htm;
          }
      
          error_page  404              /404.html;
          location = /40x.html {
          }
      
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
          }
      }
      
  3. location

    • 功能:用于配置请求路径的匹配和处理。

    • 位置:通常在 server 块内。

    • 示例

      location /images/ {
          alias /data/images/;
      }
      
      location / {
          proxy_pass http://backend;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
      }
      
  4. events

    • 功能:用于配置 Nginx 的事件处理模型和工作进程。

    • 位置:通常在配置文件的最外层。

    • 示例

      events {
          worker_connections  1024;
      }
      
  5. mail

    • 功能:用于配置邮件服务(IMAP、POP3、SMTP)。

    • 位置:通常在配置文件的最外层。

    • 示例

      mail {
          server {
              listen     25;
              protocol   smtp;
              proxy      on;
          }
      }
      

Nginx 配置指令

Nginx 配置文件中的指令用于定义具体的行为和设置。以下是一些常见的指令及其用法:

  1. listen

    • 功能:定义监听的端口和地址。

    • 示例

      listen 80;
      listen 443 ssl;
      
  2. server_name

    • 功能:定义虚拟主机的域名。

    • 示例

      server_name example.com www.example.com;
      
  3. root

    • 功能:定义请求的根目录。

    • 示例

      root /usr/share/nginx/html;
      
  4. index

    • 功能:定义默认的索引文件。

    • 示例

      index index.html index.htm;
      
  5. proxy_pass

    • 功能:设置代理请求的目标地址。

    • 示例

      proxy_pass http://backend;
      
  6. include

    • 功能:包含其他配置文件。

    • 示例

      include /etc/nginx/conf.d/*.conf;
      
  7. location

    • 功能:定义请求路径的匹配规则。

    • 示例

      location /images/ {
          alias /data/images/;
      }
      
  8. error_page

    • 功能:定义错误页面。

    • 示例

      error_page 404 /404.html;
      
  9. access_log

    • 功能:定义访问日志的路径和格式。

    • 示例

      access_log /var/log/nginx/access.log main;
      
  10. sendfile

    • 功能:启用或禁用高效文件传输。

    • 示例

      sendfile on;
      

总结

Nginx 的配置文件通过块和指令来组织和定义服务器的行为。块用来组织配置层级,而指令则定义具体的配置项。理解这些块和指令的作用可以帮助你有效地配置和优化 Nginx 服务器。

Nginx变量

Nginx 提供了一系列内置变量,用于在配置中动态获取和使用请求和服务器相关的信息。以下是一些常用的 Nginx 变量及其解释:

常用 Nginx 变量

  1. $host

    • 含义: 当前请求的主机名。通常来源于请求中的 Host 头部。
    • 示例: proxy_set_header Host $host;
  2. $remote_addr

    • 含义: 客户端的 IP 地址。
    • 示例: access_log /var/log/nginx/access.log combined;(日志中记录客户端 IP)
  3. $remote_port

    • 含义: 客户端的端口号。
    • 示例: log_format main '$remote_addr:$remote_port';
  4. $server_addr

    • 含义: 服务器的 IP 地址。
    • 示例: proxy_set_header X-Server-Addr $server_addr;
  5. $server_name

    • 含义: 当前虚拟主机的名称(server 块中定义的 server_name)。
    • 示例: if ($server_name = 'example.com') { ... }
  6. $server_port

    • 含义: 服务器监听的端口号。
    • 示例: log_format main '$server_port';
  7. $request_uri

    • 含义: 请求的完整 URI,包括查询字符串。
    • 示例: access_log /var/log/nginx/access.log main;(日志中记录请求 URI)
  8. $request_method

    • 含义: 请求的方法,如 GET、POST 等。
    • 示例: log_format main '$request_method';
  9. $query_string

    • 含义: 请求中的查询字符串部分(即 ? 后的部分)。
    • 示例: if ($query_string) { ... }
  10. $request_body

    • 含义: 请求体的内容(对于 POST 请求等)。
    • 示例: proxy_set_body $request_body;(设置代理请求体)
  11. $http_user_agent

    • 含义: 请求中的 User-Agent 头部。
    • 示例: log_format main '$http_user_agent';
  12. $http_referer

    • 含义: 请求中的 Referer 头部。
    • 示例: log_format main '$http_referer';
  13. $http_cookie

    • 含义: 请求中的 Cookie 头部。
    • 示例: log_format main '$http_cookie';
  14. $document_root

    • 含义: 当前请求的文档根目录。
    • 示例: root $document_root;
  15. $request_filename

    • 含义: 请求的文件系统路径。
    • 示例: try_files $request_filename =404;
  16. $content_length

    • 含义: 请求体的长度(以字节为单位)。
    • 示例: log_format main '$content_length';
  17. $content_type

    • 含义: 请求体的类型(MIME 类型)。
    • 示例: log_format main '$content_type';
  18. $scheme

    • 含义: 请求的协议(如 http 或 https)。
    • 示例: proxy_set_header X-Forwarded-Proto $scheme;
  19. $document_uri

    • 含义: 请求的 URI(不包含查询字符串)。
    • 示例: log_format main '$document_uri';
  20. $uri

    • 含义: 请求的 URI(不包含查询字符串)。
    • 示例: try_files $uri $uri/ =404;
  21. $port

    • 含义: 请求的端口号。
    • 示例: log_format main '$port';
  22. $status

    • 含义: 响应的 HTTP 状态码。
    • 示例: log_format main '$status';
  23. $response_time

    • 含义: 服务器处理请求的时间(单位为秒)。
    • 示例: log_format main '$response_time';
  24. $upstream_addr

    • 含义: 上游服务器的 IP 地址。
    • 示例: log_format main '$upstream_addr';
  25. $upstream_status

    • 含义: 上游服务器的响应状态码。
    • 示例: log_format main '$upstream_status';
  26. $upstream_response_time

    • 含义: 上游服务器响应的时间(单位为秒)。
    • 示例: log_format main '$upstream_response_time';

总结

Nginx 提供的这些变量允许你在配置文件中灵活地处理和记录请求信息。你可以通过这些变量来调整日志格式、设置请求头部、配置反向代理等,以满足具体的需求。对于特定的应用场景,你可能会使用不同的变量组合来实现目标

你可能感兴趣的:(#,Nginx,nginx,运维)