运维系列.Nginx配置文件结构功能总结

运维系列
Nginx配置文件结构功能总结

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/140242979
HuaWei:https://bbs.huaweicloud.com/blogs/430555

【介绍】:本文介绍了Nginx配置文件中的结构,简要介绍了各个主要部分的功能。

在这里插入图片描述


1. 概述

1.1 Nginx配置文件的作用

Nginx是一款高性能的Web服务器和反向代理服务器,其强大的功能和灵活的配置主要依赖于其配置文件。Nginx配置文件的作用包括:

  1. 定义Nginx服务器的运行参数,如工作进程数、连接超时时间等。
  2. 配置Nginx服务器的网络设置,如监听端口、服务器名称等。
  3. 设置Nginx服务器的路由规则,控制请求的转发和处理。
  4. 配置Nginx服务器的缓存、压缩、安全等功能,优化性能和安全性。
  5. 实现负载均衡、反向代理等高级功能,提高应用的可扩展性和可用性。

Nginx配置文件是Nginx服务器的核心,通过灵活的配置,可以实现各种强大的功能,满足不同的应用需求。

1.2 Nginx主配置文件nginx.conf的位置

Nginx的主配置文件是nginx.conf,其默认位置因操作系统而异:

  • Linux系统:

    • /etc/nginx/nginx.conf
    • /usr/local/nginx/conf/nginx.conf
  • Windows系统:

    • C:\nginx\conf\nginx.conf
  • macOS系统(通过Homebrew安装):

    • /usr/local/etc/nginx/nginx.conf

除了主配置文件,Nginx还允许使用include指令引入其他配置文件,以实现配置的模块化和复用。在实际应用中,可以根据需要将不同的配置划分到不同的文件中,提高配置的可读性和可维护性。

2. Nginx配置文件的整体结构

2.1 全局配置块

全局配置块位于nginx.conf文件的最顶层,包含影响Nginx服务器整体运行的配置指令。这些指令在Nginx启动时被解析,并应用于所有的模块。

以下表格列出了全局配置块中的主要指令:

指令语法作用示例
useruser user [group];指定Nginx工作进程运行的用户和用户组user nginx;
worker_processesworker_processes number | auto;定义Nginx启动的工作进程数worker_processes auto;
error_logerror_log file [level];指定错误日志文件的位置和日志级别error_log /var/log/nginx/error.log warn;
pidpid file;设置存储主进程ID的文件路径pid /var/run/nginx.pid;
worker_rlimit_nofileworker_rlimit_nofile number;设置工作进程可以打开的最大文件描述符数量worker_rlimit_nofile 65535;
load_moduleload_module file;动态加载Nginx模块load_module modules/ngx_http_geoip_module.so;

全局配置块的示例:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;

load_module modules/ngx_http_geoip_module.so;

这些全局配置指令对Nginx的整体性能和行为有重要影响。下表总结了一些常见的配置建议:

指令配置建议
worker_processes通常设置为CPU核心数,或使用"auto"让Nginx自动检测
worker_rlimit_nofile根据系统资源和预期并发连接数设置,通常设置较高值如65535
error_log根据需要调整日志级别,生产环境通常使用"warn"或"error"

在实际配置时,应根据服务器硬件资源和具体应用需求来调整这些参数,以优化Nginx的资源使用,提高服务器的性能和稳定性。

2.2 events配置块

events配置块用于配置Nginx的事件处理机制,影响Nginx处理连接的方式。它通常位于全局配置块之后,http配置块之前。

主要指令包括:

指令语法作用示例
worker_connectionsworker_connections number;设置每个工作进程的最大并发连接数worker_connections 1024;
useuse method;指定事件驱动模型use epoll;
multi_accept`multi_accept onoff;`是否一次接受多个新连接
accept_mutex`accept_mutex onoff;`是否开启负载均衡锁

一个events配置块示例如下:

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
    accept_mutex on;
}

配置说明:

  • worker_connections:根据服务器硬件资源和预期并发量设置。
  • use:在Linux系统上,推荐使用epoll。
  • multi_accept:开启可提高高并发下的性能,但可能增加系统负载。
  • accept_mutex:通常保持开启,可以减少工作进程之间的竞争。

2.3 http配置块

http配置块是Nginx配置中最复杂和最重要的部分,包含了与HTTP服务相关的所有配置。

