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
模块
操作
- 编译安装 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
- 下载 Nginx 源码包(如
原理
--with-http_stub_status_module
是编译参数,用于将 “状态统计模块” 编译进 Nginx,否则无法使用 stub_status
指令。
验证
执行 /usr/local/nginx/sbin/nginx -V
(注意是大写 V
),输出应包含 --with-http_stub_status_module
,说明模块已启用。
步骤 2:修改 Nginx 配置文件,开启状态统计
操作
- 打开 Nginx 主配置文件
nginx.conf
:vim /usr/local/nginx/conf/nginx.conf
- 在要监控的
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;} }
- 保存并退出,检查配置语法:
/usr/local/nginx/sbin/nginx -t
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
,说明配置无语法错误。 - 重启 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:解读状态指标(核心验证)
状态页的每行内容含义:
Active connections: N
:当前活跃的客户端连接数(包括 “正在读取请求”“正在返回响应”“等待请求” 的连接)。server accepts handled requests
:- 第一个数:Nginx 已接受的连接总数;
- 第二个数:Nginx 已成功处理的连接总数(
accepts
和handled
通常相等,除非有连接限制); - 第三个数:Nginx 已处理的请求总数(因 HTTP 支持 “Keep-Alive”,一个连接可能处理多个请求,所以
requests
通常大于handled
)。
Reading: R
:正在读取客户端请求头的连接数;Writing: W
:正在向客户端返回响应的连接数;Waiting: W
:处于 **“Keep-Alive” 等待状态 ** 的连接数(即客户端保持连接,等待下一次请求)。
步骤 5:模拟请求,验证统计变化
操作
- 打开多个客户端(或用
ab
工具压测)访问 Nginx 服务器(如访问默认页http://Nginx服务器IP/
)。 - 同时刷新状态页
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 基本认证
操作
- 打开 Nginx 主配置文件
nginx.conf
:vim /usr/local/nginx/conf/nginx.conf
- 在
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; # 密码文件路径 }
- 保存并退出,检查配置语法:
/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 基本认证的密码文件
操作
- 安装
httpd-tools
(包含htpasswd
工具,用于生成密码文件):yum install -y httpd-tools
- 生成密码文件(以创建用户
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”,无法访问; - 额外验证:在服务器的密码文件中添加新用户
user2
(htpasswd /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 主配置,添加虚拟主机
操作
- 打开 Nginx 主配置文件
nginx.conf
:vim /usr/local/nginx/conf/nginx.conf
- 在
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;} }
- 保存并退出(
vim
中按Esc
,输入:wq
回车)。
原理
listen 80
:监听 80 端口(HTTP 默认端口);server_name
:指定该虚拟主机对应的域名;root
:指定网站根目录(客户端请求会映射到该目录);access_log
:指定该虚拟主机的访问日志路径,main
是预定义的日志格式。
验证
执行 cat /usr/local/nginx/conf/nginx.conf
,确认两个 server
块配置与上述一致。
步骤 3:检查配置并重启 Nginx
操作
- 检查配置语法(避免错误):
/usr/local/nginx/sbin/nginx -t
- 重启 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 服务器(后端服务器)
操作
- 安装 Apache(以 CentOS 7 为例):
yum install -y httpd
- 启动 Apache 并设置开机自启:
systemctl start httpd systemctl enable httpd
- 创建测试页面(
/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 服务器(代理服务器)
操作
- 安装 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
- 配置 Nginx 源:
- 启动 Nginx 并设置开机自启:
systemctl start nginx systemctl enable nginx
原理
Nginx 作为代理服务器,将接收客户端请求并转发到 Apache。
验证
在客户端浏览器中访问 Nginx 服务器的 IP(如 http://192.168.88.200
),应显示 Nginx 的默认欢迎页(说明 Nginx 正常运行)。
步骤 3:配置 Nginx 反向代理
操作
- 打开 Nginx 主配置文件
nginx.conf
:vim /etc/nginx/nginx.conf
- 在要代理的
server
块中,添加location /
配置(假设 Nginx 监听80
端口,server_name
为localhost
):server {listen 80;server_name localhost;# 新增:反向代理配置location / {proxy_pass http://192.168.88.100:80; # Apache 服务器的 IP 和端口} }
- 保存并退出,检查配置语法:
nginx -t
nginx: configuration file /etc/nginx/nginx.conf test is successful
,说明配置无语法错误。 - 重启 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
)
- 安装 Apache:
yum install -y httpd
- 启动 Apache 并设置开机自启:
systemctl start httpd systemctl enable httpd
- 创建差异化测试页面(区分两台服务器):
- 服务器
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 服务器(负载均衡器)
操作
- 安装 Nginx(参考之前步骤,或使用官方源安装)。
- 启动 Nginx:
systemctl start nginx
原理
Nginx 作为 “负载均衡器”,接收客户端请求并转发到后端 Apache 服务器。
验证
访问 Nginx 服务器 IP(如 http://192.168.88.300
),应显示 Nginx 默认欢迎页(说明 Nginx 正常运行)。
步骤 3:配置 Nginx 负载均衡
操作
- 打开 Nginx 主配置文件
nginx.conf
:vim /etc/nginx/nginx.conf
- 在
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; # 重写请求头,保证域名一致性}} }
- 保存并退出,检查配置语法:
nginx -t
nginx: configuration file /etc/nginx/nginx.conf test is successful
,说明配置无语法错误。 - 重启 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
模块
操作
- 下载 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
- 配置编译参数(启用
ssl
模块):./configure --prefix=/usr/local/nginx --with-http_ssl_module
- 编译并安装:
make && make install
原理
--with-http_ssl_module
是编译参数,用于将 SSL 模块编译进 Nginx,否则无法配置 HTTPS。
验证
执行 /usr/local/nginx/sbin/nginx -V
(大写 V
),输出应包含 --with-http_ssl_module
,说明模块已启用。
步骤 2:生成自签名 SSL 证书(实验用)
操作
- 创建证书存储目录:
mkdir -p /usr/local/nginx/conf/ssl cd /usr/local/nginx/conf/ssl
- 生成 RSA 私钥(
atguigu.key
):openssl genrsa -out atguigu.key 2048
- 生成证书签名请求(CSR)(
atguigu.csr
):openssl req -new -key atguigu.key -out atguigu.csr
bbs.atguigu.com
)。 - 生成自签名证书(
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.key
、atguigu.csr
、atguigu.crt
。
步骤 3:配置 Nginx HTTPS 虚拟主机
操作
- 打开 Nginx 主配置文件
nginx.conf
:vim /usr/local/nginx/conf/nginx.conf
- 添加 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;} }
- 保存并退出,检查配置语法:
/usr/local/nginx/sbin/nginx -t
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
,说明配置无语法错误。 - 重启 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
操作
- 继续编辑
nginx.conf
,添加 HTTP 虚拟主机配置(监听 80 端口,重定向到 HTTPS):http {# 其他全局配置...# HTTP 虚拟主机(用于重定向到 HTTPS)server {listen 80;server_name bbs.atguigu.com;# 强制跳转到 HTTPSrewrite ^(.*)$ https://$server_name$1 permanent;}# 原有 HTTPS 虚拟主机... }
- 保存并退出,检查配置语法:
/usr/local/nginx/sbin/nginx -t
- 重启 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 访问与强制跳转
操作
- 修改客户端
hosts
文件(模拟域名解析,以 Windows 为例):打开C:\Windows\System32\drivers\etc\hosts
,添加:Nginx服务器IP bbs.atguigu.com
- 在客户端浏览器中访问:
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)
操作
- 安装 Bind:
yum -y install bind
- 修改 Bind 主配置
/etc/named.conf
:- 打开文件:
vim /etc/named.conf
- 修改监听地址和访问控制为
any
:options {listen-on port 53 { any; }; # 监听所有 IP 的 53 端口(DNS 默认端口)allow-query { any; }; # 允许所有 IP 查询# 其他配置... };
- 打开文件:
- 修改区域配置
/etc/named.rfc1912.zones
:- 打开文件:
vim /etc/named.rfc1912.zones
- 添加
extmail.org
的正向解析区域:zone "extmail.org" IN {type master;file "extmail.org.zone"; # 区域数据文件名allow-update { none; }; };
- 打开文件:
- 创建区域数据文件
/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 同服务器)
- 复制模板文件:
- 启动并设置 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 等)
操作
- 安装软件包:
yum -y install gcc mysql-server httpd mailx
- 设置开机自启并启动服务:
- MySQL:
systemctl enable mysqld systemctl start mysqld
- Apache:
systemctl enable httpd systemctl start httpd
- MySQL:
验证
- 执行
systemctl status mysqld
和systemctl status httpd
,状态应为active (running)
; - 浏览器访问
http://服务器IP
,应显示 Apache 默认欢迎页。
步骤 3:部署 Extmail 到 Apache
操作
- 创建 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
- 导入 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
- 进入 Extmail 数据库脚本目录:
验证
- 登录 MySQL:
mysql -u root -p
(无密码直接回车); - 执行
use extmail; show tables;
,应看到 Extmail 相关表(如manager
、domain
等); - 执行
select * from manager;
,应看到管理员账号root@extmail.org
及修改后的密码。
步骤 4:配置 Postfix(邮件传输代理)
操作
- 安装 Postfix:
yum -y install postfix
- 修改 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
- 打开文件:
- 创建 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 文档)。
- 以
- 复制 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/
- 创建虚拟邮箱目录并授权:
mkdir /home/vmail chown -R 600:600 /home/vmail
- 启动并设置 Postfix 开机自启:
systemctl enable postfix systemctl start postfix
验证
- 执行
postconf -n
,应显示上述修改的配置(如inet_interfaces = all
、virtual_*_maps
等); - 执行
systemctl status postfix
,状态应为active (running)
。
步骤 5:测试邮件发送与接收
操作
- 发送测试邮件:
echo "hello" | mail -s "test" support@extmail.org
- 检查邮件存储目录:
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 界面
操作
- 配置 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
- 编辑 Apache 配置(如
- 浏览器访问 Extmail Web 界面:
- Extmail:
http://服务器IP/extmail
- Extman(管理界面):
http://服务器IP/extman
- Extmail:
验证
- 访问 Extmail,用管理员账号
root@extmail.org
和修改后的密码(如123456
)登录,应能进入 Web 邮箱; - 访问 Extman,登录后应能管理域名、用户、邮箱等。
2.3 接收方部署
Dovecot 是邮件接收代理(IMAP/POP3 服务器),负责让客户端(如 Outlook、Thunderbird)通过 IMAP/POP3 协议收取邮件。本实验将 Dovecot 与 MySQL 集成,通过数据库验证用户身份,并从指定目录(如 /home/vmail
)读取邮件。
步骤 1:安装 Dovecot 及依赖
操作
- 安装 Dovecot 软件包:
yum -y install dovecot dovecot-devel dovecot-mysql
- 设置 Dovecot 开机自启并启动:
systemctl enable dovecot systemctl start dovecot
验证
执行 systemctl status dovecot
,状态应为 active (running)
,说明 Dovecot 已启动。
步骤 2:配置 Dovecot 连接 MySQL(用户认证 + 邮件存储)
操作
修改 Dovecot 主配置
/etc/dovecot/dovecot.conf
:- 打开文件:
vim /etc/dovecot/dovecot.conf
- 确保以下配置(若被注释则取消注释):
protocols = imap pop3 lmtp listen = *, ::
- 作用:启用 IMAP、POP3 协议,监听所有 IP。
- 打开文件:
配置用户认证(
/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 虚拟用户一致)。
- 打开文件:
配置 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 认证
- 打开文件:
创建 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。
- 复制模板文件(若 Extmail 提供了 Dovecot 配置模板,可直接复制):
重启 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)
操作
- 安装 Telnet 客户端:
yum -y install telnet
- 用 Telnet 连接 Dovecot 的 POP3 端口(110):
telnet mail.extmail.org 110
- 登录测试(以用户
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)
操作
- 配置邮件客户端(如 Thunderbird):
- 新建账户,协议选
IMAP
; - 服务器:
mail.extmail.org
; - 用户名:
postmaster@extmail.org
; - 密码:
extmail
。
- 新建账户,协议选
- 查看邮件:客户端应能加载邮箱文件夹,并显示收件箱中的邮件。
验证
- 客户端成功连接,无 “认证失败”“连接超时” 等错误;
- 收件箱中能看到通过 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 界面
操作
- 打开 Apache 主配置文件:
vim /etc/httpd/conf/httpd.conf
- 找到并取消
NameVirtualHost *:80
的注释(开启虚拟主机功能)。 - 添加
<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>
- 重启 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 目录的属主 / 属组
操作
- 切换到 Extmail 目录:
cd /var/www/extsuite/extmail
- 修改
cgi
目录的属主 / 属组为vmail
:chown -R vmail.vmail cgi/
- 复制并修改 Extmail 配置文件:
cd cgi cp webmail.cf.default webmail.cf vim webmail.cf
- 在
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 目录的属主 / 属组
操作
- 切换到 Extman 目录:
cd /var/www/extsuite/extman
- 修改
cgi
目录的属主 / 属组为vmail
:chown -R vmail.vmail cgi/
- 复制并修改 Extman 配置文件:
cd cgi cp webman.cf.default webman.cf vim webman.cf
- 在
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 软件(可选,用于日志)
操作
- 解压 Unix-Syslog 压缩包(假设为
Unix-Syslog-1.1.tar.gz
):tar -zxvf Unix-Syslog-1.1.tar.gz cd Unix-Syslog-1.1
- 编译安装:
perl Makefile.PL make make install
原理
Unix-Syslog 用于更灵活地管理 Extmail/Extman 的日志,可选安装(实验环境可跳过,生产建议安装)。
验证
- 执行
which syslog
,若输出路径则安装成功; - 查看 Extmail/Extman 的日志文件(如
/var/log/extmail.log
),应有正常的日志记录(无报错)。
步骤 5:浏览器访问验证(Windows 客户端)
操作
- 修改 Windows 客户端的
hosts
文件(模拟域名解析):- 打开
C:\Windows\System32\drivers\etc\hosts
; - 添加:
Linux服务器IP mail.extmail.org
。
- 打开
- 浏览器访问
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 管理页,管理员账号可登录并管理邮件域、用户等。