深入解析:Apache 生产环境操作与 LAMP 搭建指南

news/2025/9/26 12:45:35/文章来源:https://www.cnblogs.com/wzzkaifa/p/19113264

1. 日志管理(关键:避免磁盘爆满 & 快速故障定位)

1.核心路径
日志类型Debian路径RHEL路径生产建议

访问日志

/var/log/apache2/access.log

/var/log/httpd/access_log

必须轮转:避免单文件 >10GB

错误日志

/var/log/apache2/error.log

/var/log/httpd/error_log

错误级别设为 warnLogLevel warn(避免debug淹没生产环境)

虚拟主机日志

/var/log/apache2/<vhost>.log

/var/log/httpd/<vhost>.log

按业务线隔离,命名规范:<service>-prod-access.log

  • 日志保留策略
    • 访问日志保留 7 天(GDPR 合规),错误日志保留 30 天(满足 审计要求)。
    • 使用 logrotate 配置压缩:compress + delaycompress(避免服务暂停)。
  • 生产红线

    ✘ 禁止直接 rm -rf 日志文件(导致 inode 泄漏)
    ✔ 必须用 logrotatesystemctl kill --signal=USR1 apache2 触发轮转

2.安装命令
#安装命令
yum -y install httpd #RHEL
apt -y install apache2 #Debian

2. 服务启动/停止/重启(核心:零停机变更)

服务控制命令(基于 systemd)
操作命令生产首选

安全重载配置

sudo systemctl reload apache2

sudo systemctl reload httpd

首选:配置变更(如.htaccess修改),不中断现有连接

优雅重启

sudo systemctl restart apache2

sudo systemctl restart httpd

⚠ 仅限必要场景(如模块更新),连接中断约 0.5s(SLA <1s 可接受)

服务停止

sudo systemctl stop apache2

sudo systemctl stop httpd

 仅限紧急维护(需提前 drain 流量)

状态深度检查

sudo systemctl status apache2 --no-pager

sudo systemctl status httpd --no-pager

 每日巡检必用,关注Active:Main PID状态

连接池诊断

sudo apache2ctl status

 需启用mod_status(配置见下文),查看BusyWorkers/IdleWorkers

关键诊断命令
# 1. 检查服务是否存活(自动化脚本基础)
sudo systemctl is-active apache2 || echo "CRITICAL: Apache down!" >&2
# 2. 深度状态分析(需先配置 mod_status)
# 在 apache2.conf 添加:
#
#     SetHandler server-status
#     Require local
#
curl -s http://localhost/server-status?auto | grep 'BusyWorkers\|IdleWorkers'
# 输出示例: BusyWorkers: 5 IdleWorkers: 15 → 若 BusyWorkers 持续 >80%,需扩容
# 3. 端口冲突排查(启动失败常见原因)
sudo ss -tulpn | grep ':80\b'  # 检查 80 端口占用(输出格式:LISTEN 0 128 *:80 *:* users:(("apache2",pid=123,fd=4)))
  • 变更流程
    1. 在预发环境 reload 验证
    2. 生产环境使用 滚动重启(K8s 环境)或 蓝绿部署(传统环境)
    3. 监控关键指标 5 分钟(请求成功率、延迟 P99)
  • 生产红线

    ✘ 禁止在业务高峰执行 restart(仅限 UTC 00:00-04:00 维护窗口)
    ✔ 所有操作必须记录到审计日志:echo "[$(date)] $USER reloaded apache" | sudo tee -a /var/log/audit/sre_ops.log

3. 配置文件检测(核心:预防配置错误)

验证命令(变更前必执行)
# 1. 语法检查(黄金命令)
sudo apache2ctl configtest
# 成功输出: "Syntax OK" →  可部署
# 失败输出: "AH00526: Syntax error on line 42..." →  立即终止变更
# 2. 深度配置审计
sudo apache2ctl -t -D DUMP_VHOSTS      # 检查虚拟主机冲突
sudo apache2ctl -t -D DUMP_RUN_CFG     # 输出完整生效配置(调试重写规则必备)
sudo apache2ctl -M                      # 列出已加载模块(确认安全模块是否启用)
# 3. 配置路径验证
sudo apache2ctl -V | grep "SERVER_CONFIG_FILE"  # 输出: -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"

