1. 搭建时间同步服务器(Chrony 版,CentOS7/8/RHEL 首选)
核心说明
Chrony 替代传统 NTP,同步更快、精度更高、断网恢复更快,分为服务端(授时)*和*客户端(同步)。
一、服务端配置(授时服务器)
- 安装
yum install -y chrony
- 编辑配置文件
/etc/chrony.conf
# 注释默认公网服务器,添加本地授时(离线环境)
# server 0.centos.pool.ntp.org iburst
server 127.0.0.1 iburst # 本地时钟作为源
local stratum 10 # 本地作为层级10授时服务器
allow 192.168.1.0/24 # 允许同步的客户端网段
bindcmdaddress 0.0.0.0 # 监听所有IP
- 启动并开机自启
systemctl start chronyd
systemctl enable chronyd
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
二、客户端配置(同步时间)
- 安装 chrony
- 编辑
/etc/chrony.conf
server 192.168.1.100 iburst # 指向服务端IP
# 注释其他server
3.重启服务并验证
systemctl restart chronyd
chronyc sources -v # 查看同步状态
timedatectl set-ntp true # 开启时间同步
date # 验证时间
2. 常见日志服务管理
-
rsyslog
标准系统日志服务,兼容 syslog,支持 TCP/UDP、数据库、远程集中日志,默认接管/var/log/messages等。
-
systemd-journald
systemd 自带日志系统,二进制存储,配合journalctl使用,可与 rsyslog 联动。
-
syslog-ng
高级日志管理,比 rsyslog 更灵活,支持复杂过滤、多输出。
-
logrotate
日志切割工具,防止日志文件过大,自动切割、压缩、删除旧日志。
3. 日志分类、优先级 + rsyslog 工作原理
一、日志分类(Facility 设施)
| 分类 | 说明 |
|---|---|
| auth | 认证相关(登录、su) |
| authpriv | 权限 / 安全认证(ssh、sudo) |
| cron | 定时任务日志 |
| kern | 内核日志 |
| 邮件服务 | |
| user | 用户程序日志 |
| local0~local7 | 自定义日志 |
二、日志优先级(Priority 等级,从低到高)
debug < info < notice < warning < err < crit < alert < emerg
三、rsyslog 工作流程
应用程序(SSH/nginx)
↓(发送日志到 /dev/log 套接字)
rsyslog 服务(监听输入)
↓(按 Facility+Priority 过滤规则)
输出目标(文件/远程服务器/数据库)
- 应用调用 syslog 接口,将日志写入
/dev/log; - rsyslog 监听该套接字,读取日志;
- 按配置文件规则匹配,写入本地文件 / 发送远程 rsyslog。
4. 三台主机 SSH 日志集中到 rsyslog 服务器(/var/log/all-ssh.log)
环境约定
- 服务端:192.168.1.100(主机名 = IP)
- 客户端 1:192.168.1.101、客户端 2:192.168.1.102、客户端 3:192.168.1.103
一、服务端配置(192.168.1.100)
- 编辑
/etc/rsyslog.conf
# 开启UDP/TCP接收
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
# 自定义规则:所有客户端ssh日志写入 /var/log/all-ssh.log
authpriv.* /var/log/all-ssh.log
2.创建日志文件并授权
touch /var/log/all-ssh.log
chown root:root /var/log/all-ssh.log
systemctl restart rsyslog
firewall-cmd --add-port=514/udp --add-port=514/tcp --permanent
firewall-cmd --reload
二、客户端配置(所有 3 台主机)
- 编辑
/etc/rsyslog.conf,添加
# 将authpriv(ssh日志)发送到服务端
authpriv.* @192.168.1.100:514 # @=UDP,@@=TCP
2.重启服务
systemctl restart rsyslog
3.验证:客户端执行 ssh localhost,服务端查看 tail -f /var/log/all-ssh.log
5. /var/log/ 常用日志文件作用
| 日志文件 | 作用 |
|---|---|
| messages | 系统核心日志,服务启动、系统信息、错误 |
| secure | 安全认证日志(ssh 登录、su、sudo) |
| cron | 定时任务 crontab 执行日志 |
| dmesg | 内核硬件检测、驱动加载日志 |
| boot.log | 系统启动过程日志 |
| maillog | 邮件服务日志 |
| yum.log | yum 安装 / 卸载软件日志 |
| firewalld | 防火墙日志 |
| all-ssh.log | 自定义集中 SSH 日志 |
6. journalctl 命令选项及示例
常用选项
-f:实时刷新日志-n:显示最后 N 行-u:查看指定服务-p:按优先级过滤--since/--until:按时间过滤-k:内核日志-b:本次启动日志
实操示例
journalctl -f # 实时日志
journalctl -n 20 # 最后20行
journalctl -u sshd # sshd日志
journalctl -p err # 仅错误日志
journalctl --since "10 min ago" # 10分钟内日志
journalctl -k # 内核日志
7. 多主机 logger 日志集中写入 MySQL
一、服务端配置(192.168.1.100)
- 安装依赖
yum install -y mariadb-server mariadb rsyslog-mysql
2.启动数据库并初始化
systemctl start mariadb
mysql_secure_installation
3.创建库表(rsyslog 默认表结构)
mysql -uroot -p < /usr/share/doc/rsyslog-8.24/mysql-createDB.sql
# 授权rsyslog访问
mysql -uroot -p
GRANT ALL ON Syslog.* TO 'rsyslog'@'192.168.1.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
4.配置 rsyslog 输出到 MySQL编辑**/etc/rsyslog.conf**
module(load="ommysql")
*.* :ommysql:127.0.0.1,Syslog,rsyslog,123456
5.重启 rsyslog
二、客户端配置
*.* @192.168.1.100:514
6.测试:客户端执行 logger "test log to mysql",服务端数据库查询验证。
8. logrotate 切割 message 日志(每天、≤3M、存 90 天、时间后缀、压缩)
- 编辑
/etc/logrotate.d/messages
/var/log/messages {
daily # 每天切割
size 3M # 超过3M强制切割
rotate 90 # 保留90天
dateext # 时间后缀
compress # 压缩
delaycompress # 延迟压缩
missingok # 日志不存在不报错
notifempty # 空日志不切割
create 0644 root root # 新建日志权限
}
2.手动测试切割
logrotate -f /etc/logrotate.d/messages
9.Apache相关知识
一、 定制端口实践(Apache 多端口配置)
核心概念
Apache 默认监听 80(HTTP)、443(HTTPS)端口,通过修改配置文件可以让服务同时监听多个端口,实现不同业务 / 站点的隔离。
关键配置步骤
-
修改主配置文件/etc/httpd/conf/httpd.conf(CentOS)或 /etc/apache2/ports.conf(Debian)
# 开启监听 Listen 80 Listen 8080 Listen 8081 -
配置虚拟主机(每个端口对应一个站点)
<VirtualHost *:8080> DocumentRoot "/var/www/port8080" ServerName site1.example.com </VirtualHost> <VirtualHost *:8081> DocumentRoot "/var/www/port8081" ServerName site2.example.com </VirtualHost> -
验证与排错
- 语法检查:
apachectl configtest - 重启服务:
systemctl restart httpd - 防火墙放行端口:
firewall-cmd --add-port=8080/tcp --permanent
- 语法检查:
常见问题
- 端口被占用:用
netstat -tulnp | grep 8080检查 - 权限不足:确保
/var/www/xxx目录对apache用户可读
二、Alias 别名配置(路径映射)
核心概念
Alias 是 Apache 的路径别名指令,作用是将 URL 路径映射到服务器上的非默认目录,实现灵活的资源挂载,比如把 http://xxx.com/files/ 指向 /data/share/。
两种 Alias 实践
1. 基础别名配置(Alias 指令)
# 主配置或虚拟主机内添加
Alias "/files" "/data/share/files"
# 必须配置目录权限,否则403
<Directory "/data/share/files">
Require all granted
Options Indexes FollowSymLinks
</Directory>
- 效果:访问
http://服务器IP/files/即可查看/data/share/files下的文件。
2. 带正则的别名(AliasMatch 指令)
支持正则匹配 URL 路径,适合批量映射:
AliasMatch "^/images/(.*)" "/data/imgs/$1"
- 效果:
/images/1.jpg→/data/imgs/1.jpg
核心注意事项
- 别名目录必须配置
<Directory>权限,否则会报 403 禁止访问。 - 别名路径要区分大小写(Linux 系统)。
- 别名不能与真实目录名冲突,否则 Apache 会优先匹配真实目录。
三、虚拟主机(Apache 多站点部署核心)
核心概念
虚拟主机(VirtualHost)是 Apache 实现一台服务器部署多个网站的核心技术,支持三种方式:
- 基于 IP
- 基于端口
- 基于域名(最常用)
关键配置步骤(基于域名)
-
确保 Apache 已开启虚拟主机功能(默认开启)
-
编辑配置文件,添加多个虚拟主机块:
# 站点1:www.a.com <VirtualHost *:80> DocumentRoot "/var/www/a.com" ServerName www.a.com ServerAlias a.com ErrorLog "/var/log/httpd/a.com-error.log" CustomLog "/var/log/httpd/a.com-access.log" combined </VirtualHost> # 站点2:www.b.com <VirtualHost *:80> DocumentRoot "/var/www/b.com" ServerName www.b.com ServerAlias b.com ErrorLog "/var/log/httpd/b.com-error.log" CustomLog "/var/log/httpd/b.com-access.log" combined </VirtualHost> -
本地 hosts 解析测试(/etc/hosts)
192.168.1.100 www.a.com 192.168.1.100 www.b.com -
重启服务,访问域名验证
三种虚拟主机对比
| 类型 | 配置方式 | 适用场景 |
|---|---|---|
| 基于域名 | 不同 ServerName | 单 IP 单端口,多个网站(最常用) |
| 基于端口 | 不同 Listen 端口 | 不同业务隔离,如后台服务 |
| 基于 IP | 不同 IP 的 <VirtualHost> | 多网卡服务器,不同业务用不同 IP |
10. HTTP 协议高频面试题(背诵版)
1)HTTP 协议请求方式(详细版)
HTTP 定义了一套请求方法,用来表明客户端要对服务器资源执行什么操作。
HTTP/1.0 定义 3 种
-
GET:请求获取服务器上的某个资源(网页、图片、接口数据)。
-
POST:向服务器提交数据,用于新增、修改、登录、表单提交。
-
HEAD:和 GET 一样,但只返回响应头,不返回响应体。
作用:先获取文件大小 / 类型,再决定是否下载,节省带宽。
HTTP/1.1 新增 5 种
- PUT:用提交的数据完整覆盖 / 替换目标资源,全量更新。
- PATCH:对资源进行部分修改,只传要改的字段。
- DELETE:请求服务器删除指定资源。
- OPTIONS:查询服务器支持哪些请求方法、跨域许可。
- TRACE:回显服务器收到的请求路径,用于测试、诊断网络链路。
- CONNECT:用于代理服务器建立隧道连接(HTTPS 代理场景)。
2)GET 和 POST 的详细区别(面试高频口述版)
① 数据传输位置不同
- GET:数据拼接在 URL 后面,可见。
- POST:数据放在 请求体(body) 中,不可见。
② 安全性不同
- GET:URL 会被浏览器历史、缓存、日志记录,极不安全。
- POST:数据在请求体内,不会直接暴露,相对安全。
③ 数据类型与长度限制
- GET:只允许 ASCII 字符,长度受浏览器 / 服务器限制。
- POST:支持 二进制、多表单、文件上传,无字符限制。
④ 刷新 / 后退行为
- GET:刷新、后退无害、无影响。
- POST:刷新 / 后退可能重复提交表单。
⑤ 标准特性(面试必说)
- GET:安全(只读) + 幂等
- 安全:不会修改服务器数据状态。
- 幂等:执行 1 次和 100 次效果一样。
- POST:非安全 + 非幂等
- 会修改服务器数据,多次执行可能产生多条数据。
⑥ 缓存
- GET:默认可被浏览器缓存。
- POST:默认不缓存。
3)什么是无状态协议?HTTP 是不是?怎么解决?
什么是无状态协议
无状态 = 协议本身不 “记住” 任何请求信息。
服务器不知道你上一次请求做了什么,也不知道你是谁。
每一次请求都是完全独立的。
HTTP 是无状态协议吗
是。
HTTP 本身不保存任何客户端状态。
为什么我们登录后不用重复登录?
不是 HTTP 记住了你,而是 Cookie / Session 帮你记录了状态。
解决方案(3 种)
-
Cookie
状态存在客户端浏览器,服务器通过 Cookie 识别用户。
-
Session
状态存在服务器,客户端只存一个 SessionID。
-
Token / JWT
无状态认证,适合分布式、微服务。
4)UDP 和 TCP 详细对比(面试必考)
UDP(用户数据报协议)
- 无连接:不需要握手,直接发数据包。
- 不可靠:不保证一定送达、不保证顺序、丢包不重传。
- 头部小:8 字节。
- 速度快、延迟低。
- 适用:直播、视频通话、游戏、DNS。
TCP(传输控制协议)
- 面向连接:必须三次握手建立连接。
- 可靠传输:有序、确认应答、丢包重传、拥塞控制、错误校验。
- 头部大:20 字节。
- 速度慢。
- 适用:网页、文件、邮件、支付。
核心区别总结(可直接背)
- TCP 面向连接;UDP 无连接。
- TCP 可靠;UDP 不可靠。
- TCP 有序;UDP 无序。
- TCP 重传 / 拥塞控制;UDP 没有。
- TCP 慢;UDP 快。
- TCP 头部 20B;UDP 头部 8B。
- TCP 用于重要数据;UDP 用于实时业务。
5)HTTP 302 状态码详细解释
302 Found:临时重定向
- 含义:你请求的资源临时换到另一个地址。
- 服务器会在响应头里返回 Location 字段。
- 浏览器自动跳转到 Location 里的 URL。
- 特点:临时,搜索引擎不会更新权重。
同类对比:
- 301:永久重定向
- 304:缓存未修改(使用本地缓存)
- 307:临时重定向(严格保留请求方法)
6)HTTP 协议由什么组成?
HTTP 通信分为 请求报文 和 响应报文。
请求报文组成(4 部分)
-
请求行
请求方法 + URL + HTTP 版本
例:
GET /index.html HTTP/1.1 -
请求头
Host、User-Agent、Cookie、Content-Type 等。
-
空行
固定分隔符,表示请求头结束。
-
请求体
POST/PUT 提交的数据。
响应报文组成(4 部分)
-
响应行
HTTP 版本 + 状态码 + 描述
例:
HTTP/1.1 200 OK -
响应头
Server、Set-Cookie、Content-Type、Location 等。
-
空行
-
响应体
HTML、JSON、图片、文件等返回数据。
7)Cookie 和 Session 详细区别
- 存储位置
- Cookie:客户端浏览器
- Session:服务器端
- 安全性
- Cookie:容易被劫持、伪造、篡改。
- Session:更安全,ID 不易伪造。
- 服务器压力
- Cookie:不占服务器资源。
- Session:占用服务器内存 / 存储。
- 容量限制
- Cookie:很小,约 4KB。
- Session:无严格限制。
- 生命周期
- Cookie:可长期保存。
- Session:默认关闭浏览器失效。
8)HTTP 协议的 5 大特点
-
无连接
处理完一个请求就断开连接(HTTP/1.1 支持长连接)。
-
无状态
不记录任何请求上下文。
-
C/S 模型
客户端(浏览器 / App)请求,服务器响应。
-
简单快速
头部简洁,服务器处理快。
-
灵活可扩展
可传输文本、图片、视频、JSON 等任意类型。
9)HTTP 和 HTTPS 详细区别
- 端口不同
- HTTP:80
- HTTPS:443
- 传输方式
- HTTP:明文,易窃听、篡改、劫持。
- HTTPS:SSL/TLS 加密,安全。
- 证书
- HTTP:不需要证书。
- HTTPS:需要 CA 机构颁发的证书。
- 性能
- HTTPS 多一次加密解密,略慢。
- SEO
- 搜索引擎优先收录 HTTPS。
10)为什么有 HTTP 还要 HTTPS?
HTTP 是明文传输,存在三大风险:
- 窃听:第三方可获取账号密码。
- 篡改:网页被植入广告、木马。
- 伪造:钓鱼网站冒充官方。
HTTPS 解决这三点:
- 加密:别人看不到内容。
- 校验:内容不被篡改。
- 认证:确保访问的是真实服务器。
11)HTTP keep-alive 详细作用
早期问题
HTTP/1.0 默认短连接:
每请求一次 → 建立连接 → 传输 → 断开。
频繁握手非常消耗资源、延迟高。
keep-alive 解决方案
长连接 / 复用连接
一次连接可以处理多个请求,不用反复断开重建。
配置
- HTTP/1.0:需要手动加头
Connection: keep-alive - HTTP/1.1:默认开启
优点
- 减少 CPU / 内存消耗。
- 减少 TCP 握手,降低延迟。
- 支持请求管线化。
- 减少网络拥塞。
12)HTTP 请求报文详细结构
-
请求行
方法 + 路径 + 版本
-
请求头
- Host:目标主机名(虚拟主机必备)
- User-Agent:浏览器 / 设备信息
- Accept:可接受的数据类型
- Cookie:身份凭证
- Content-Type:请求体类型
-
空行
-
请求体
表单、JSON、文件等。
13)HTTP 响应报文详细结构
-
响应行
版本 + 状态码 + 描述
-
响应头
- Server:服务器信息
- Location:重定向地址
- Set-Cookie:种下 Cookie
- Content-Type:返回数据类型
-
空行
-
响应体
页面、数据、图片。
14)HTTP 常用首部字段(详细分类)
通用首部(请求 / 响应都用)
- Cache-Control:缓存控制
- Connection:keep-alive 开关
请求首部
- Host:目标主机
- User-Agent:客户端信息
- If-Modified-Since:缓存时间对比
- If-None-Match:Etag 对比
响应首部
- Server:服务器信息
- Location:重定向地址
实体首部
- Last-Modified:资源最后修改时间
- Expires:过期时间
- Content-Type:内容类型
- Content-Length:长度
15)HTTP 状态码详细分类(必背)
2XX 成功
- 200 OK:成功返回
- 201 Created:创建成功
- 204 No Content:成功但无返回体
- 206 Partial Content:断点续传 / 范围请求
3XX 重定向
- 301:永久重定向
- 302:临时重定向
- 304:未修改,使用缓存
- 307:临时重定向(保留方法)
4XX 客户端错误
- 400:请求参数错误
- 401:未登录 / 未认证
- 403:权限不足,拒绝访问
- 404:资源不存在
- 408:请求超时
5XX 服务器错误
- 500:服务器内部错误
- 502:网关错误
- 503:服务不可用
- 504:网关超时
16)TCP 三次握手 + 四次挥手
三次握手(建立连接)
-
客户端 → 服务端:SYN
我想连接,我的初始序号是 X。
-
服务端 → 客户端:SYN+ACK
收到,同意连接。我的序号是 Y,确认号 X+1。
-
客户端 → 服务端:ACK
收到确认,连接建立,确认号 Y+1。
目的:确保双方收发能力都正常。
四次挥手(关闭连接)
因为 TCP 是全双工,双方都要单独关闭。
-
客户端 → 服务端:FIN
我发完了,请求关闭。
-
服务端 → 客户端:ACK
收到,我知道了。
-
服务端 → 客户端:FIN
我也发完了,可以关闭。
-
客户端 → 服务端:ACK
收到,关闭。
客户端最后会进入 TIME_WAIT,等待 2MSL 确保对方收到 ACK。
17)高频扩展题(面试常问)
(1)什么是幂等性?
多次请求和一次请求效果一样 = 幂等。
- 幂等:GET、HEAD、PUT、DELETE、OPTIONS
- 非幂等:POST
(2)HTTP/1.0 / 1.1 / 2.0 区别
- 1.0:短连接、串行
- 1.1:长连接、管道、Host
- 2.0:多路复用、二进制帧、头部压缩、服务器推送
(3)HTTPS 握手流程
- 客户端请求,支持加密套件。
- 服务端返回证书。
- 客户端验证证书。
- 客户端生成随机密钥,用服务器公钥加密。
- 双方用对称密钥加密通信。
11. inotify+rsync 与 sersync 文件同步(配置 + 优缺点)
一、inotify+rsync 实现实时同步
1.安装
yum install -y inotify-tools rsync
2.同步脚本
#!/bin/bash
inotifywait -mrq -e create,delete,modify,move /data | while read file; do
rsync -avz /data/ root@192.168.1.100:/data/
done
3.后台运行脚本
二、sersync 实现实时同步
- 下载 sersync,解压配置
confxml.xml - 配置远程目标、同步目录、过滤规则
- 启动
./sersync -d -n 10
三、优缺点对比
| 方式 | 优点 | 缺点 |
|---|---|---|
| inotify+rsync | 轻量、免费、自定义强 | 无多线程、断点续传、配置繁琐 |
| sersync | 多线程、自带过滤、断点续传、稳定 | 依赖第三方工具、配置简单 |