Nginx 配置文件入门指南

文章目录

      • 1. 什么是 Nginx?
      • 2. Nginx 配置文件的基础结构
      • 3. 主要配置指令详解
        • 3.1. 全局指令
        • 3.2. events 块
        • 3.3. http 块
        • 3.4. server 块
        • 3.5. location 块
      • 4. 创建一个简单的 Nginx 服务器
        • 步骤一:安装 Nginx
        • 步骤二:启动并启用 Nginx
        • 步骤三:配置站点
        • 步骤四:访问网站
      • 5. 配置静态资源的服务
        • 步骤一:组织静态资源目录
        • 步骤二:更新站点配置
        • 步骤三:重新测试和重启 Nginx
        • 步骤四:验证静态资源
      • 6. 设置反向代理
        • 步骤一:假设后端应用运行在 `localhost:3000`
        • 步骤二:更新站点配置
        • 步骤三:重新测试和重启 Nginx
        • 步骤四:验证反向代理
      • 7. 管理多个站点
        • 步骤一:创建多个站点目录
        • 步骤二:创建站点配置文件
        • 步骤三:启用站点
        • 步骤四:测试和重启 Nginx
        • 步骤五:DNS 配置
      • 8. 常用配置技巧
        • 8.1. 使用 `include` 指令
        • 8.2. 配置 Gzip 压缩
        • 8.3. 配置错误页面
      • 9. 测试和重启 Nginx
        • 步骤一:测试配置文件
        • 步骤二:重启或重新加载 Nginx
      • 10. 安全性最佳实践
        • 10.1. 使用 HTTPS
        • 10.2. 限制访问权限
        • 10.3. 防止 DDoS 攻击
      • 11. 实战示例
        • 项目目录结构:
        • 步骤一:创建静态资源和错误页面
        • 步骤二:配置站点
        • 步骤三:启用站点配置并配置 SSL
        • 步骤四:验证配置

1. 什么是 Nginx?

Nginx(发音为 “Engine X”)是一款高性能的开源 HTTP 服务器和反向代理服务器,同时也支持 IMAP/POP3 代理。由于其高并发处理能力、低资源消耗和灵活的配置选项,Nginx 成为了许多大型网站和应用的首选服务器。

主要功能:

  • Web 服务器:提供静态和动态内容。
  • 反向代理:代理请求到后端应用服务器,实现负载均衡。
  • 负载均衡:分配流量到多台服务器,提高可用性和扩展性。
  • 缓存:缓存响应内容,提升性能。
  • 安全性:支持 SSL/TLS,加固服务器安全。

2. Nginx 配置文件的基础结构

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf。为了更好地组织和管理站点配置,Nginx 支持将配置文件拆分成多个部分,常见的目录结构如下:

  • 主配置文件/etc/nginx/nginx.conf
  • 站点配置目录
    • /etc/nginx/sites-available/:存放所有站点的配置文件。
    • /etc/nginx/sites-enabled/:存放已启用站点的符号链接。
  • 其他配置
    • /etc/nginx/conf.d/:存放额外的配置文件,如模块配置。
    • /etc/nginx/snippets/:存放可复用的配置片段,如 SSL 配置。

主配置文件示例:

user www-data;
worker_processes auto;
pid /run/nginx.pid;events {worker_connections 768;
}http {include       /etc/nginx/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;include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}

配置块层级:

  1. 全局块:定义全局指令,适用于所有配置。
  2. events 块:配置与连接相关的指令。
  3. http 块:包含 HTTP 服务器相关配置,可以嵌套多个 server 块。
  4. server 块:定义一个虚拟主机,包含多个 location 块。
  5. location 块:指定如何处理特定的请求 URI。

3. 主要配置指令详解

3.1. 全局指令

这些指令位于配置文件的最外层,对整个 Nginx 服务生效。

  • user:指定 Nginx 工作进程运行的用户和用户组。
    user www-data;
    
  • worker_processes:指定工作进程的数量,通常设置为 auto 以自动匹配 CPU 核心数。
    worker_processes auto;
    
  • pid:指定存储 Nginx 主进程 PID 的文件路径。
    pid /run/nginx.pid;
    