2.3.1 http配置块的基本结构

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;
    types_hash_max_size 2048;

    # Gzip压缩
    gzip  on;
    gzip_disable "msie6";

    # 包含其他配置文件
    include /etc/nginx/conf.d/*.conf;

    # 服务器块
    server {
        # 服务器配置
    }
}

2.3.2 主要指令说明

指令作用示例
include包含其他配置文件include mime.types;
default_type设置默认的MIME类型default_type application/octet-stream;
log_format定义日志格式log_format main '...';
access_log设置访问日志的路径和格式access_log /var/log/nginx/access.log main;
sendfile启用sendfile系统调用来发送文件sendfile on;
tcp_nopush优化数据包的发送tcp_nopush on;
tcp_nodelay禁用Nagle算法tcp_nodelay on;
keepalive_timeout设置keep-alive连接的超时时间keepalive_timeout 65;
types_hash_max_size设置类型哈希表的最大大小types_hash_max_size 2048;
gzip启用gzip压缩gzip on;

2.3.3 性能优化建议

  1. 启用sendfiletcp_nopush以提高文件传输效率。
  2. 根据实际需求调整keepalive_timeout
  3. 合理配置Gzip压缩,可以显著减少传输数据量。
  4. 使用include指令分割配置文件,提高可维护性。

http配置块是Nginx配置的核心,其中包含了多个server块,每个server块定义了一个虚拟主机。在实际配置中,应根据具体需求调整这些参数,以优化服务器性能和资源利用。

2.4 mail配置块(可选)

mail配置块是Nginx的一个可选功能,用于配置Nginx作为邮件代理服务器。这个功能需要在编译Nginx时包含mail模块。mail配置块通常位于http配置块之后,与http配置块平级。

2.4.1 mail配置块的基本结构

mail {
    server_name mail.example.com;
    auth_http localhost:8008/auth-smtp;

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

    server {
        listen     110;
        protocol   pop3;
        proxy      on;
    }

    server {
        listen     143;
        protocol   imap;
        proxy      on;
    }
}

2.4.2 主要指令说明

指令作用示例
server_name设置邮件服务器的名称server_name mail.example.com;
auth_http指定用于身份验证的HTTP服务器auth_http localhost:8008/auth-smtp;
protocol指定邮件协议(smtp, pop3, imap)protocol smtp;
proxy启用邮件代理功能proxy on;
proxy_pass指定上游邮件服务器proxy_pass 192.168.1.100:25;
ssl启用SSL/TLS加密ssl on;
starttls启用STARTTLS命令支持starttls on;

2.4.3 配置说明和最佳实践

  1. 身份验证

    • auth_http指令指向一个HTTP服务器,用于验证用户身份。这个服务器需要自行实现。
  2. 协议支持

    • 可以为不同的邮件协议(SMTPPOP3IMAP)配置不同的server块。
  3. SSL/TLS加密

    • 建议为所有邮件服务启用SSL/TLS加密,以保护用户数据:

      server {
          listen     993 ssl;
          protocol   imap;
          ssl_certificate     /path/to/cert.pem;
          ssl_certificate_key /path/to/cert.key;
      }
      
  4. 上游服务器

    • 使用proxy_pass指定实际处理邮件的上游服务器:

      server {
          listen     25;
          protocol   smtp;
          proxy_pass 192.168.1.100:25;
      }
      
  5. 日志配置

    • 可以为邮件服务配置单独的访问日志:

      mail {
          access_log /var/log/nginx/mail.access.log;
      }
      

2.4.4 使用场景

  1. 负载均衡Nginx可以作为邮件服务的前端代理,将请求分发到多个后端邮件服务器。

  2. SSL终止Nginx可以处理SSL/TLS加密,减轻后端服务器的负担。

  3. 协议转换:可以在客户端和服务器之间进行协议转换,例如将POP3转换为IMAP

  4. 安全过滤:可以集成第三方模块,实现垃圾邮件过滤等功能。

2.4.5 注意事项

  • mail模块是可选的,需要在编译Nginx时明确包含。
  • 配置邮件服务需要考虑安全性,建议始终使用SSL/TLS加密。
  • 需要正确配置DNS记录(MX记录),以便邮件能够正确路由到Nginx服务器。

mail配置块使Nginx能够作为功能强大的邮件代理服务器,但其配置相对复杂,需要谨慎规划和测试。在大多数情况下,除非有特殊需求,否则通常会使用专门的邮件服务器软件(如PostfixDovecot等)来处理邮件服务。

3. 配置指令的语法和参数

3.1 指令的基本语法

Nginx配置文件中的指令遵循一定的语法规则,接下来将对这些语法规则展开介绍。

3.1.1 基本语法结构

Nginx配置指令的基本语法结构如下:

指令名 参数1 参数2 ... 参数N;

注意事项:

  1. 每个指令都以分号(;)结尾。
  2. 指令名和参数之间,以及参数之间使用空格分隔。
  3. 指令对大小写敏感。

3.1.2 指令上下文

Nginx的指令可以在不同的上下文中使用,主要包括:

  • 主上下文(Main Context
  • events上下文
  • http上下文
  • server上下文
  • location上下文
  • mail上下文(如果启用)

某些指令只能在特定上下文中使用,而有些指令可以在多个上下文中使用。例如:

# 主上下文
user nginx;

http {
    # http上下文
    gzip on;

    server {
        # server上下文
        listen 80;

        location / {
            # location上下文
            root /usr/share/nginx/html;
        }
    }
}

3.1.3 指令继承

子上下文会继承父上下文的配置,除非在子上下文中明确重写。例如:

http {
    gzip on;

    server {
        # 继承http上下文的gzip配置
        location /api/ {
            # 重写gzip配置
            gzip off;
        }
    }
}

3.2 常用指令参数说明

3.2.1 listen指令

listen指令用于配置服务器监听的IP地址和端口。

语法:

listen address[:port] [default_server] [ssl] [http2] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number];

参数说明:

  • address: IP地址,可以是具体IP*(表示所有地址)
  • port: 端口号,默认为80
  • default_server: 将此server块标记为默认服务器
  • ssl: 启用SSL/TLS
  • http2: 启用HTTP/2协议
  • proxy_protocol: 启用代理协议

示例:

listen 80;
listen 443 ssl http2;
listen 192.168.1.1:8080 default_server;

3.2.2 server_name指令

server_name指令用于设置虚拟主机的域名。

语法:

server_name name1 [name2 ...];

参数说明:

  • name:可以是精确的域名、通配符域名或正则表达式

示例:

server_name example.com www.example.com;
server_name *.example.com;
server_name ~^www\d+\.example\.com$;

3.2.3 location指令

location指令用于配置如何处理特定的URI。

语法:

location [ = | ~ | ~* | ^~ ] uri { ... }

参数说明:

  • =:精确匹配
  • ~:区分大小写的正则匹配
  • ~*:不区分大小写的正则匹配
  • ^~:前缀匹配,优先级高于正则匹配

示例:

location = / {
    # 精确匹配"/"
}

location ~* \.(gif|jpg|jpeg)$ {
    # 匹配以.gif、.jpg或.jpeg结尾的请求
}

location /documents/ {
    # 匹配以/documents/开头的请求
}

3.2.4 proxy_pass指令

proxy_pass指令用于设置代理服务器的协议和地址。

语法:

proxy_pass URL;

参数说明:

  • URL:可以是HTTP(S)协议的URL,也可以是Unix域套接字路径

示例:

proxy_pass http://backend;
proxy_pass http://192.168.0.1:8080/api/;
proxy_pass unix:/tmp/backend.socket:/uri/;

3.2.5 fastcgi_pass指令

fastcgi_pass指令用于设置FastCGI服务器的地址。

语法:

fastcgi_pass address;

参数说明:

  • address:可以是IP地址和端口,也可以是Unix域套接字路径

示例:

fastcgi_pass localhost:9000;
fastcgi_pass unix:/tmp/php-fpm.socket;

3.2.6 root和alias指令

rootalias指令用于设置请求映射到服务器文件系统的路径。

语法:

root path;
alias path;

参数说明:

  • path:服务器上的文件系统路径

示例:

root /var/www/html;
alias /var/www/static/;

主要区别:

  • root会将完整的URI附加到指定路径后
  • alias只替换匹配的部分

3.2.7 index指令

index指令用于指定默认索引文件。

语法:

index file1 [file2 ...];

参数说明:

  • file:索引文件名

示例:

index index.html index.htm index.php;

这些是Nginx中一些常用指令的基本语法和参数说明。在实际配置中,可能还需要根据具体需求使用更多的指令和参数。理解这些基本语法和参数有助于更好地配置和优化Nginx服务器。

4. ★配置文件中的变量使用

Nginx配置文件中的变量使用是一个强大的特性,它允许我们动态地处理请求和响应。变量可以用于日志格式重写规则条件判断等多个方面。

Nginx中的变量分为两大类:内置变量自定义变量。接下来我们将使用讲个小节来对应介绍这两类变量的用法。

4.1 内置变量

Nginx提供了大量的内置变量,这些变量包含了请求、响应、服务器等相关的信息。

4.1.1 常用内置变量

以下是一些常用的内置变量:

变量名描述
$request_method请求方法(GETPOST等)
$request_uri完整的原始请求URI
$uri当前请求的URI(可能经过重写)
$query_string请求的查询字符串
$remote_addr客户端IP地址
$server_name匹配上的服务器名
$server_port服务器端口
$server_protocol服务器的HTTP版本(HTTP/1.0HTTP/1.1等)
$http_user_agent客户端User-Agent
$http_referer请求的Referer
$request_time请求处理时间,单位为秒,精确到毫秒
$status响应状态码
$body_bytes_sent发送给客户端的字节数,不包括响应头
$nginx_versionNginx版本

4.1.2 使用内置变量

内置变量可以在多个Nginx指令中使用,例如:

  1. 在日志格式中:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
  1. 在条件判断中:
if ($request_method = POST) {
    return 405;
}
  1. 在重写规则中:
rewrite ^/old-page$ /new-page permanent;
  1. 在响应头中:
add_header X-Served-By $hostname;

4.2 自定义变量

除了内置变量,Nginx还允许我们定义和使用自定义变量,这为配置提供了更大的灵活性。

4.2.1 定义自定义变量

使用set指令可以定义自定义变量:

set $variable_name value;

例如:

set $mobile_rewrite do_not_perform;

if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {
    set $mobile_rewrite perform;
}

if ($mobile_rewrite = perform) {
    rewrite ^ /mobile$uri redirect;
}

4.2.2 使用自定义变量

自定义变量可以在配置文件的多个地方使用,包括:

  1. 在location块中:
location / {
    set $foo "bar";
    return 200 $foo;
}
  1. 在if语句中:
if ($request_uri ~* "^/special") {
    set $special_uri "true";
}

if ($special_uri = "true") {
    # 执行特殊处理
}
  1. 在rewrite指令中:
set $weekend "No";
if ($date_local ~ "Saturday|Sunday") {
    set $weekend "Yes";
}
rewrite ^/is-it-weekend /weekend.php?answer=$weekend last;

4.2.3 变量的作用域

自定义变量的作用域通常是请求级别的,这意味着:

  • 每个请求都有自己的变量集合。
  • 变量在请求处理的整个生命周期内有效。
  • 不同请求之间的变量是相互独立的。

4.2.4 变量使用的注意事项

  1. 变量名区分大小写。
  2. 使用未定义的变量不会导致错误,而是返回空字符串。
  3. 某些模块(如ngx_http_rewrite_module)会在配置加载时评估变量,而不是在运行时。
  4. 过度使用变量可能会影响性能,特别是在高并发场景下。

4.2.5 实际应用示例

  1. 根据客户端IP设置变量:
set $country "unknown";

if ($geoip_country_code = "US") {
    set $country "USA";
}

if ($geoip_country_code = "GB") {
    set $country "United Kingdom";
}

proxy_set_header X-Country $country;
  1. 根据时间设置缓存策略:
map $time_iso8601 $cache_expiry {
    default         1h;
    ~^2023-12-       5m;  # December 2023
    ~^2023-11-       15m; # November 2023
}

expires $cache_expiry;
  1. 动态设置上游服务器:
set $backend "default_backend";

if ($request_uri ~* ^/api/) {
    set $backend "api_backend";
}

if ($http_user_agent ~* "googlebot") {
    set $backend "bot_backend";
}

proxy_pass http://$backend;

通过灵活使用内置变量和自定义变量,我们可以创建更加动态和智能的Nginx配置,以适应各种复杂的场景和需求。

5. ★配置文件的模块化和复用

随着Nginx配置的复杂性增加,将配置文件模块化并实现配置的复用变得越来越重要。这不仅可以提高配置的可读性和可维护性,还能减少重复代码,降低错误率。本节将介绍如何使用include指令实现配置文件的模块化,以及如何组织和管理配置片段。

5.1 include指令的使用

include指令是Nginx配置文件模块化的核心。它允许将其他配置文件包含到主配置文件中,从而实现配置的分割和复用。

5.1.1 include指令的语法量

include file | mask;
  • file:指定要包含的配置文件的路径。
  • mask:使用通配符指定要包含的多个配置文件。

5.1.2 include指令的使用场景

  1. 分割主配置文件

    # 在nginx.conf中
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    
  2. 复用通用配置

    # 在server块中
    include /etc/nginx/snippets/ssl-params.conf;
    
  3. 按功能组织配置

    # 在http块中
    include /etc/nginx/mime.types;
    include /etc/nginx/proxy.conf;
    include /etc/nginx/fastcgi.conf;
    

5.1.3 include指令的注意事项

  1. 路径可以是绝对路径或相对路径(相对于主配置文件)。
  2. 可以使用通配符(*)包含多个文件。
  3. 被包含的文件必须有正确的Nginx配置语法。
  4. 包含的顺序很重要,后面的配置可能会覆盖前面的配置。

5.2 配置片段的组织和管理

合理组织和管理配置片段可以大大提高Nginx配置的可维护性。

5.2.1 配置片段的分类

  1. 全局配置:影响整个Nginx服务器的设置。
  2. HTTP配置:与HTTP服务相关的通用设置。
  3. 服务器配置:特定虚拟主机的配置。
  4. 位置配置:特定URI位置的处理规则。
  5. 功能模块:特定功能(如SSL、缓存、压缩等)的配置。

5.2.2 配置文件的目录结构

推荐的目录结构:

/etc/nginx/
├── nginx.conf
├── conf.d/
│   ├── default.conf
│   └── example.com.conf
├── snippets/
│   ├── ssl-params.conf
│   └── proxy-params.conf
├── sites-available/
│   ├── example.com
│   └── subdomain.example.com
└── sites-enabled/
    └── example.com -> ../sites-available/example.com
  • nginx.conf:主配置文件
  • conf.d/:存放额外的配置文件
  • snippets/:存放可复用的配置片段
  • sites-available/:存放所有的网站配置
  • sites-enabled/:存放已启用的网站配置(通常是符号链接)

5.2.3 配置片段的命名约定

  • 使用描述性的名称,如ssl-params.conf, php-fpm.conf
  • 对于网站配置,使用域名作为文件名,如example.com.conf
  • 使用一致的文件扩展名,通常是.conf

5.2.4 配置片段的版本控制

Nginx配置文件纳入版本控制系统(如Git)是一个好习惯:

  1. 跟踪配置的变更历史。
  2. 便于回滚到之前的配置。
  3. 便于团队协作和配置审查。

5.2.5 配置片段的示例

  1. SSL参数配置 (snippets/ssl-params.conf):

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    
  2. 代理参数配置 (snippets/proxy-params.conf):

    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;
    proxy_buffering on;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
    
  3. PHP-FPM配置 (snippets/php-fpm.conf):

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
    
  4. 网站服务器配置 (sites-available/example.com):

    server {
        listen 80;
        server_name example.com www.example.com;
        root /var/www/example.com;
    
        include snippets/ssl-params.conf;
        include snippets/php-fpm.conf;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    }
    

5.2.6 最佳实践

  1. 保持主配置文件(nginx.conf)简洁,主要用于全局设置和包含其他配置文件。
  2. 将常用的配置片段(如SSL参数、代理设置)放在snippets目录中。
  3. 为每个网站创建单独的配置文件,放在sites-available目录中。
  4. 使用符号链接将启用的网站配置从sites-available链接到sites-enabled
  5. 使用include指令时,尽量指定完整的文件路径,避免使用过于宽泛的通配符。
  6. 定期审查和清理未使用的配置文件。
  7. 在应用新的配置之前,始终使用nginx -t命令检查配置的语法。

通过合理使用include指令和组织配置片段,可以使Nginx的配置更加模块化、可维护和可复用。这不仅可以提高配置的效率,还能减少错误,使得管理大型和复杂的Nginx部署变得更加容易。

6. 总结

Nginx配置文件的结构和组织对于有效管理和使用Web服务器十分重要。本文是一个总结,详细介绍了Nginx配置文件的各个方面,前面的内容主要包括以下几点:

  1. 配置文件的整体结构:介绍了全局配置块、events块、http块等主要组成部分,以及它们的作用和常用指令。

  2. 指令语法和参数:解释了Nginx配置指令的基本语法规则,以及一些常用指令的参数含义和使用方法。

  3. 变量使用:讨论了Nginx内置变量和自定义变量的使用,这为创建动态和灵活的配置提供了基础。

  4. 配置的模块化和复用:介绍了如何使用include指令实现配置的模块化,以及如何组织和管理配置片段,提高配置的可维护性。

希望这些总结对你有所帮助。

F. 常见指令表

指令描述
user设置 Nginx 工作进程的用户
worker_processes设置 Nginx 工作进程的数量
error_log设置错误日志的路径和日志级别
pid设置记录主进程 ID 的文件路径
events用于配置事件模块
worker_connections设置单个工作进程可以同时打开的最大连接数
http包含 HTTP 服务器配置的主要块
server定义虚拟主机
listen指定服务器监听的 IP 地址和端口
server_name设置虚拟主机的域名
root设置请求的根目录
index定义默认索引文件
location用于匹配特定的 URI
proxy_pass设置代理服务器的协议和地址
fastcgi_pass设置 FastCGI 服务器的地址
access_log设置访问日志的路径和格式
error_page定义错误页面
client_max_body_size设置客户端请求主体的最大允许大小
ssl_certificate指定 SSL 证书文件路径
ssl_certificate_key指定 SSL 证书私钥文件路径
include包含其他配置文件
gzip启用或禁用 gzip 压缩
upstream定义一组服务器作为后端
try_files按顺序检查文件是否存在
rewrite重写 URI
return停止处理并返回指定的代码给客户端
add_header添加自定义 HTTP 响应头
allow允许特定的 IP 地址或网段访问
deny拒绝特定的 IP 地址或网段访问
limit_req限制请求处理速率
limit_conn限制连接数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/787938.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

泛微E-Cology getFileViewUrl SSRF漏洞复现

0x01 产品简介 泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 0x02 漏洞概述 泛微E-Cology getFileViewUrl 接口处存在…

Java如何自定义注解及在SpringBoot中的应用

注解 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说…

灵活多变的对象创建——工厂方法模式(Python实现)

1. 引言 大家好,又见面了!在上一篇文章中,我们聊了聊简单工厂模式,今天,我们要进一步探讨一种更加灵活的工厂设计模式——工厂方法模式。如果说简单工厂模式是“万能钥匙”,那工厂方法模式就是“变形金刚”…

Sorted Set 类型命令(命令语法、操作演示、命令返回值、时间复杂度、注意事项)

Sorted Set 类型 文章目录 Sorted Set 类型zadd 命令zrange 命令zcard 命令zcount 命令zrevrange 命令zrangebyscore 命令zpopmax 命令bzpopmax 命令zpopmin 命令bzpopmin 命令zrank 命令zscore 命令zrem 命令zremrangebyrank 命令zremrangebyscore 命令zincrby 命令zinterstor…

干货:高水平论文写作思路与方法

前言:Hello大家好,我是小哥谈。高水平论文的写作需要扎实的研究基础和严谨的思维方式。同时,良好的写作技巧和时间管理也是成功的关键。本篇文章转载自行业领域专家所写的一篇文章,希望大家阅读后可以能够有所收获。🌈 目录 🚀1.依托事实/证据,通过合理的逻辑,…

【MindSpore学习打卡】应用实践-热门LLM及其他AI应用-使用MindSpore实现K近邻算法对红酒数据集进行聚类分析

在机器学习领域,K近邻算法(K-Nearest Neighbor, KNN)是最基础且常用的算法之一。无论是分类任务还是回归任务,KNN都能通过简单直观的方式实现高效的预测。在这篇博客中,我们将基于MindSpore框架,使用KNN算法…

for nested data item, row-key is required.报错解决

今天差点被一个不起眼的bug搞到吐,就是在给表格设置row-key的时候,一直设置不成功,一直报错缺少row-key,一共就那两行代码 实在是找不到还存在什么问题... 先看下报错截图... 看下代码 我在展开行里面用到了一个表格 并且存放表格…

【算法】代码随想录之数组(更新中)

文章目录 前言 一、二分查找法(LeetCode--704) 二、移除元素(LeetCode--27) 前言 跟随代码随想录,学习数组相关的算法题目,记录学习过程中的tips。 一、二分查找法(LeetCode--704&#xff0…

WEB安全基础:网络安全常用术语

一、攻击类别 漏洞:硬件、软件、协议,代码层次的缺陷。 后⻔:方便后续进行系统留下的隐蔽后⻔程序。 病毒:一种可以自我复制并传播,感染计算机和网络系统的恶意软件(Malware),它能损害数据、系统功能或拦…

实战 | YOLOv8使用TensorRT加速推理教程(步骤 + 代码)

导 读 本文主要介绍如何使用TensorRT加速YOLOv8模型推理的详细步骤与演示。 YOLOv8推理加速的方法有哪些? YOLOv8模型推理加速可以通过多种技术和方法实现,下面是一些主要的策略: 1. 模型结构优化 网络剪枝:移除模型中不重要的神经元或连接,减少模型复杂度。 模型精…

大模型lora微调中,rank参数代表什么,怎么选择合适的rank参数

在大模型的LoRA(Low-Rank Adaptation)微调中,rank参数(秩)是一个关键的超参数,它决定了微调过程中引入的低秩矩阵的维度。具体来说,rank参数r表示将原始权重矩阵分解成两个低秩矩阵的维度&#…

突破传统,实时语音技术的革命。Livekit 开源代理框架来袭

🚀 突破传统,实时语音技术的革命!Livekit 开源代理框架来袭! 在数字化时代,实时通信已成为我们日常生活的一部分。但你是否曾想象过,一个能够轻松处理音视频流的代理框架,会如何改变我们的沟通方式?今天,我们就来一探究竟! 🌟 什么是 Livekit 代理框架? Live…

从零开始搭建互联网医院系统:技术与案例解析

随着信息技术的飞速发展和人们对医疗服务需求的增加,互联网医院逐渐成为医疗服务的重要模式。本文将详细介绍从零开始搭建互联网医院系统的关键技术和具体案例,帮助读者理解如何构建一个高效、可靠的互联网医院系统。 一、互联网医院系统的核心技术 1…

ESLint: Delete `␍`(prettier/prettier)解决问题补充

如果你是克隆的,参考这位大佬的文章 vue.js - Delete ␍eslint(prettier/prettier) 错误的解决方案 - 个人文章 - SegmentFault 思否 如果你是个人在本地实现,且改为 仍旧报错,我解决的方案: 改为,同时勾选和我配置一…

Error:sql: expected 1 arguments, got 2

一 背景 在测试一个API接口时,看到日志里面突然抛出一个错误:Error:sql: expected 1 arguments, got 2 看了下,对应的表里面是有相关数据的,sql语句放在mysql里面执行也是没问题!那奇了怪了,为啥会产生这样…

TensorFlow系列:第二讲:准备工作

1.创建项目,选择虚拟环境 项目结构如下: data中的数据集需要提前准备好,数据分为测试集,训练集和验证集。以下是数据集的下载平台:kaggle 2.随便选择一个和水果相关的数据集,下载到本地,导入的项…

ARM裸机:一步步点亮LED(汇编)

硬件工作原理及原理图查阅 LED物理特性介绍 LED本身有2个接线点,一个是LED的正极,一个是LED的负极。LED这个硬件的功能就是点亮或者不亮,物理上想要点亮一颗LED只需要给他的正负极上加正电压即可,要熄灭一颗LED只需要去掉电压即可…

字节码编程javassist之生成带有注解的类

写在前面 本文看下如何使用javassist生成带有注解的类。 1:程序 测试类 package com.dahuyou.javassist.huohuo.cc;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import ja…

JVM原理(二四):JVM虚拟机锁优化

高效并发是从JDK 5升级到JDK 6后一项重要的改进项,HotSpot虛 拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术,如适应性自旋( Adaptive Spinning)、锁消除( Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locking)、…

了解PPO算法(Proximal Policy Optimization)

Proximal Policy Optimization (PPO) 是一种强化学习算法,由 OpenAI 提出,旨在解决传统策略梯度方法中策略更新过大的问题。PPO 通过引入限制策略更新范围的机制,在保证收敛性的同时提高了算法的稳定性和效率。 PPO算法原理 PPO 算法的核心…