配置管理流程

  1. 所有配置存入 Git 仓库(如 infra-configs/apache/
  2. 变更通过 CI 流水线:configtest → 预发环境测试 → 生产部署
  3. 使用 diff 对比变更:
sudo apache2ctl -t -D DUMP_RUN_CFG > /tmp/after.conf
diff /tmp/before.conf /tmp/after.conf  # before.conf 为变更前快照
  • 生产红线

    ✘ 禁止直接编辑生产配置文件(Google 规定:所有修改必须通过自动化管道)
    ✔ 配置文件权限必须为 644,属主 root:root(防意外修改)

二、LAMP 搭建详细步骤(生产级)

 标准:安全、可监控、可扩展。耗时约 15 分钟(自动化后)

环境

  • OS: Ubuntu 24.04 LTS( 内部生产环境首选)
  • 硬件:4 vCPU, 8GB RAM(满足中小业务需求)
  • 网络:已配置安全组(仅开放 80/443/22 端口)

步骤 1:系统初始化( 安全基线)

# 1.1 更新系统 & 安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git net-tools software-properties-common
# 1.2 设置时区 & 语言(避免日志时间混乱)
sudo timedatectl set-timezone  Asia/Shanghai  #  中国统一时区
echo $LANG #查看系统语言
grep -v '^#' /etc/locale.gen #查看当前支持语言
root@D-3PGMZJ3-0948:~# grep -nv '^#' /etc/locale.gen
5:
6:
505:zh_CN.UTF-8 UTF-8
root@D-3PGMZJ3-0948:~# echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
root@D-3PGMZJ3-0948:~# grep -nv '^#' /etc/locale.gen
5:
6:
505:zh_CN.UTF-8 UTF-8
516:en_US.UTF-8 UTF-8
#原系统只支持中文,现在添加了英文环境
sudo locale-gen  #生成 locale
sudo update-locale LANG=en_US.UTF-8
locale-gen
Generating locales (this might take a while)...
en_US.UTF-8... done
zh_CN.UTF-8... done
zh_SG.UTF-8... done
Generation complete.
source /etc/default/locale

步骤 2:LAMP 集成

#安装软件
apt install php-fpm php-cli php-mysqlnd php-json php-gd php-xml
php-mbstring php-zip apache2 mysql-server
#设置PHP-FPM代理(需要额外的fcgi的加载)
a2enmod proxy proxy_fcgi setenvif
cat > proxy.conf
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
eof
配置解析:
因为fpm默认启动的监听机制是 /run/php/php8.3-fpm.sock
当然,该选项可以可以直接在一个特定的虚拟主机上进行配置
当php-fpm的监听地址是 127.0.0.1:9000 的时候,SetHandler属性可以写成如下配置
SetHandler "proxy:fcgi://127.0.0.1:9000"
systemctl restart apache2
#准备数据库文件 vim /root/mysql_test.sql
-- 创建数据库
DROP DATABASE IF EXISTS test_db;
CREATE DATABASE IF NOT EXISTS test_db;-- 使用数据库
USE test_db;-- 创建表:指定存储引擎(InnoDB 支持事务、外键,适合业务表)-- 字段注释按需补充,增强可读性
CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '用户唯一ID,自增',
username VARCHAR(50) NOT NULL COMMENT '用户名,最长50字符',
email VARCHAR(100) NOT NULL UNIQUE COMMENT '用户邮箱,唯一约束',
password VARCHAR(255) NOT NULL COMMENT '密码,建议哈希存储',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
);-- 插入数据:显式指定字段(单行格式 + 字符串转义)
INSERT INTO users (username, email, password) VALUES ('user1',
'user1@example.com', 'pass1');
INSERT INTO users (username, email, password) VALUES ('user2',
'user2@example.com', 'pass2');
INSERT INTO users (username, email, password) VALUES ('user3',
'user3@example.com', 'pass3');
mysql -e "source /root/mysql_test.sql;"
cat /var/www/html/test_mysql.php
connect_error) {
测试效果
1.7.3.2.4.2 测试样式2
定制测试文件
die("连接失败: " . $mysqli->connect_error);
}
echo "恭喜!数据库连接成功!";
// 关闭连接
$mysqli->close();
?>
curl http://10.0.0.11/test_mysql.php
恭喜!数据库连接成功!
设置apache2 中的虚拟主机配置
mkdir  /var/www/html/blog.com/
echo '' > /var/www/html/blog.com/test.php
删除默认配置
rm -rf /etc/apache2/sites-enabled/000-default.conf
定制网站关联php的配置
cat > /etc/apache2/sites-enabled/blog.com.conf
DocumentRoot /var/www/html/blog.com/
ServerName blog.zz.com
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
Require all granted
eof
systemctl restart apache2.service
curl 10.0.0.11/test.php
sed -i '/^bind-address/s#127.0.0.1#10.0.0.11#' /etc/mysql/mysql.conf.d/mysqld.cnf
grep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address            = 10.0.0.11
重启数据库配置
systemctl restart mysql.service
ss -ntulp |grep 3306
tcp        0      0 10.0.0.11:3306       0.0.0.0:*    LISTEN      16277/mysqld
定制数据库,允许应用访问
mysql
mysql> create database wordpress;
mysql> create user 'wordpresser'@'10.0.0.%' identified with mysql_native_password
by '123456';
mysql> grant all on wordpress.* to 'wordpresser'@'10.0.0.%';
mysql> exit
mysql -u'wordpresser' -h 10.0.0.11 -p'123456' -e "select
version();"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------------------+
| version()               |
+-------------------------+
| 8.0.39-0ubuntu0.24.04.2 |
+-------------------------+
安装wordpress
mkdir /data/softs -p
cd /data/softs/
wget https://cn.wordpress.org/latest-zh_CN.zip
unzip latest-zh_CN.zip
mv wordpress/* /var/www/html/blog.com/
访问  10.0.0.11

然后下一步下一步的点击操作即可。【注意,连接mysql的地址为 10.0.0.11】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA第一天

Markdown 学习 标题 +空格=一级标题 +空格=二级标题 ......... 字体 粗体 斜体 粗斜体 删除 引用第一天学习分割线图片超链接 我的世界 列表表格ctrl+t 代码

什么网站做简历模板关键词排名怎么快速上去

http://answers.unity3d.com/questions/34328/terrain-with-multiple-splat-textures-how-can-i-det.html转载于:https://www.cnblogs.com/klobohyz/archive/2012/10/09/2716627.html

c 网站开发需要什么软件东莞出行政策有变了

文章目录 前言一、哈希结构体&#xff1f;二、增删差3、遍历&#xff0c;清空&#xff0c;计数 前言 哈希表在头文件“utash.h”中已经有了&#xff0c;只需简单学习用法即可 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很…

自己做免费网站的视频参考消息电子版手机版

处理 HttpApplication 的事件HttpApplication 提供了基于事件的扩展机制&#xff0c;允许程序员借助于处理管道中的事件进行处理过程扩展。由于 HttpApplication 对象是由 ASP.NET 基础架构来创建和维护的&#xff0c;那么&#xff0c;如何才能获取这个对象引用&#xff0c;以便…

东莞营销型网站建设流程网站速成

1.类型转换 1.1 int(x):转化为一个整数&#xff0c;只能转换由纯数字组成的字符串 float->int 浮点型强转整形会去掉小数点后面的数&#xff0c;只保留整数部分 a 1.2 print(type(a)) #<class float> b int(a) print(type(b)) #<class int>print(int…

现货做网站wordpress登入可见插件

需做工作 在每个微服务下面新建一个Dockerfile文件根据Dockerfile文件使用docker build指令&#xff0c;打包为具体的镜像&#xff08;根据自己需求选择&#xff09;将docker镜像上传到私人docker仓库或者是公共仓库&#xff0c;如果没有上传&#xff0c;则自动保存在本地编写…

C# Avalonia 15- Animation- CustomEasingFunction

C# Avalonia 15- Animation- CustomEasingFunctionCustomEasingFunction.axaml代码<Window xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xm…

白银市建设局网站云捷配快速开发平台

目录 环境准备 生成SSH 密钥对 数据库备份并推送到gitlab脚本 设置定时任务 环境准备 服务器要有安装达梦数据库&#xff08;达梦安装这里就不示例了&#xff09;&#xff0c;git 安装Git 1、首先&#xff0c;确保包列表是最新的&#xff0c;运行以下命令&#xff1a; …

网站开发综合实训总结变化型网页网站有哪些

编辑 | 宋慧 出品 | CSDN云计算 vSphere、vSAN&#xff0c;从云计算兴起&#xff0c;就是 VMware 在虚拟化、分布式存储里大名鼎鼎的核心技术产品。不过随着云的发展到云原生、以及国内混合云快速发展的今天&#xff0c;虚拟化的领导者 VMware 有哪些最新的方案&#xff0c;值…

网站开发语言那个好新建网站如何调试

SQL 视图&#xff1a;概念、应用与最佳实践 SQL&#xff08;Structured Query Language&#xff09;视图是数据库管理中的一个重要概念&#xff0c;它允许用户以虚拟表的形式查看数据。视图在数据库中并不实际存储数据&#xff0c;而是提供了一个查询结果的快照&#xff0c;这…

哪个网站可以做鸟瞰图济南网站建设索q479185700

记录一下最近的生活&#xff0c;做一下简单的梳理&#xff0c;具体详细的梳理等我目前的工作步入正轨 以后再开始好好地总结一下2023年的过往经历&#xff0c;总结过去&#xff0c;展望未来。计划一下未来的2024该怎么度过。 最近一阵子都忙着考试&#xff0c;然后从10号以后一…

US$189 VVDI2 BMW FEM amp; BDC Functions Authorization Service With Ikeycutter Condor

VVDI2 BMW FEM & BDC Functions Authorization Service With Ikeycutter CondorNote: VVDI2 now add BMW FEM & BDC functions, VVDI2 Must have BMW OBD Function(SV86-3), then can open this function.Ther…

wordpress删除中文温州网站建设选择乐云seo

使用命令查看磁盘的空间 docker system df &#xff0c;类似于Linux的df命令&#xff0c;用于查看Docker使用的磁盘空间Docker镜像占据了4.789GBDocker容器占据了348BDocker数据卷占据了0B 执行删除命令 docker system prune命令可以用于清理磁盘&#xff0c;删除关闭的容器、…

屏山移动网站建设百度获客

随着科技的不断进步&#xff0c;智能家居逐渐成为现代生活的一部分。ESP-NOW技术以其独特的无线通信能力&#xff0c;为智能家居领域带来了一场革命。 ESP-NOW是一种由乐鑫定义的无线通信协议&#xff0c;它能够在无需路由器的情况下&#xff0c;实现设备间的直接、快速、低功…

nginx平滑升级+location案例 - 教程

nginx平滑升级+location案例 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

深入解析:装备制造企业支撑智能制造的全生命周期数据治理实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

确定网站开发团队湖南网页

状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为&#xff0c;显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态图是为了以下的研究目的&#xff1a;研究类、角色、子系统、或组件的复杂行为。

柳州市网站建设免费软件下载中心

随着科技的飞速发展&#xff0c;媒体内容已成为我们日常生活中不可或缺的一部分。为了满足用户对高质量视频内容不断增长的需求&#xff0c;Media Encoder 2024应运而生&#xff0c;它凭借卓越的技术和创新的特性&#xff0c;重塑了媒体编码的未来。 Media Encoder 2024软件获…

贪玩传奇手游官方网站成品网站5668入口的功能介绍

“”和“equals”的区别 Java中“”和“equals”的区别在于&#xff0c;它们比较的内容不同。""比较的是对象的引用是否相等&#xff0c;而equals比较的是对象的值是否相等。 具体来说&#xff0c;以下是两个操作符之间的区别&#xff1a; “”比较的是对象的引用&…

学生如何建设网站北京海淀区公司

文章目录1. 题目2. 解题1. 题目 给你一个整数 num 。重排 num 中的各位数字&#xff0c;使其值 最小化 且不含 任何 前导零。 返回不含前导零且值最小的重排数字。 注意&#xff0c;重排各位数字后&#xff0c;num 的符号不会改变。 示例 1&#xff1a; 输入&#xff1a;nu…