3.2. events 块

配置与连接处理相关的指令。

  • worker_connections:每个工作进程允许的最大连接数。
    events {worker_connections 768;
    }
    
3.3. http 块

包含 HTTP 服务器相关配置,可以嵌套多个 server 块。

  • include:包含其他配置文件。
    http {include /etc/nginx/mime.types;...
    }
    
  • log_formataccess_log:定义日志格式和日志文件路径。
    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:启用高效文件传输。
    sendfile on;
    
  • keepalive_timeout:保持连接的超时时间。
    keepalive_timeout 65;
    
3.4. server 块

定义一个虚拟主机,包含多个 location 块。

  • listen:指定监听的端口和协议。
    server {listen 80;...
    }
    
  • server_name:定义服务器的域名或 IP 地址。
    server_name example.com www.example.com;
    
  • root:指定站点根目录。
    root /var/www/myapp;
    
  • index:指定默认首页文件。
    index index.html;
    
3.5. location 块

指定如何处理特定的请求 URI。

  • 基本语法
    location [modifier] [URI] {# 指令
    }
    
  • 常用修饰符
    • =:精确匹配。
    • ~:区分大小写的正则表达式匹配。
    • ~*:不区分大小写的正则表达式匹配。
    • ^~:前缀匹配,一旦匹配则不进行正则匹配。

示例:

location /images/ {# 配置静态资源
}location /api/ {# 配置反向代理
}location / {# 默认配置
}

4. 创建一个简单的 Nginx 服务器

让我们通过一个具体的示例,创建一个简单的 Nginx 服务器,提供静态内容。

步骤一:安装 Nginx

在大多数 Linux 发行版上,可以通过包管理器安装 Nginx。

Ubuntu/Debian:

sudo apt update
sudo apt install nginx

CentOS/RHEL:

sudo yum install epel-release
sudo yum install nginx
步骤二:启动并启用 Nginx

启动 Nginx 服务,并设置为开机自启。

sudo systemctl start nginx
sudo systemctl enable nginx
步骤三:配置站点
  1. 创建站点目录

假设你的网站文件位于 /var/www/myapp

sudo mkdir -p /var/www/myapp
  1. 设置文件权限

确保 Nginx 用户(通常为 www-datanginx)有权限访问该目录。

sudo chown -R www-data:www-data /var/www/myapp
sudo chmod -R 755 /var/www/myapp
  1. 创建示例首页

创建一个简单的 index.html 文件。

sudo nano /var/www/myapp/index.html

内容示例:

<!DOCTYPE html>
<html>
<head><title>Welcome to MyApp!</title>
</head>
<body><h1>成功部署 Nginx 服务器!</h1><p>这是一个示例页面。</p>
</body>
</html>
  1. 创建站点配置文件

/etc/nginx/sites-available/ 目录下创建一个新的配置文件。

sudo nano /etc/nginx/sites-available/myapp

示例配置:

server {listen 80;server_name yourdomain.com www.yourdomain.com;root /var/www/myapp;index index.html;location / {try_files $uri $uri/ =404;}# 可选:设置日志文件access_log /var/log/nginx/myapp.access.log;error_log /var/log/nginx/myapp.error.log;
}

配置说明:

  • listen 80;:监听 80 端口(HTTP)。
  • server_name:指定服务器的域名,多个域名之间用空格分隔。
  • root:指定站点根目录。
  • index:指定默认首页文件。
  • location /:处理所有以 / 开头的请求,尝试找到对应的文件或目录,未找到则返回 404 错误。
  • access_logerror_log:可选,定义日志文件路径。
  1. 启用站点配置

创建符号链接,将站点配置启用。

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
  1. 测试配置

确保配置文件语法正确。

sudo nginx -t

输出示例:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. 重启 Nginx

使配置生效。

sudo systemctl restart nginx
步骤四:访问网站

在浏览器中访问 http://yourdomain.com,应能看到你创建的示例页面。


5. 配置静态资源的服务

为了高效地提供静态资源(如图片、CSS、JavaScript),可以进一步优化 Nginx 的配置。

步骤一:组织静态资源目录

