当前位置: 首页 > news >正文

linux网络服务+linux数据库5

1.Nginx

1.1 讲在Niginx之前

一、同步 vs 异步:核心看 “结果怎么拿”

先记住:同步是 “自己等结果”,异步是 “别人通知结果”,用 “点外卖” 类比最直观:

类型生活例子(点外卖)技术解释
同步你站在餐厅门口,一直等到外卖做好,自己去取发起请求后,一直等待,直到服务器返回结果,期间不能干别的(比如代码里调用接口后,程序暂停,等结果回来再继续)
异步你点完外卖,留了电话,回公司干活,外卖到了打电话通知你发起请求后,不用等待,直接去干别的,服务器处理完后,通过 “回调、消息通知” 等方式告诉你结果(比如手机 APP 点外卖,后台处理,做好了给你发推送)

二、阻塞 vs 非阻塞:核心看 “能不能干别的”

再记住:阻塞是 “卡住不能动”,非阻塞是 “能同时干别的”,用 “烧水” 类比更清楚:

类型生活例子(烧开水)技术解释
阻塞你把水放壶里,站在炉子前,一直等水烧开,期间啥也干不了发起操作后,必须等操作完成才能继续(比如代码里读文件,文件很大,程序就卡住,直到读完才能执行下一行)
非阻塞你把水放壶里,打开炉子,然后去看书 / 刷手机,每隔一会儿看一眼水开没发起操作后,立即得到 “是否完成” 的状态,如果没完成,就去干别的,过会儿再检查(比如代码里读文件,读了一部分,发现还没读完,就先处理其他逻辑,之后再回来读)

三、组合起来:四种常见场景

实际场景中,“同步 / 异步” 和 “阻塞 / 非阻塞” 是交叉组合的,用 “打车” 再举四个例子,彻底分清:

1. 同步阻塞(最常见,也最 “笨”)
  • 场景:你在路边拦车,站着不动,一直等司机停下,期间不看手机、不聊天,就盯着马路。
  • 技术:调用一个接口,程序完全暂停,直到接口返回结果,期间 CPU 啥也不做。
2. 同步非阻塞(很少见,有点矛盾)
  • 场景:你在路边拦车,没等到车,但也没站着傻等,而是边等边刷手机,但每 10 秒抬头看一次马路(主动检查有没有车)。
  • 技术:发起请求后,程序不暂停,会去执行其他代码,但每隔一段时间主动检查 “请求有没有结果”
3. 异步阻塞(几乎不用,逻辑矛盾)
  • 场景:你用手机叫车,然后一直盯着手机,啥也不干,直到收到 “司机已到” 的通知。
  • 技术:发起异步请求后,程序还是卡住等通知,失去了异步 “不等待” 的优势,所以很少用。
4. 异步非阻塞(最高效,常用)
  • 场景:你用手机叫车,然后回工位干活(回消息、写报告),手机响了(收到通知)再去坐车
  • 技术:发起异步请求后,程序直接去执行其他任务,等服务器通过 “回调函数、消息队列” 等方式通知结果,再处理结果。

1.2 概述与实验

概述

工作模式

master-worker 模式

原理

  • master 进程:扮演 “管理者” 的角色。它不直接处理网络请求,主要负责读取和验证配置文件(比如 nginx.conf)、管理 worker 进程(包括创建、终止、监控等)、绑定端口以及接收外界的信号(如重启、重新加载配置等信号) 。可以把 master 进程理解为一个公司的经理,负责制定整体计划和管理员工。
  • worker 进程:是真正处理网络请求的 “执行者”。多个 worker 进程会竞争来自客户端的请求,每个 worker 进程都是独立运行的,它们能够独立地处理多个请求。worker 进程之间是平等的,并且相互之间不会共享数据,这样可以避免数据竞争等问题。在接收到 master 进程的指令后,worker 进程会按照配置文件中的规则来处理请求,比如进行反向代理、负载均衡、缓存处理等操作。

优势

  • 稳定性高:如果一个 worker 进程因为某些异常(如内存泄漏、非法操作等)而崩溃,其他 worker 进程可以继续工作,不会影响整个 Nginx 服务的正常运行。就像公司里某个员工请假或者离职,其他员工仍然可以完成工作任务。
  • 充分利用多核 CPU:多个 worker 进程可以分别绑定到不同的 CPU 核心上,从而充分利用多核 CPU 的计算资源,提高整体的处理性能。例如,在 4 核 CPU 的服务器上,启动 4 个 worker 进程,每个进程可以在一个核心上高效运行,大大提升了 Nginx 对高并发请求的处理能力。
  • 热部署:在不停止服务的情况下,可以通过 master 进程重新加载配置文件,实现对 Nginx 配置的更新。这就好比公司在不影响业务正常开展的情况下,经理可以修改工作安排和规章制度。

应用场景

  • 高并发的 Web 服务:如大型电商网站、社交平台等,这些网站每天会面临大量用户的访问请求,master - worker 模式能够高效地处理高并发请求,确保服务的稳定性和响应速度。
  • 反向代理和负载均衡场景:当 Nginx 作为反向代理服务器,需要将大量客户端请求转发到后端的多个服务器时,master - worker 模式可以通过 worker 进程的并发处理能力,实现请求的快速转发和负载均衡,提升后端服务器集群的整体性能 。
单进程模式

        原理单进程模式下,Nginx 只有一个进程来处理所有的任务,包括监听网络端口、接收客户端请求、处理请求逻辑(如解析 HTTP 请求头、处理业务逻辑、返回响应等) 。这个进程会按照顺序依次处理每个请求,在处理一个请求时,其他请求需要排队等待。

优势

  • 简单轻量:由于只有一个进程,没有复杂的进程间通信和管理机制,代码实现相对简单,资源占用也相对较少。这就像一个小作坊,老板一个人包揽所有的工作,没有过多的管理成本。
  • 易于调试:在调试代码或者排查问题时,单进程模式下的程序逻辑相对清晰,因为不存在多进程之间的交互和同步问题,开发人员可以更方便地跟踪和分析程序的执行流程。

劣势

  • 性能瓶颈:在高并发场景下,由于同一时间只能处理一个请求,其他请求只能等待,会导致请求的响应时间变长,整体性能急剧下降。例如,当有大量用户同时访问网站时,单进程模式的 Nginx 会让用户感觉网站响应很慢,甚至出现卡顿现象。
  • 稳定性差:一旦这个唯一的进程出现问题(如遇到未处理的异常、内存错误等),整个 Nginx 服务就会崩溃,导致无法提供服务。

配置文件

实验1:nginx状态统计