假设你的项目目录结构如下:

/var/www/myapp/
├── index.html
├── css/
│   └── styles.css
├── js/
│   └── app.js
└── images/└── logo.png
步骤二:更新站点配置

编辑站点配置文件 /etc/nginx/sites-available/myapp,添加对静态资源的处理。

示例配置:

server {listen 80;server_name yourdomain.com www.yourdomain.com;root /var/www/myapp;index index.html;# 处理静态资源请求location /css/ {alias /var/www/myapp/css/;try_files $uri $uri/ =404;expires 30d;add_header Cache-Control "public, no-transform";}location /js/ {alias /var/www/myapp/js/;try_files $uri $uri/ =404;expires 30d;add_header Cache-Control "public, no-transform";}location /images/ {alias /var/www/myapp/images/;try_files $uri $uri/ =404;expires 30d;add_header Cache-Control "public, no-transform";}# 处理根目录请求location / {try_files $uri $uri/ =404;}access_log /var/log/nginx/myapp.access.log;error_log /var/log/nginx/myapp.error.log;
}

配置说明:

  • location /css/location /js/location /images/
    • alias:将 URL 路径映射到文件系统路径。
    • try_files:尝试找到对应的文件,未找到则返回 404 错误。
    • expires:设置浏览器缓存过期时间(如 30 天)。
    • add_header:添加 HTTP 头部,设置缓存控制策略。

注意:

  • 使用 alias 时,路径末尾需要带斜杠 /,确保正确映射文件路径。
  • try_files 指令确保如果文件不存在,服务器会返回 404 错误,而不是默认的目录列表。
步骤三:重新测试和重启 Nginx
sudo nginx -t
sudo systemctl restart nginx
步骤四:验证静态资源

在浏览器中访问 http://yourdomain.com/css/styles.csshttp://yourdomain.com/js/app.jshttp://yourdomain.com/images/logo.png,应能正确加载相应的资源。


6. 设置反向代理

反向代理允许 Nginx 将客户端请求转发到后端应用服务器(如 Node.js、Django、Ruby on Rails),同时 Nginx 负责处理客户端的连接,提高性能和安全性。

步骤一:假设后端应用运行在 localhost:3000

你的后端应用监听在本地的 3000 端口。

步骤二:更新站点配置

编辑 /etc/nginx/sites-available/myapp,添加反向代理配置。

示例配置:

server {listen 80;server_name yourdomain.com www.yourdomain.com;root /var/www/myapp;index index.html;# 处理静态资源location /static/ {alias /var/www/myapp/static/;try_files $uri $uri/ =404;expires 30d;add_header Cache-Control "public, no-transform";}# 反向代理 API 请求location /api/ {proxy_pass http://localhost:3000/api/;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;}# 处理根目录请求location / {try_files $uri $uri/ /index.html;}access_log /var/log/nginx/myapp.access.log;error_log /var/log/nginx/myapp.error.log;
}

配置说明:

  • location /api/

    • proxy_pass:将以 /api/ 开头的请求转发到 http://localhost:3000/api/
    • proxy_set_header:设置 HTTP 头部,传递原始请求的信息给后端应用。
      • Host:保持原始请求的 Host 头部。
      • X-Real-IP:传递客户端的真实 IP 地址。
      • X-Forwarded-For:记录代理链中的客户端 IP 地址。
      • X-Forwarded-Proto:记录客户端请求的协议(HTTP 或 HTTPS)。
  • location /

    • try_files $uri $uri/ /index.html;:尝试找到对应的文件或目录,未找到则返回 index.html。这对于单页应用(如 React、Vue)非常有用。
步骤三:重新测试和重启 Nginx
sudo nginx -t
sudo systemctl restart nginx
步骤四:验证反向代理

确保你的后端应用正在运行,并通过 Nginx 转发请求。例如,访问 http://yourdomain.com/api/users,应能通过 Nginx 访问后端应用的 /api/users 接口。


7. 管理多个站点

Nginx 允许在同一服务器上托管多个站点,通过虚拟主机(server blocks)实现。

步骤一:创建多个站点目录

假设你有两个站点:example1.comexample2.com

sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/htmlsudo chown -R www-data:www-data /var/www/example1.com
sudo chown -R www-data:www-data /var/www/example2.comsudo chmod -R 755 /var/www/example1.com
sudo chmod -R 755 /var/www/example2.com
步骤二:创建站点配置文件
  1. 站点 1:example1.com
sudo nano /etc/nginx/sites-available/example1.com

内容示例:

server {listen 80;server_name example1.com www.example1.com;root /var/www/example1.com/html;index index.html;location / {try_files $uri $uri/ =404;}access_log /var/log/nginx/example1.com.access.log;error_log /var/log/nginx/example1.com.error.log;
}
  1. 站点 2:example2.com
sudo nano /etc/nginx/sites-available/example2.com

内容示例:

server {listen 80;server_name example2.com www.example2.com;root /var/www/example2.com/html;index index.html;location / {try_files $uri $uri/ =404;}access_log /var/log/nginx/example2.com.access.log;error_log /var/log/nginx/example2.com.error.log;
}
步骤三:启用站点

创建符号链接,将站点配置启用。

sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/
步骤四:测试和重启 Nginx
sudo nginx -t
sudo systemctl restart nginx
步骤五:DNS 配置

确保 example1.comexample2.com 的 DNS 记录指向你的服务器 IP 地址。可以通过修改域名注册商的 DNS 设置实现。


8. 常用配置技巧

8.1. 使用 include 指令

为了保持配置文件的整洁,可以将常用配置片段存放在 snippets 目录中,并在需要的地方引用。

创建一个通用的 SSL 配置片段:

sudo nano /etc/nginx/snippets/ssl-params.conf

内容示例:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

在站点配置中引用:

server {listen 443 ssl;server_name yourdomain.com www.yourdomain.com;include snippets/ssl-params.conf;...
}
8.2. 配置 Gzip 压缩

启用 Gzip 压缩可以减少传输的数据量,提高页面加载速度。

http 块中添加:

http {...gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;gzip_min_length 256;gzip_proxied any;gzip_vary on;...
}

说明:

  • gzip on;:启用 Gzip 压缩。
  • gzip_types:指定需要压缩的 MIME 类型。
  • gzip_min_length:设置压缩的最小文件大小(字节)。
  • gzip_proxied:启用代理请求的压缩。
  • gzip_vary:添加 Vary: Accept-Encoding 头部,支持缓存。
8.3. 配置错误页面

自定义错误页面可以提升用户体验。

示例配置:

server {...error_page 404 /custom_404.html;location = /custom_404.html {root /var/www/myapp/errors;internal;}error_page 500 502 503 504 /custom_50x.html;location = /custom_50x.html {root /var/www/myapp/errors;internal;}...
}

说明:

  • error_page:定义错误页面的路径。
  • location = /custom_404.html:指定错误页面的位置,并设置为内部请求,不允许直接访问。

9. 测试和重启 Nginx

每次修改配置文件后,务必测试配置文件的语法是否正确,并重启或重新加载 Nginx 服务以应用更改。

步骤一:测试配置文件
sudo nginx -t

输出示例:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
步骤二:重启或重新加载 Nginx
  • 重新加载配置(不间断服务):
    sudo systemctl reload nginx
    
  • 重启 Nginx
    sudo systemctl restart nginx
    

推荐使用重新加载配置,以避免中断服务。


10. 安全性最佳实践

确保 Nginx 服务器的安全性,是保护网站和用户数据的重要环节。

10.1. 使用 HTTPS

加密数据传输,保护用户隐私。推荐使用 Let’s Encrypt 获取免费的 SSL 证书。

步骤:

  1. 安装 Certbot

    Ubuntu/Debian:

    sudo apt install certbot python3-certbot-nginx
    

    CentOS/RHEL:

    sudo yum install certbot python3-certbot-nginx
    
  2. 获取并安装证书

    sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
    

    跟随提示完成配置,Certbot 会自动修改 Nginx 配置文件以启用 HTTPS。

  3. 自动续期

    Certbot 会自动配置定时任务(cron)进行证书续期,无需手动干预。

10.2. 限制访问权限

防止未经授权的访问和潜在的攻击。

示例配置:

server {...# 禁止访问 .ht 文件location ~ /\.ht {deny all;}# 禁止访问敏感文件location ~* \.(env|config|ini)$ {deny all;}...
}
10.3. 防止 DDoS 攻击

通过限制请求速率,防止恶意攻击。

示例配置:

http {...# 定义限制limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;server {...# 应用限制location /api/ {limit_req zone=mylimit burst=20 nodelay;proxy_pass http://localhost:3000/api/;...}...}
}

说明:

  • limit_req_zone:定义限制区域,基于客户端 IP 地址,限制速率为每秒 10 次请求。
  • limit_req:在特定 location 块中应用限制,burst 允许的突发请求数,nodelay 表示不延迟处理突发请求,超过限制的请求将被拒绝。

11. 实战示例

让我们通过一个完整的实战示例,整合上述内容,配置一个既能提供静态资源,又能作为反向代理的 Nginx 服务器,并启用 HTTPS。

项目目录结构:
/var/www/myapp/
├── static/
│   ├── index.html
│   ├── css/
│   │   └── styles.css
│   ├── js/
│   │   └── app.js
│   └── images/
│       └── logo.png
├── errors/
│   ├── custom_404.html
│   └── custom_50x.html
步骤一:创建静态资源和错误页面
  1. 创建静态资源
sudo mkdir -p /var/www/myapp/static/css
sudo mkdir -p /var/www/myapp/static/js
sudo mkdir -p /var/www/myapp/static/images
  1. 创建错误页面
sudo mkdir -p /var/www/myapp/errors
sudo nano /var/www/myapp/errors/custom_404.html

内容示例:

<!DOCTYPE html>
<html>
<head><title>404 Not Found</title>
</head>
<body><h1>页面未找到</h1><p>抱歉,你访问的页面不存在。</p>
</body>
</html>
  1. 创建默认首页
sudo nano /var/www/myapp/static/index.html

内容示例:

<!DOCTYPE html>
<html>
<head><title>MyApp Home</title><link rel="stylesheet" href="/css/styles.css">
</head>
<body><h1>欢迎来到 MyApp!</h1><img src="/images/logo.png" alt="Logo"><script src="/js/app.js"></script>
</body>
</html>
步骤二:配置站点

编辑 /etc/nginx/sites-available/myapp,整合静态资源服务、反向代理和错误页面配置。

示例配置:

server {listen 80;server_name yourdomain.com www.yourdomain.com;# 重定向所有 HTTP 请求到 HTTPSreturn 301 https://$host$request_uri;
}server {listen 443 ssl;server_name yourdomain.com www.yourdomain.com;# SSL 配置ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;include snippets/ssl-params.conf;root /var/www/myapp/static;index index.html;# Gzip 压缩gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;gzip_min_length 256;gzip_proxied any;gzip_vary on;# 处理静态资源location /css/ {alias /var/www/myapp/static/css/;try_files $uri $uri/ =404;expires 30d;add_header Cache-Control "public, no-transform";}location /js/ {alias /var/www/myapp/static/js/;try_files $uri $uri/ =404;expires 30d;add_header Cache-Control "public, no-transform";}location /images/ {alias /var/www/myapp/static/images/;try_files $uri $uri/ =404;expires 30d;add_header Cache-Control "public, no-transform";}# 反向代理 API 请求location /api/ {proxy_pass http://localhost:3000/api/;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;# 限制请求速率limit_req zone=mylimit burst=20 nodelay;}# 处理根目录请求location / {try_files $uri $uri/ /index.html;}# 自定义错误页面error_page 404 /custom_404.html;location = /custom_404.html {root /var/www/myapp/errors;internal;}access_log /var/log/nginx/myapp.access.log;error_log /var/log/nginx/myapp.error.log;
}