步骤 1:安装 Nginx 并启用 stub_status 模块
操作
  1. 编译安装 Nginx(带 --with-http_stub_status_module
    • 下载 Nginx 源码包(如 nginx-1.20.1.tar.gz):
      wget http://nginx.org/download/nginx-1.20.1.tar.gz
      tar -zxvf nginx-1.20.1.tar.gz
      cd nginx-1.20.1
      
    • 配置编译参数(启用 stub_status 模块):
      ./configure --prefix=/usr/local/nginx --with-http_stub_status_module
      
    • 编译并安装:
      make && make install
      
原理

--with-http_stub_status_module 是编译参数,用于将 “状态统计模块” 编译进 Nginx,否则无法使用 stub_status 指令。

验证

执行 /usr/local/nginx/sbin/nginx -V(注意是大写 V),输出应包含 --with-http_stub_status_module,说明模块已启用。

步骤 2:修改 Nginx 配置文件,开启状态统计
操作
  1. 打开 Nginx 主配置文件 nginx.conf
    vim /usr/local/nginx/conf/nginx.conf
    
  2. 要监控的 server 块中,添加 location 配置(示例中监听 80 端口的 server):
    server {listen       80;server_name  localhost;# 新增:状态统计配置location /nginx_status {stub_status on;    # 开启状态统计access_log off;    # 关闭该路径的访问日志(可选,减少日志冗余)allow 127.0.0.1;   # 仅允许本地访问(安全加固,可选)deny all;          # 拒绝其他IP访问(安全加固,可选)}# 其他 location 配置...location / {root   html;index  index.html index.htm;}
    }
    
  3. 保存并退出,检查配置语法
    /usr/local/nginx/sbin/nginx -t
    
    若输出 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful,说明配置无语法错误。
  4. 重启 Nginx 使配置生效:
    /usr/local/nginx/sbin/nginx -s reload
    
原理
  • stub_status on;:启用状态统计功能,Nginx 会在 /nginx_status 路径返回状态信息;
  • access_log off;:关闭该路径的访问日志,避免日志文件过大;
  • allow/deny:限制访问 IP,增强安全性(实验可暂时注释,方便测试)。
验证

执行 cat /usr/local/nginx/conf/nginx.conf,确认 location /nginx_status 块配置与上述一致。

步骤 3:客户端访问状态页,验证统计信息
操作

客户端浏览器或命令行(如 curl)访问:

  • 若允许所有 IP 访问:http://Nginx服务器IP/nginx_status
  • 若仅允许本地访问(需在服务器本地执行):curl http://127.0.0.1/nginx_status
原理

Nginx 会在 /nginx_status 路径返回纯文本的状态统计,包含 “活跃连接数”“已处理的连接 / 握手 / 请求数” 等。

验证
  • 浏览器访问:页面应显示类似以下内容(数字为动态统计值):
    Active connections: 1 
    server accepts handled requests
    1 1 1 
    Reading: 0 Writing: 1 Waiting: 0 
    
  • curl 访问(服务器本地执行):
    curl http://127.0.0.1/nginx_status
    
    输出与浏览器一致,说明状态统计生效。
步骤 4:解读状态指标(核心验证)

状态页的每行内容含义:

  1. Active connections: N:当前活跃的客户端连接数(包括 “正在读取请求”“正在返回响应”“等待请求” 的连接)。
  2. server accepts handled requests
    • 第一个数:Nginx 已接受的连接总数
    • 第二个数:Nginx 已成功处理的连接总数accepts 和 handled 通常相等,除非有连接限制);
    • 第三个数:Nginx 已处理的请求总数(因 HTTP 支持 “Keep-Alive”,一个连接可能处理多个请求,所以 requests 通常大于 handled)。
  3. Reading: R:正在读取客户端请求头的连接数;Writing: W:正在向客户端返回响应的连接数;Waiting: W:处于 **“Keep-Alive” 等待状态 ** 的连接数(即客户端保持连接,等待下一次请求)。
步骤 5:模拟请求,验证统计变化
操作
  1. 打开多个客户端(或用 ab 工具压测)访问 Nginx 服务器(如访问默认页 http://Nginx服务器IP/)。
  2. 同时刷新状态页 http://Nginx服务器IP/nginx_status
原理

模拟请求会增加 “已处理的请求数” 和 “活跃连接数”,验证状态统计的实时性。

验证
  • Active connections 会随请求数增加而上升;
  • requests 数值会快速增长,且远大于 handled 数值(若启用 Keep-Alive);
  • Reading/Writing/Waiting 会根据请求处理阶段动态变化。

实验2:目录保护

步骤 1:确认 Nginx 已启用 auth_basic 模块
操作

        执行 nginx -V(大写 V)查看编译参数,输出应包含 --with-http_auth_basic_module(Nginx 通常默认启用该模块)。

原理
  ngx_http_auth_basic_module 是 Nginx 实现 HTTP 基本认证的核心模块,需确保编译时未被禁用。
验证

        若输出包含 --with-http_auth_basic_module,说明模块已启用;若未包含,需重新编译 Nginx 并添加该模块。

步骤 2:修改 Nginx 配置,添加 HTTP 基本认证
操作
  1. 打开 Nginx 主配置文件 nginx.conf
    vim /usr/local/nginx/conf/nginx.conf
    
  2. 在 location /nginx_status 块中添加认证配置
    location /nginx_status {stub_status on;access_log off;# 新增:HTTP 基本认证auth_basic "Welcome to nginx_status!";  # 认证提示语(浏览器弹窗显示)auth_basic_user_file /usr/local/nginx/html/htpasswd.nginx;  # 密码文件路径
    }
    
  3. 保存并退出,检查配置语法
    /usr/local/nginx/sbin/nginx -t
    
    若输出 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful,说明配置无语法错误。
原理
  • auth_basic "提示语":设置浏览器弹窗的认证提示文字;
  • auth_basic_user_file 路径:指定存储 “用户名 + 密码” 的文件路径,Nginx 会验证用户输入是否与该文件匹配。
验证

执行 cat /usr/local/nginx/conf/nginx.conf,确认 location /nginx_status 块包含上述 auth_basic 配置。

步骤 3:生成 HTTP 基本认证的密码文件
操作
  1. 安装 httpd-tools(包含 htpasswd 工具,用于生成密码文件):
    yum install -y httpd-tools
    
  2. 生成密码文件(以创建用户 user1 为例):
    htpasswd -c /usr/local/nginx/html/htpasswd.nginx user1
    
    执行后输入并确认密码(如 123456)。
原理
  • htpasswd 是 Apache 提供的密码文件管理工具,可生成 “用户名:加密密码” 格式的文件;
  • -c创建新的密码文件(若文件已存在,会覆盖原有内容);
  • 后续添加用户时,需去掉 -c(如 htpasswd /usr/local/nginx/html/htpasswd.nginx user2)。
验证
  • 执行 cat /usr/local/nginx/html/htpasswd.nginx,应看到 user1:$apr1$xxx...(密码已被加密);
  • 执行 htpasswd -bv /usr/local/nginx/html/htpasswd.nginx user1 123456-bv 验证用户密码),若输出 Password for user user1 correct.,说明密码设置正确。