配置说明:

  • HTTP 到 HTTPS 重定向:所有 HTTP 请求重定向到 HTTPS,确保数据传输加密。
  • SSL 配置:引用已获取的 SSL 证书,并包含通用的 SSL 参数。
  • Gzip 压缩:启用 Gzip,优化资源传输。
  • 静态资源处理:分别处理 CSS、JS 和图片资源,设置缓存策略。
  • 反向代理:将 /api/ 请求转发到后端应用服务器,并限制请求速率,防止 DDoS 攻击。
  • 错误页面:自定义 404 错误页面。
步骤三:启用站点配置并配置 SSL
  1. 启用站点
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
  1. 获取 SSL 证书

确保你已经安装了 Certbot,并获取了 SSL 证书。

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
  1. 重启 Nginx
sudo nginx -t
sudo systemctl reload nginx
步骤四:验证配置
  • 访问网站:访问 https://yourdomain.com,应能看到首页并通过 HTTPS 加密连接。
  • 访问 API:访问 https://yourdomain.com/api/,应通过反向代理访问后端应用。
  • 测试静态资源:访问 https://yourdomain.com/css/styles.csshttps://yourdomain.com/js/app.js 等,应能正确加载资源。
  • 测试错误页面:访问不存在的页面,如 https://yourdomain.com/nonexistent,应显示自定义的 404 页面。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试 - 核酸最快检测效率 - 动态规划、背包问题(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

基于单片机的智能浇花系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采样DHT11温湿度传感器检测温湿度&#xff0c;通过LCD1602显示 4*4按键矩阵可以设置温度湿度阈值&#xff0c;温度大于阈值则开启水泵&#xff0c;湿度大于阈值则开启风扇…

基于STM32的智能窗帘控制系统设计

引言 本项目将基于STM32微控制器设计一个智能窗帘控制系统&#xff0c;用户可以通过按钮或遥控器控制窗帘的开关&#xff0c;并且系统能够根据光照强度自动调节窗帘的开合状态。该项目展示了STM32微控制器在家居自动化中的应用&#xff0c;以及与光照传感器、直流电机和红外接…

Linux网络编程 -- 网络基础

本文主要介绍网络的一些基础概念&#xff0c;不涉及具体的操作原理&#xff0c;旨在构建对网络的基础认识。 1、网络的早期发展历程 20世纪50年代 在这一时期&#xff0c;计算机主机非常昂贵&#xff0c;而通信线路和设备相对便宜。为了共享计算机主机资源和进行信息的综合处…

模拟器GSN3之DHCP动态分配IP地址配置案例

前文《详解DHCP服务工作原理及配置案例》介绍了DHCP服务工作原理&#xff0c;要想彻底理解、应用DHCP服务&#xff0c;须通过实证案例学习&#xff0c;该文在GSN3虚拟环境下&#xff0c;构建DHCP服务的环境。 一、配置环境&#xff1a; 1、GSN3 2、路由器&#xff1a;R1、R2…

冥想第一千三百零一天(1301)

1.今天上午溪溪和小侄子写作业&#xff0c;我带着桐桐去了惠济区的裕华广场永辉&#xff0c;给家人买了好吃的&#xff0c;下午4点半左右去了妈妈朋友家里摘石榴。 2.感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不断进步的自己。

[C++]使用纯opencv部署yolov11旋转框目标检测

【官方框架地址】 GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 【算法介绍】 YOLOv11是一种先进的对象检测算法&#xff0c;它通过单个神经网络实现了快速的物体检测。其中&#xff0c;旋转框检测是YOLOv11的一项重要特性&#xff0c;它可以有效地检…

利用 Python 爬虫采集 1688商品详情

1688是中国的一个大型B2B电子商务平台&#xff0c;主要用于批发和采购各种商品。对于需要从1688上获取商品详情数据、工程数据或店铺数据的用户来说&#xff0c;可以采用以下几种常见的方法&#xff1a; 官方API接口&#xff1a;如果1688提供了官方的API接口&#xff0c;那么可…

FinOps现状分析:行业趋势与未来展望

一、FinOps 的国内现状 《FinOps 现状》是 FinOps 基金会自 2020 年以来开展的一项年度调查&#xff0c;旨在收集对关键优先、行业趋势和 FinOps 实践方向 的见解。该调查有助于为 FinOps 基金会的活动提供信息&#xff0c;并为更广泛的市场提供有关 FinOps 在各种组织中如何实…