步骤 4:重启 Nginx,使配置生效
操作
/usr/local/nginx/sbin/nginx -s reload
原理

        修改配置后,需重启 Nginx 才能加载新的认证规则。

验证

        执行 ps -ef | grep nginx,确认 Nginx 进程正常运行(如 master 和 worker 进程存在)。

步骤 5:验证 HTTP 基本认证
操作

        在客户端浏览器中访问:http://Nginx服务器IP/nginx_status

原理

        浏览器发送请求到 Nginx 后,Nginx 检测到 location /nginx_status 配置了 auth_basic,会弹出 “用户名 + 密码” 输入框,验证通过后才会返回状态统计页面。

验证
  • 输入 user1 和密码 123456,应能成功进入 nginx_status 页面,看到状态统计内容;
  • 输入错误密码(如 wrong),会提示 “401 Unauthorized”,无法访问;
  • 额外验证:在服务器的密码文件中添加新用户 user2htpasswd /usr/local/nginx/html/htpasswd.nginx user2),用 user2 登录也应能成功访问。

实验3:基于IP的身份认证

a.接着上一个实验完成操作

1.3 虚拟主机

(配置看上面这张)

步骤 1:实验准备(域名解析 + 网站目录)
1.1 域名解析(修改本地 hosts 文件模拟)
  • Windows 客户端:打开 C:\Windows\System32\drivers\etc\hosts,添加以下内容(将域名指向 Nginx 服务器 IP,假设服务器 IP 为 192.168.10.10):
    192.168.10.10  blog.atguigu.com
    192.168.10.10  bbs.atguigu.com
    
  • Linux 客户端(可选):打开 /etc/hosts,添加同样内容。
1.2 网站目录与测试文件

在 Nginx 服务器上执行:

# 进入 Nginx 网页根目录(假设为 /usr/local/nginx/html)
cd /usr/local/nginx/html# 创建博客网站目录及测试文件
mkdir blog
echo "This is Blog Website" > blog/index.html# 创建论坛网站目录及测试文件
mkdir bbs
echo "This is BBS Website" > bbs/index.html
原理
  • hosts 文件是本地 “域名 -> IP” 的映射表,优先于 DNS 解析,用于实验环境快速模拟域名访问;
  • 每个网站需要独立的目录存放文件,index.html 是默认首页。
验证
  • 执行 cat /usr/local/nginx/html/blog/index.html,应输出 This is Blog Website
  • 执行 cat /usr/local/nginx/html/bbs/index.html,应输出 This is BBS Website
步骤 2:修改 Nginx 主配置,添加虚拟主机
操作
  1. 打开 Nginx 主配置文件 nginx.conf
    vim /usr/local/nginx/conf/nginx.conf
    
  2. 在 http 块中,添加两个虚拟主机配置(替换原有的 server 块或新增):
    http {# 其他全局配置(如 include、log_format 等)...# 博客虚拟主机server {listen 80;server_name blog.atguigu.com;index index.html index.htm index.php;root html/blog;access_log logs/blog-access.log main;}# 论坛虚拟主机server {listen 80;server_name bbs.atguigu.com;index index.html index.htm index.php;root html/bbs;access_log logs/bbs-access.log main;}
    }
    
  3. 保存并退出(vim 中按 Esc,输入 :wq 回车)。
原理
  • listen 80:监听 80 端口(HTTP 默认端口);
  • server_name:指定该虚拟主机对应的域名;
  • root:指定网站根目录(客户端请求会映射到该目录);
  • access_log:指定该虚拟主机的访问日志路径,main 是预定义的日志格式。
验证

执行 cat /usr/local/nginx/conf/nginx.conf,确认两个 server 块配置与上述一致。

步骤 3:检查配置并重启 Nginx
操作
  1. 检查配置语法(避免错误):
    /usr/local/nginx/sbin/nginx -t
    
  2. 重启 Nginx
    /usr/local/nginx/sbin/nginx -s reload
    
原理

nginx -t 用于提前检查配置文件语法,防止重启失败;修改配置后必须重启 Nginx 才能加载新的虚拟主机配置。

验证
  • 若 nginx -t 输出 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful,说明配置无语法错误;
  • 执行 ps -ef | grep nginx,确认 Nginx 进程正常运行(如 master 和 worker 进程存在)。
步骤 4:验证虚拟主机访问(客户端测试)
操作

客户端浏览器中分别访问:

  • http://blog.atguigu.com
  • http://bbs.atguigu.com
原理

客户端通过 hosts 文件将域名解析到服务器 IP,服务器 Nginx 根据 server_name 匹配虚拟主机,返回对应目录的 index.html

验证
  • 访问 blog.atguigu.com,应显示 This is Blog Website
  • 访问 bbs.atguigu.com,应显示 This is BBS Website
  • 额外验证:在服务器 blog 目录新增文件 test.txt,客户端访问 http://blog.atguigu.com/test.txt 应能正常显示文件内容,说明目录映射正确。

额外验证:命令行访问(非浏览器)

操作

在客户端执行(替换 192.168.10.10 为服务器 IP):

# 访问博客
curl -H "Host: blog.atguigu.com" http://192.168.10.10# 访问论坛
curl -H "Host: bbs.atguigu.com" http://192.168.10.10
原理

curl -H "Host: 域名" 用于模拟浏览器的 Host 请求头,测试虚拟主机的域名匹配逻辑。

验证
  • 博客请求应输出 This is Blog Website
  • 论坛请求应输出 This is BBS Website

1.4 反向代理

步骤 1:准备 Apache 服务器(后端服务器)
操作
  1. 安装 Apache(以 CentOS 7 为例):
    yum install -y httpd
    
  2. 启动 Apache 并设置开机自启
    systemctl start httpd
    systemctl enable httpd
    
  3. 创建测试页面/var/www/html/index.html):
    echo "This is Apache Server" > /var/www/html/index.html
    
原理

        Apache 是后端 Web 服务器,负责提供网页内容,index.html 是默认首页。

验证