redhat7.7 linux 网络配置文件

一、为什么虚拟网卡配置文件是ens33 变更目录至网络脚本&#xff08;network-scripts&#xff09;文件夹&#xff0c;发现网络配置文件名称为“ifcfg-ens33” cd /etc/sysconfig/network-scripts ls扩展&#xff1a;“ifcfg-ens33”文件下面还有一个“ifcfg”前缀的文件&…

线程互斥函数的例子

代码 #include<stdio.h> #include<pthread.h> #include<sched.h> void *producter_f(void *arg); void *consumer_f(void *arg); int buffer_has_item0; pthread_mutex_t mutex; int running1; int main(void) {pthread_t consumer_t;pthread_t producter_t…

【ubuntu】APT、apt、apt-get介绍

目录 1.apt简介 2.常用apt指令 2.1安装 2.2更新列表 2.3更新已经安装的软件包 2.4搜索软件包 2.5显示软件包信息 2.6移除软件包 2.7清理无用的安装包 2.8清理无用的依赖项 3.apt和apt-get 3.1区别 3.2 总结 1.apt简介 apt的全称是advanced package …

大学生就业桥梁:基于Spring Boot的招聘系统

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

No.1 | 从小白到入门:我的渗透测试笔记

嘿&#xff0c;小伙伴们&#xff01;好久不见啊&#xff0c;是不是都以为我失踪了&#xff1f;&#x1f602; 其实呢&#xff0c;最近一直在埋头苦学&#xff0c;感觉自己就像是在技术的海洋里游泳&#xff0c;每天都在吸收新知识。现在终于有时间冒个泡&#xff0c;跟大家分享…

脱口秀演员调侃王楚钦引争议

听说脱口秀演员调侃王楚钦输球&#xff0c;野生喜剧回应暂停演出合作&#xff0c;这不仅引发了关于脱口秀表演冒犯边界的讨论&#xff0c;也让我们反思言论自由与尊重他人之间的界限。 脱口秀作为一种艺术形式&#xff0c;其核心在于通过幽默、讽刺的方式&#xff0c;对社会现象…

Meta MovieGen AI:颠覆性的文本生成视频技术详解

近年来&#xff0c;生成式AI技术的发展迅猛&#xff0c;尤其是在文本生成图像、文本生成视频等领域。Meta公司近期推出的MovieGen AI&#xff0c;以其强大的文本生成视频能力震撼了整个AI行业。本文将详细解读Meta MovieGen AI的核心技术、功能特性及其在实际应用中的潜力。 一…

Mac 安装OpenAI的开源语音神器Whisper

一.Whisper 项目地址 1.GitHub项目地址 https://github.com/openai/whisper二.Whisper项目简介 Whisper 是 OpenAI 开源的语音神器&#xff0c;可以实现识别音频、视频中的人声&#xff0c;并将人声转换为字幕内容&#xff0c;保存到文件&#xff1b; 三.Whisper 安装教程 …

一“填”到底:深入理解Flood Fill算法

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 floodfill算法是什么&#xff1f; 二 相关OJ题练习 2.1 图像渲染 2.2 岛屿数量 2.3 岛屿的最大面积 2.4 被围绕的区域 2.5 太平洋大西洋水流问题 2.6 扫雷游戏 2.7 衣橱整…

Fastjson反序列化

Fastjson反序列化一共有三条利用链 TempLatesImpl&#xff1a;实战中不适用JdbcRowSetImpl&#xff1a;实际运用中较为广泛BasicDataSource&#xff08;BCEL&#xff09; 反序列化核心 反序列化是通过字符串或字节流&#xff0c;利用Java的反射机制重构一个对象。主要有两种…

C语言复习概要(二)

本文目录 C语言中的数组与函数详解1. 引言2. 数组2.1. 什么是数组&#xff1f;语法&#xff1a;示例&#xff1a; 2.2. 数组的初始化示例 1&#xff1a;在声明时初始化示例 2&#xff1a;部分初始化示例 3&#xff1a;运行时赋值 2.3. 数组的访问与修改示例&#xff1a; 2.4. 多…