客户端浏览器中访问 Apache 服务器的 IP(如 http://192.168.88.100),应显示 This is Apache Server

步骤 2:准备 Nginx 服务器(代理服务器)
操作
  1. 安装 Nginx(以 CentOS 7 为例,参考 Nginx 官方源安装):
    • 配置 Nginx 源:
      cat > /etc/yum.repos.d/nginx.repo << EOF
      [nginx]
      name=nginx repo
      baseurl=http://nginx.org/packages/centos/7/\$basearch/
      gpgcheck=0
      enabled=1
      EOF
      
    • 安装 Nginx:
      yum install -y nginx
      
  2. 启动 Nginx 并设置开机自启
    systemctl start nginx
    systemctl enable nginx
    
原理

        Nginx 作为代理服务器,将接收客户端请求并转发到 Apache。

验证

        在客户端浏览器中访问 Nginx 服务器的 IP(如 http://192.168.88.200),应显示 Nginx 的默认欢迎页(说明 Nginx 正常运行)。

步骤 3:配置 Nginx 反向代理
操作
  1. 打开 Nginx 主配置文件 nginx.conf
    vim /etc/nginx/nginx.conf
    
  2. 要代理的 server 块中,添加 location / 配置(假设 Nginx 监听 80 端口,server_name 为 localhost):
    server {listen       80;server_name  localhost;# 新增:反向代理配置location / {proxy_pass http://192.168.88.100:80;  # Apache 服务器的 IP 和端口}
    }
    
  3. 保存并退出,检查配置语法
    nginx -t
    
    若输出 nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置无语法错误。
  4. 重启 Nginx 使配置生效:
    systemctl restart nginx
    
原理
  • location /:匹配所有路径的请求(如 http://nginx-ip/abc 会被代理到 http://apache-ip/abc);
  • proxy_pass:指定后端 Apache 服务器的地址,Nginx 会将请求转发到该地址。
验证

        执行 cat /etc/nginx/nginx.conf,确认 location / 块包含 proxy_pass http://Apache服务器IP:80

步骤 4:验证反向代理效果
操作

        在客户端浏览器中访问 Nginx 服务器的 IP(如 http://192.168.88.200)。

原理

        客户端请求 Nginx 后,Nginx 会将请求转发到 Apache 服务器,Apache 返回 index.html 内容,再由 Nginx 转发给客户端,客户端感知到的是 “访问 Nginx,但内容来自 Apache”。

验证
  • 浏览器应显示 This is Apache Server(与直接访问 Apache 时的内容一致);
  • 额外验证:在 Apache 服务器的 index.html 中添加新内容(如 echo "New Content" >> /var/www/html/index.html),刷新浏览器,应能看到新内容,说明代理实时同步后端内容。
步骤 5:查看 Nginx 访问日志(可选,验证转发链路)
操作

        查看 Nginx 的访问日志(默认路径 /var/log/nginx/access.log):

cat /var/log/nginx/access.log
原理

        日志中会记录客户端 IP、请求时间、请求路径,以及 proxy_pass 转发的痕迹。

验证

        日志应包含类似以下内容(192.168.88.1 是客户端 IP,192.168.88.100 是 Apache 服务器 IP):

192.168.88.1 - - [日期] "GET / HTTP/1.1" 200 20 "-" "Mozilla/5.0..."

        说明请求从客户端到 Nginx,再转发到 Apache,最后返回响应。

1.5 负载均衡

步骤 1:准备两台 Apache 服务器(后端服务器)
操作(两台服务器均执行,IP 分别为 192.168.88.100 和 192.168.88.200
  1. 安装 Apache
    yum install -y httpd
    
  2. 启动 Apache 并设置开机自启
    systemctl start httpd
    systemctl enable httpd
    
  3. 创建差异化测试页面(区分两台服务器):
    • 服务器 192.168.88.100
      echo "This is Apache Server 100" > /var/www/html/index.html
      
    • 服务器 192.168.88.200
      echo "This is Apache Server 200" > /var/www/html/index.html
      
原理

        两台 Apache 提供 “不同内容的页面”,便于后续验证负载均衡的 “轮询效果”(客户端每次请求应交替得到两台服务器的内容)。

验证
  • 访问 http://192.168.88.100,应显示 This is Apache Server 100
  • 访问 http://192.168.88.200,应显示 This is Apache Server 200
步骤 2:准备 Nginx 服务器(负载均衡器)
操作
  1. 安装 Nginx(参考之前步骤,或使用官方源安装)。
  2. 启动 Nginx
    systemctl start nginx
    
原理

        Nginx 作为 “负载均衡器”,接收客户端请求并转发到后端 Apache 服务器。

验证

        访问 Nginx 服务器 IP(如 http://192.168.88.300),应显示 Nginx 默认欢迎页(说明 Nginx 正常运行)。

步骤 3:配置 Nginx 负载均衡
操作
  1. 打开 Nginx 主配置文件 nginx.conf
    vim /etc/nginx/nginx.conf
    
  2. 在 http 块中,新增 upstream 组(定义后端服务器列表):

    nginx

    http {# 其他全局配置(如 include、log_format 等)...# 定义 upstream 组,命名为 bbsupstream bbs {server 192.168.88.100:80;  # 第一台 Apache 服务器server 192.168.88.200:80;  # 第二台 Apache 服务器}# 原有 server 块,修改 location / 配置server {listen       80;server_name  localhost;location / {proxy_pass http://bbs;  # 转发到 upstream 组 bbsproxy_set_header Host $host;  # 重写请求头,保证域名一致性}}
    }
    
  3. 保存并退出,检查配置语法
    nginx -t
    
    若输出 nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置无语法错误。
  4. 重启 Nginx 使配置生效:
    systemctl restart nginx
    
原理
  • upstream bbs:定义后端服务器组,Nginx 会按轮询算法依次将请求分配到 server 列表中的服务器;
  • proxy_pass http://bbs:将请求转发到 upstream 组 bbs,由 Nginx 自动调度到后端服务器;
  • proxy_set_header Host $host:保留客户端请求的 Host 头,避免后端服务器因 Host 不匹配拒绝请求。
验证

        执行 cat /etc/nginx/nginx.conf,确认 upstream bbs 包含两台 Apache 服务器,且 location / 中 proxy_pass 指向 http://bbs

步骤 4:验证负载均衡效果(轮询)
操作

        在客户端浏览器中多次访问 Nginx 服务器 IP(如 http://192.168.88.300)。

原理

        Nginx 会按照 “轮询” 规则,第一次请求转发到 192.168.88.100,第二次转发到 192.168.88.200,第三次再回到 192.168.88.100,以此类推。

验证
  • 第一次访问:显示 This is Apache Server 100
  • 第二次访问:显示 This is Apache Server 200
  • 第三次访问:显示 This is Apache Server 100
  • 以此类推,验证 “轮询调度” 的交替效果。
步骤 5:查看 Nginx 访问日志(可选,验证调度链路)
操作

        查看 Nginx 的访问日志(默认路径 /var/log/nginx/access.log):

tail -f /var/log/nginx/access.log
原理

        日志中会记录每次请求转发到的后端服务器 IP,可验证轮询顺序。

验证

        日志应包含类似以下交替内容(192.168.88.1 是客户端 IP,192.168.88.100 和 192.168.88.200 是后端 Apache IP):

192.168.88.1 - - [日期] "GET / HTTP/1.1" 200 22 "-" "Mozilla/5.0..."  # 转发到 100
192.168.88.1 - - [日期] "GET / HTTP/1.1" 200 22 "-" "Mozilla/5.0..."  # 转发到 200
192.168.88.1 - - [日期] "GET / HTTP/1.1" 200 22 "-" "Mozilla/5.0..."  # 转发到 100

1.6 https与rewrite

  • HTTPS:基于 SSL/TLS 协议的加密 HTTP 通信,需服务器配置证书(公钥)私钥,客户端通过验证证书建立加密连接。
  • Nginx 实现 HTTPS:依赖 ngx_http_ssl_module 模块,需编译时启用;通过 ssl_certificate 和 ssl_certificate_key 指定证书 / 私钥路径。
  • HTTP 强制跳转 HTTPS:利用 Nginx 的 rewrite 模块,将所有 HTTP(80 端口)请求重定向到 HTTPS(443 端口)。
步骤 1:安装 Nginx 并启用 ssl 模块
操作
  1. 下载 Nginx 源码包(如 nginx-1.20.1.tar.gz):
    wget http://nginx.org/download/nginx-1.20.1.tar.gz
    tar -zxvf nginx-1.20.1.tar.gz
    cd nginx-1.20.1
    
  2. 配置编译参数(启用 ssl 模块)
    ./configure --prefix=/usr/local/nginx --with-http_ssl_module
    
  3. 编译并安装
    make && make install
    
原理

    --with-http_ssl_module 是编译参数,用于将 SSL 模块编译进 Nginx,否则无法配置 HTTPS。

验证

        执行 /usr/local/nginx/sbin/nginx -V(大写 V),输出应包含 --with-http_ssl_module,说明模块已启用。

步骤 2:生成自签名 SSL 证书(实验用)
操作
  1. 创建证书存储目录
    mkdir -p /usr/local/nginx/conf/ssl
    cd /usr/local/nginx/conf/ssl
    
  2. 生成 RSA 私钥atguigu.key):
    openssl genrsa -out atguigu.key 2048
    
  3. 生成证书签名请求(CSR)atguigu.csr):
    openssl req -new -key atguigu.key -out atguigu.csr
    
    执行后需填写信息(如国家、组织、域名等,Common Name 需填服务器域名或 IP,实验可填 bbs.atguigu.com)。
  4. 生成自签名证书atguigu.crt,有效期 365 天):
    openssl x509 -req -days 365 -in atguigu.csr -signkey atguigu.key -out atguigu.crt
    
原理
  • genrsa:生成 RSA 算法的私钥,用于加密通信;
  • req -new:基于私钥生成 CSR(包含服务器身份信息);
  • x509 -req:用私钥给 CSR 签名,生成自签名证书(生产环境需向 CA 机构申请)。
验证

        执行 ls /usr/local/nginx/conf/ssl,应看到 atguigu.keyatguigu.csratguigu.crt

步骤 3:配置 Nginx HTTPS 虚拟主机
操作
  1. 打开 Nginx 主配置文件 nginx.conf
    vim /usr/local/nginx/conf/nginx.conf
    
  2. 添加 HTTPS 虚拟主机配置(监听 443 端口,配置证书 / 私钥):
    http {# 其他全局配置...# HTTPS 虚拟主机server {listen       443 ssl;server_name  bbs.atguigu.com;# SSL 证书配置ssl_certificate     /usr/local/nginx/conf/ssl/atguigu.crt;ssl_certificate_key /usr/local/nginx/conf/ssl/atguigu.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_ciphers "ECDHE-CHACHA20:ECDHE-CHACHA20-draft:ECDHE-AES128-RSA:ECDHE-AES256-RSA:ECDHE-AES128-GCM-SHA256:ECDHE-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-AES128-SHA256:ECDHE-AES256-SHA384:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA384:ECDHE-AES128-SHA:ECDHE-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";# 网站根目录与首页root   html;index  index.html index.htm;}
    }
    
  3. 保存并退出,检查配置语法
    /usr/local/nginx/sbin/nginx -t
    
    若输出 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful,说明配置无语法错误。
  4. 重启 Nginx 使配置生效:
    /usr/local/nginx/sbin/nginx -s reload
    
原理
  • listen 443 ssl:监听 443 端口(HTTPS 默认端口)并启用 SSL;
  • ssl_certificate/ssl_certificate_key:指定证书和私钥路径,Nginx 用这些文件建立加密连接;
  • ssl_protocols/ssl_ciphers:配置支持的 TLS 协议和加密套件,增强安全性。
验证

        执行 cat /usr/local/nginx/conf/nginx.conf,确认 server 块配置与上述一致。

步骤 4:配置 HTTP 强制跳转 HTTPS
操作
  1. 继续编辑 nginx.conf添加 HTTP 虚拟主机配置(监听 80 端口,重定向到 HTTPS):
    http {# 其他全局配置...# HTTP 虚拟主机(用于重定向到 HTTPS)server {listen       80;server_name  bbs.atguigu.com;# 强制跳转到 HTTPSrewrite ^(.*)$ https://$server_name$1 permanent;}# 原有 HTTPS 虚拟主机...
    }
    
  2. 保存并退出,检查配置语法
    /usr/local/nginx/sbin/nginx -t
    
  3. 重启 Nginx
    /usr/local/nginx/sbin/nginx -s reload
    
原理
  • listen 80:监听 HTTP 默认端口;
  • rewrite ^(.*)$ https://$server_name$1 permanent:将所有 HTTP 请求 ** 永久重定向(301)** 到 HTTPS,$1 表示原请求的路径(如 http://bbs.atguigu.com/test 会跳转为 https://bbs.atguigu.com/test)。
验证

        执行 cat /usr/local/nginx/conf/nginx.conf,确认 HTTP 虚拟主机包含 rewrite 配置。

步骤 5:验证 HTTPS 访问与强制跳转
操作
  1. 修改客户端 hosts 文件(模拟域名解析,以 Windows 为例):打开 C:\Windows\System32\drivers\etc\hosts,添加:
    Nginx服务器IP  bbs.atguigu.com
    
  2. 客户端浏览器中访问:
    • http://bbs.atguigu.com(HTTP 访问,测试强制跳转);
    • https://bbs.atguigu.com(HTTPS 访问,测试加密连接)。
原理
  • HTTP 访问时,Nginx 会触发 rewrite 规则,自动跳转为 HTTPS;
  • HTTPS 访问时,浏览器与 Nginx 通过 SSL/TLS 握手,验证自签名证书(会提示 “不安全”,实验环境忽略即可),建立加密通道后显示页面。
验证
  • HTTP 跳转:访问 http://bbs.atguigu.com,浏览器地址栏应自动跳转为 https://bbs.atguigu.com,且响应状态码为 301 Moved Permanently
  • HTTPS 访问:浏览器显示页面(若 html 目录下有 index.html,则显示其内容),地址栏显示 “小锁” 图标(或提示 “不安全”,但能正常访问);
  • 额外验证:查看浏览器 “网络请求”(F12 开发者工具),HTTPS 请求的响应状态码为 200 OK,且 “Protocol” 列为 https

2.企业邮件

2.1 概述与工作原理

2.2 发送方部署

        企业级邮件服务

        前提条件:要有一个dns服务器,将准备好的软件包导入虚拟机

(这个数据库是人家写好的,不需要自己搭建)

  • Bind:DNS 服务器,用于解析邮件域名(如 extmail.org),使客户端能通过域名找到邮件服务器。
  • Apache:Web 服务器,提供 Extmail 的 Web 管理界面。
  • MySQL:数据库,存储邮件系统的用户、域名、邮箱等信息。
  • Extmail:开源邮件系统,包含 Web 界面和后台服务,依赖 Apache + MySQL 运行。
步骤 1:部署 DNS 服务器(Bind)
操作
  1. 安装 Bind
    yum -y install bind
    
  2. 修改 Bind 主配置 /etc/named.conf
    • 打开文件:vim /etc/named.conf
    • 修改监听地址和访问控制为 any
      options {listen-on port 53 { any; };  # 监听所有 IP 的 53 端口(DNS 默认端口)allow-query     { any; };    # 允许所有 IP 查询# 其他配置...
      };
      
  3. 修改区域配置 /etc/named.rfc1912.zones
    • 打开文件:vim /etc/named.rfc1912.zones
    • 添加 extmail.org 的正向解析区域:
      zone "extmail.org" IN {type master;file "extmail.org.zone";  # 区域数据文件名allow-update { none; };
      };
      
  4. 创建区域数据文件 /var/named/extmail.org.zone
    • 复制模板文件:cp /var/named/named.localhost /var/named/extmail.org.zone
    • 编辑数据文件:vim /var/named/extmail.org.zone,修改为:
      $TTL 1D
      @       IN SOA  extmail.org. root.extmail.org. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      dns.extmail.org.
      dns     A       192.168.88.10  # DNS 服务器 IP
      mail    A       192.168.88.10  # 邮件服务器 IP(与 DNS 同服务器)
      
  5. 启动并设置 Bind 开机自启
    systemctl start named
    systemctl enable named
    
验证
  • 另一台客户端执行 nslookup mail.extmail.org,应解析到 192.168.88.10
  • 执行 nslookup dns.extmail.org,应解析到 192.168.88.10
步骤 2:安装依赖软件(Apache、MySQL、GCC 等)
操作
  1. 安装软件包
    yum -y install gcc mysql-server httpd mailx
    
  2. 设置开机自启并启动服务
    • MySQL:
      systemctl enable mysqld
      systemctl start mysqld
      
    • Apache:
      systemctl enable httpd
      systemctl start httpd
      
验证
  • 执行 systemctl status mysqld 和 systemctl status httpd,状态应为 active (running)
  • 浏览器访问 http://服务器IP,应显示 Apache 默认欢迎页。
步骤 3:部署 Extmail 到 Apache
操作
  1. 创建 Web 目录并解压 Extmail
    mkdir -p /var/www/extsuite
    cd /var/www/extsuite
    # 假设 Extmail 压缩包为 extmail-1.2.tar.gz、extman-1.1.tar.gz
    tar -xf extmail-1.2.tar.gz
    tar -xf extman-1.1.tar.gz
    mv extmail-1.2 extmail
    mv extman-1.1 extman
    chown -R root.root /var/www/extsuite
    
  2. 导入 Extmail 数据库
    • 进入 Extmail 数据库脚本目录:cd /var/www/extsuite/extmail/docs
    • 导入初始数据:
      mysql < extmail.sql
      
    • 修改 init.sql 中管理员密码(如改为 123456),再导入:
      # 编辑 init.sql,找到 INSERT INTO manager... 行,修改密码为 '123456'
      vim init.sql
      mysql < init.sql
      
验证
  • 登录 MySQL:mysql -u root -p(无密码直接回车);
  • 执行 use extmail; show tables;,应看到 Extmail 相关表(如 managerdomain 等);
  • 执行 select * from manager;,应看到管理员账号 root@extmail.org 及修改后的密码。
步骤 4:配置 Postfix(邮件传输代理)
操作
  1. 安装 Postfix
    yum -y install postfix
    
  2. 修改 Postfix 主配置 /etc/postfix/main.cf
    • 打开文件:vim /etc/postfix/main.cf
    • 修改关键配置:
      myhostname = mail.extmail.org
      mydomain = extmail.org
      myorigin = $mydomain
      inet_interfaces = all  # 取消注释,监听所有接口
      # 注释掉 inet_interfaces = localhost
      # 新增虚拟邮箱配置
      virtual_mailbox_base = /home/vmail
      virtual_uid_maps = static:600
      virtual_gid_maps = static:600
      virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
      virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
      virtual_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
      
  3. 创建 Postfix 数据库映射文件
    • 以 mysql_virtual_alias_maps.cf 为例,内容:
      user = extmail
      password = extmail
      host = 127.0.0.1
      dbname = extmail
      query = SELECT goto FROM alias WHERE address='%s' AND isactive='1'
      
    • 同理创建 mysql_virtual_mailbox_maps.cf 和 mysql_virtual_domains_maps.cf(参考 Extmail 文档)。
  4. 复制 Extman 模板文件到 Postfix 目录
    cd /var/www/extsuite/extman/docs
    cp mysql_virtual_alias_maps.cf mysql_virtual_domains_maps.cf mysql_virtual_mailbox_maps.cf /etc/postfix/
    
  5. 创建虚拟邮箱目录并授权
    mkdir /home/vmail
    chown -R 600:600 /home/vmail
    
  6. 启动并设置 Postfix 开机自启
    systemctl enable postfix
    systemctl start postfix
    
验证
  • 执行 postconf -n,应显示上述修改的配置(如 inet_interfaces = allvirtual_*_maps 等);
  • 执行 systemctl status postfix,状态应为 active (running)
步骤 5:测试邮件发送与接收
操作
  1. 发送测试邮件
    echo "hello" | mail -s "test" support@extmail.org
    
  2. 检查邮件存储目录
    ls /home/vmail/extmail.org/postmaster/Maildir/new/
    
原理

Postfix 会将发送的邮件存储到虚拟邮箱目录,support@extmail.org 对应 /home/vmail/extmail.org/postmaster/

验证
  • 目录 /home/vmail/extmail.org/postmaster/Maildir/new/ 应存在新邮件文件;
  • 查看邮件内容:cat /home/vmail/extmail.org/postmaster/Maildir/new/*,应包含 “hello” 和主题 “test”。
步骤 6:验证 Extmail Web 界面
操作
  1. 配置 Apache 支持 Extmail
    • 编辑 Apache 配置(如 /etc/httpd/conf.d/extmail.conf):
      Alias /extmail /var/www/extsuite/extmail/html
      <Directory /var/www/extsuite/extmail/html>Options FollowSymLinksAllowOverride NoneRequire all granted
      </Directory>Alias /extman /var/www/extsuite/extman/html
      <Directory /var/www/extsuite/extman/html>Options FollowSymLinksAllowOverride NoneRequire all granted
      </Directory>
      
    • 重启 Apache:systemctl restart httpd
  2. 浏览器访问 Extmail Web 界面
    • Extmail:http://服务器IP/extmail
    • Extman(管理界面):http://服务器IP/extman
验证
  • 访问 Extmail,用管理员账号 root@extmail.org 和修改后的密码(如 123456)登录,应能进入 Web 邮箱;
  • 访问 Extman,登录后应能管理域名、用户、邮箱等。

2.3 接收方部署

        Dovecot 是邮件接收代理(IMAP/POP3 服务器),负责让客户端(如 Outlook、Thunderbird)通过 IMAP/POP3 协议收取邮件。本实验将 Dovecot 与 MySQL 集成,通过数据库验证用户身份,并从指定目录(如 /home/vmail)读取邮件。

步骤 1:安装 Dovecot 及依赖
操作
  1. 安装 Dovecot 软件包
    yum -y install dovecot dovecot-devel dovecot-mysql
    
  2. 设置 Dovecot 开机自启并启动
    systemctl enable dovecot
    systemctl start dovecot
    
验证

        执行 systemctl status dovecot,状态应为 active (running),说明 Dovecot 已启动。

步骤 2:配置 Dovecot 连接 MySQL(用户认证 + 邮件存储)
操作
  1. 修改 Dovecot 主配置 /etc/dovecot/dovecot.conf

    • 打开文件:vim /etc/dovecot/dovecot.conf
    • 确保以下配置(若被注释则取消注释):
      protocols = imap pop3 lmtp
      listen = *, ::
      
    • 作用:启用 IMAP、POP3 协议,监听所有 IP。
  2. 配置用户认证(/etc/dovecot/conf.d/10-mail.conf

    • 打开文件:vim /etc/dovecot/conf.d/10-mail.conf
    • 修改 / 添加:
      mail_location = maildir:/home/vmail/%d/%n/Maildir
      # %d:域名(如 extmail.org);%n:用户名(如 postmaster)
      mail_uid = 600
      mail_gid = 600
      
    • 作用:指定邮件存储格式为 maildir,存储路径为 /home/vmail/域名/用户名/Maildir,并设置邮件目录的属主 UID/GID 为 600(与 Extmail 虚拟用户一致)。
  3. 配置 MySQL 认证(/etc/dovecot/conf.d/10-auth.conf

    • 打开文件:vim /etc/dovecot/conf.d/10-auth.conf
    • 修改:
      disable_plaintext_auth = no  # 允许明文认证(测试用,生产需改 yes 并配 TLS)
      auth_mechanisms = plain login
      !include auth-sql.conf.ext  # 取消注释,启用 SQL 认证
      
  4. 创建 MySQL 认证配置文件 auth-sql.conf.ext

    • 复制模板文件(若 Extmail 提供了 Dovecot 配置模板,可直接复制):
      cp /usr/share/doc/dovecot-2.2.36/example-config/dovecot-sql.conf.ext /etc/dovecot/
      
    • 编辑 /etc/dovecot/dovecot-sql.conf.ext
      driver = mysql
      connect = host=localhost dbname=extmail user=extmail password=extmail
      # Extmail 数据库名、用户名、密码,需与 Extmail 配置一致
      default_pass_scheme = MD5
      password_query = SELECT username, domain, password FROM mailbox WHERE username='%u' AND domain='%d' AND isactive='1'
      user_query = SELECT maildir, 600 AS uid, 600 AS gid FROM mailbox WHERE username='%u' AND domain='%d'
      
    • 作用:password_query 从 mailbox 表查询用户密码;user_query 查询用户的邮件存储目录和 UID/GID。
  5. 重启 Dovecot 使配置生效

    systemctl restart dovecot
    
验证
  • 执行 dovecot -n,输出应包含:
    • mail_location = maildir:/home/vmail/%d/%n/Maildir
    • auth_mechanisms = plain login
    • driver = mysql 及数据库连接信息;
  • 检查日志 /var/log/dovecot/error.log,无明显错误(如 “database connection failed”)。
步骤 3:验证 Dovecot 邮件收取(用 Telnet 测试 POP3)
操作
  1. 安装 Telnet 客户端
    yum -y install telnet
    
  2. 用 Telnet 连接 Dovecot 的 POP3 端口(110)
    telnet mail.extmail.org 110
    
  3. 登录测试(以用户 postmaster@extmail.org,密码 extmail 为例)
    • 输入 USER postmaster@extmail.org,回车后应返回 +OK
    • 输入 PASS extmail,回车后应返回 +OK Logged in.
    • 输入 LIST,查看邮件列表;
    • 输入 RETR 1,查看第一封邮件内容;
    • 输入 QUIT,退出连接。
原理

POP3 是简单的邮件收取协议,通过 USER/PASS 认证后,可列出、读取邮件。

验证
  • 登录成功后,LIST 应显示 Extmail 中存在的邮件(如之前测试发送的邮件);
  • RETR 1 应返回邮件的原始内容(包含发件人、主题、正文等)。
步骤 4:验证 Dovecot 邮件收取(用邮件客户端测试 IMAP)
操作
  1. 配置邮件客户端(如 Thunderbird)
    • 新建账户,协议选 IMAP
    • 服务器:mail.extmail.org
    • 用户名:postmaster@extmail.org
    • 密码:extmail
  2. 查看邮件:客户端应能加载邮箱文件夹,并显示收件箱中的邮件。
验证
  • 客户端成功连接,无 “认证失败”“连接超时” 等错误;
  • 收件箱中能看到通过 Postfix 发送的测试邮件(如步骤 5 中发送的 “hello” 邮件)。

2.4 web端部署

  • Apache 虚拟主机:通过 <VirtualHost> 配置,让 mail.extmail.org 域名指向 Extmail 的 Web 目录,实现 “域名访问 → 加载邮件 Web 界面”。
  • 文件权限与属主:Extmail/Extman 的 CGI 脚本需由 vmail 用户(虚拟邮件用户)执行,因此要修改 CGI 目录的属主 / 属组为 vmail
  • Extmail/Extman 配置文件:通过 webmail.cf 设置邮件存储目录、MySQL 连接信息等,使 Web 界面能与数据库和邮件存储交互。
步骤 1:配置 Apache 虚拟主机,加载邮件 Web 界面
操作
  1. 打开 Apache 主配置文件:
    vim /etc/httpd/conf/httpd.conf
    
  2. 找到并取消 NameVirtualHost *:80 的注释(开启虚拟主机功能)。
  3. 添加 <VirtualHost> 配置块(通常在文件末尾):
    <VirtualHost *:80>DocumentRoot /var/www/extsuite/extmail/htmlServerName mail.extmail.orgScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgiAlias /extmail /var/www/extsuite/extmail/htmlScriptAlias /extman/cgi /var/www/extsuite/extman/cgiAlias /extman /var/www/extsuite/extman/htmlSuexecUserGroup vmail vmail
    </VirtualHost>
    
  4. 重启 Apache 服务:
    systemctl restart httpd
    
原理
  • DocumentRoot:指定 mail.extmail.org 的 Web 根目录为 Extmail 的 HTML 目录;
  • ScriptAlias:将 CGI 脚本目录映射到 URL 路径,使 Apache 能执行 Extmail/Extman 的 CGI 程序;
  • SuexecUserGroup vmail vmail:让 CGI 脚本以 vmail 用户 / 组的身份执行,确保对邮件存储目录的权限。
验证
  • 执行 apachectl -t,检查配置语法,输出 Syntax OK 说明无语法错误;
  • 浏览器访问 http://mail.extmail.org/extmail,应显示 Extmail 的登录界面(无报错则配置生效)。
步骤 2:修改 Extmail CGI 目录的属主 / 属组
操作
  1. 切换到 Extmail 目录:

    cd /var/www/extsuite/extmail
    
  2. 修改 cgi 目录的属主 / 属组为 vmail
    chown -R vmail.vmail cgi/
    
  3. 复制并修改 Extmail 配置文件:
    cd cgi
    cp webmail.cf.default webmail.cf
    vim webmail.cf
    
  4. 在 webmail.cf 中设置关键参数:
    SYS_MAILDIR_BASE = /home/vmail
    SYS_CRYP_TYPE = plain
    SYS_MYSQL_USER = extmail
    SYS_MYSQL_PASS = extmail
    
    • SYS_MAILDIR_BASE:邮件存储的根目录;
    • SYS_MYSQL_USER/PASS:连接 Extmail 数据库的用户名和密码。
原理
  • chown -R vmail.vmail cgi/:让 vmail 用户能执行 CGI 脚本;
  • webmail.cf 配置数据库和邮件存储路径,使 Extmail 能读取用户信息和邮件。
验证
  • 执行 ls -ld /var/www/extsuite/extmail/cgi,输出应为 drwxr-xr-x ... vmail vmail cgi
  • 浏览器访问 http://mail.extmail.org/extmail,输入正确的数据库用户(如 extmail)和密码,应能成功登录(无 “数据库连接失败” 报错)。
步骤 3:修改 Extman CGI 目录的属主 / 属组
操作
  1. 切换到 Extman 目录:
    cd /var/www/extsuite/extman
    
  2. 修改 cgi 目录的属主 / 属组为 vmail
    chown -R vmail.vmail cgi/
    
  3. 复制并修改 Extman 配置文件:
    cd cgi
    cp webman.cf.default webman.cf
    vim webman.cf
    
  4. 在 webman.cf 中设置关键参数:
    SYS_MAILDIR_BASE = /home/vmail
    SYS_SESS_DIR = /tmp
    SYS_CAPTCHA_ON = 0
    SYS_CRYP_TYPE = plain
    
    • SYS_CAPTCHA_ON = 0:实验环境关闭验证码(生产可开启)。
原理

同 Extmail,确保 Extman 的 CGI 脚本能以 vmail 身份执行,并正确连接数据库和邮件存储。

验证
  • 执行 ls -ld /var/www/extsuite/extman/cgi,输出应为 drwxr-xr-x ... vmail vmail cgi
  • 浏览器访问 http://mail.extmail.org/extman,输入管理员账号(如 root@extmail.org)和密码,应能成功登录 Extman 管理界面。
步骤 4:安装 Unix-Syslog 软件(可选,用于日志)
操作
  1. 解压 Unix-Syslog 压缩包(假设为 Unix-Syslog-1.1.tar.gz):
    tar -zxvf Unix-Syslog-1.1.tar.gz
    cd Unix-Syslog-1.1
    
  2. 编译安装:
    perl Makefile.PL
    make
    make install
    
原理

Unix-Syslog 用于更灵活地管理 Extmail/Extman 的日志,可选安装(实验环境可跳过,生产建议安装)。

验证
  • 执行 which syslog,若输出路径则安装成功;
  • 查看 Extmail/Extman 的日志文件(如 /var/log/extmail.log),应有正常的日志记录(无报错)。
步骤 5:浏览器访问验证(Windows 客户端)
操作
  1. 修改 Windows 客户端的 hosts 文件(模拟域名解析):
    • 打开 C:\Windows\System32\drivers\etc\hosts
    • 添加:Linux服务器IP mail.extmail.org
  2. 浏览器访问 http://mail.extmail.org/extmail 和 http://mail.extmail.org/extman
原理

通过 hosts 文件将 mail.extmail.org 指向 Linux 服务器,使 Windows 客户端能访问邮件 Web 界面。

验证
  • 访问 http://mail.extmail.org/extmail,能显示 Extmail 登录页,输入正确账号密码可登录;
  • 访问 http://mail.extmail.org/extman,能显示 Extman 管理页,管理员账号可登录并管理邮件域、用户等。
http://www.dtcms.com/a/456687.html

相关文章:

  • 德山经济开发区建设局网站wordpress的数据库在哪里
  • P3808 AC 自动机(简单版)
  • C++----bitmap位图的使用
  • 单链表的应用02---算法中的暴力美学(第八讲)
  • 【RAG】优化query查询效果的几种处理
  • transformer详解(位置编码+attention+残差连接+全连接网络)
  • 已注册域名怎么做网站呢免费网站免费网站平台
  • 如何解决 pip install -r requirements.txt 约束文件 constraints.txt 仅允许固定版本(未锁定报错)问题
  • 【Camera】准备的一些Camera面试题——相机预览、拍照流程(经验尚欠,待补充)
  • CICD工具选型指南,GitLab cicd vs Arbess哪一款更好用?
  • 尉Lucene.Net 分词器选择指南:盘古分词 vs 结巴分词h
  • gitlab runner 安装
  • MySQL的OR条件查询不走索引及解决方案
  • 1688 店铺商品全量采集与智能分析:从接口调用到供应链数据挖掘
  • 淘宝商品详情采集方式,json数据返回
  • 【论文精度-1】 组合优化中的机器学习:方法论之旅(Yoshua Bengio, 2021)
  • 南京维露斯网站建设微信营销软件app
  • 从帧边界识别到数据编码:嵌入式通信协议与数据序列化方案深度对比
  • Quick SwiftObjective-C测试框架入门教程
  • GRM tools三大插件使用教程
  • C62-结构体的指针
  • 腾讯云 建网站企业网站seo公司
  • Java-143 深入浅出 MongoDB NoSQL:MongoDB、Redis、HBase、Neo4j应用场景与对比
  • 线程1——javaEE 附面题
  • 吴恩达机器学习课程(PyTorch适配)学习笔记:1.4 模型评估与问题解决
  • 后端_基于注解实现的请求限流
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 10--基础知识 6--元素等待方式和内联框架
  • 织梦网站如何做seo重庆市城市建设档案馆官方网站
  • 一文详解Go语言字符串
  • 通用:MySQL-LBCC并发锁机制