ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CentOS 7 上 Apache2 安装配置与排障全攻略

CentOS 7 上 Apache2 安装配置与排障全攻略 CentOS 7 上用 yum 装 Apache 其实特别简单一条命令的事儿但后面接踵而来的配置、权限、SELinux、虚拟主机、HTTPS 这些坑才是真正让人头疼的地方。很多人装完 httpd 发现访问不了、403、重启失败往往不是命令敲错了而是没弄明白 CentOS 7 上 Apache 的目录结构、CentOS 7 的 systemd 管理方式和默认安全策略。这篇博文就围绕 CentOS 7 安装 Apache2httpd这条路从零开始带你完整走一遍从环境检查、yum 安装、配置解析、虚拟主机、HTTPS、防火墙到日常排障每一步都会讲清楚为什么这么做适合刚接触 Linux 运维的初学者也适合正在搭建 Web 服务器或者迁移老项目的同学参考。1. 环境准备与安装前的检查1.1 先确认系统版本和基础环境拿到一台 CentOS 7 机器别急着敲 yum install先把底摸清楚。我习惯先跑三件事cat /etc/redhat-release uname -a yum repolist第一行确认系统版本第二行看内核架构第三行确认 yum 源是否可用。CentOS 7 各个小版本比如 7.6、7.9在安装 Apache 上没有本质区别yum 源里的 httpd 版本基本都是 2.4.6所以只要系统能正常访问网络、yum 源能解析出包后面就顺了。还有一个很容易被忽略的点确认主机名和 hosts 解析。Apache 启动时如果配置文件里没有全局 ServerName它会尝试用系统主机名反解 IP反解失败会报一个 httpd: Could not reliably determine the servers fully qualified domain name 的警告。虽然不是致命错误但看着膈应也容易让人误以为装失败了。我建议在 /etc/hosts 里加一行本机 IP 和主机名的映射或者干脆稍后在配置里显式声明 ServerName后面会细说。如果 yum repolist 输出为空多半是网卡没起来或者源有问题。CentOS 7 的网卡默认可能不是开机自启检查一下 /etc/sysconfig/network-scripts/ifcfg-ens33具体设备名用 ip addr 看里 ONBOOT 是不是 yes改完重启 network 服务再试。这一步虽然是网络问题但装了 Apache 的人也经常在这个上面踩坑尤其用虚拟机装 CentOS 的时候。1.2 用 yum 安装 httpd 及常用模块包CentOS 7 默认源里 Apache 的包名不叫 apache2而是 httpd。这算是个历史遗留习惯Debian/Ubuntu 系叫 apache2RedHat 系一直叫 httpd。安装命令是yum install -y httpd装完之后建议顺手把 PHP 和 MySQL 客户端一起装上因为大多数装 Apache 的人都是为了跑动态站点yum install -y php php-mysql php-gd php-mbstring注意 CentOS 7 默认源里的 PHP 版本是 5.4.16相当老。如果项目要求 PHP 7需要额外装 EPEL 或 Remi 源这块就不展开说了但心里要有数。装完可以用 rpm -qa | grep httpd 确认安装的版本也可以直接看 httpd -v 的输出。安装完先别急着配置直接用 systemctl 启动一次确认二进制没问题systemctl start httpd systemctl status httpd正常情况下 status 会显示 active (running)。这里有个小细节我用的是 systemctl 而不是 service httpd start。CentOS 7 全面转向 systemd虽然 service 命令做了兼容但实际管理建议统一用 systemctl日志查询、开机自启、依赖关系都走 systemd 一套。1.3 安装完成后快速验证默认页面启动成功后在你本机浏览器输入服务器 IP应该能看到 Apache 的默认测试页。这个页面的存在其实就是在告诉你服务起来了网络通着防火墙没拦。如果看不到页面先别怀疑配置先查两件事防火墙有没有放行 80 端口以及云服务器安全组有没有放行 80 端口。CentOS 7 默认的 firewall 需要手动放行firewall-cmd --permanent --add-servicehttp firewall-cmd --reload如果你用的是阿里云、腾讯云这类云主机控制台里的安全组规则也要放行 TCP 80。虚拟机的话没有安全组这层只看防火墙就行。这两件事做完默认页基本就能打开了。默认测试页的路径在 /usr/share/httpd/noindex/index.html它本身不是真正的站点页面。很多人刚装完直接把代码丢进 /var/www/html但忘了把 /etc/httpd/conf.d/welcome.conf 里那个 LocationMatch 注释掉或删掉导致访问根路径总是跳到测试页而不是自己的 index.php。这个文件后续建议直接删掉或者改名避免干扰。2. 核心配置解读httpd.conf 关键项2.1 全局配置ServerRoot、Listen、ServerNameApache 装好后主配置文件在 /etc/httpd/conf/httpd.conf这是所有配置的入口。有人喜欢把所有东西塞这一个文件里我不是很建议后面维护成本太高。CentOS 7 的默认配置文件末尾有一行IncludeOptional conf.d/*.conf这意味着 /etc/httpd/conf.d/ 目录下所有 .conf 文件都会被加载。所以我一般把虚拟主机、SSL、PHP 相关的配置放在 conf.d 里独立文件管理主配置只留全局项。先看几个核心全局参数ServerRoot /etc/httpd指定 Apache 的配置根目录所有相对路径都基于它。默认值不用改。Listen 80监听端口。如果服务器上还要跑 Nginx、Tomcat 或其他 Web 服务80 端口只能被一个进程占用这是最常见的启动失败原因。ServerName www.example.com:80声明服务器自身的主机名和端口。前面提到过不配置会有一个警告建议直接写ServerName 你的主机名或IP:80这里有个经验ServerName 不一定要和实际域名一致它只是 Apache 用来生成重定向 URL、区分虚拟主机的一个标识。写 IP 也行写 localhost 也行只要你心里清楚。说完这三个再强调一下配置语法检查。每次改完主配置或 conf.d 里的文件先跑apachectl configtest如果输出 Syntax OK再执行 graceful 重载。这个习惯帮我避免过很多次把线上服务搞挂的尴尬。2.2 目录权限与访问控制Directory 段配不好就 403Apache 2.4 之后目录访问控制的写法跟 2.2 差别很大。CentOS 7 默认 2.4.6这个是重灾区网上搜到老教程有一堆 Order allow,deny那是 2.2 的语法在 2.4 里直接不生效。先看默认的 /var/www/html 配置Directory /var/www/html Options Indexes FollowSymLinks AllowOverride None Require all granted /Directory几个关键点Options Indexes如果目录里没有 index.html 或 index.php会显示目录文件列表。这对生产环境是个安全隐患通常建议去掉 Indexes改成 Options FollowSymLinks。AllowOverride None控制 .htaccess 是否生效。如果你的站点代码依赖 .htaccess 做伪静态比如 ThinkPHP、WordPress这里需要改成 AllowOverride All。但生产环境我更推荐直接在虚拟主机配置里写规则而不是依赖 .htaccess性能更好也更容易排查。Require all granted允许所有访问。这是 2.4 的新语法等价于以前 2.2 里的 Allow from all。如果你只想允许特定 IP可以写 Require ip 192.168.1.0/24。最常见的 403 场景就是自己建了一个新站点目录比如 /data/www/mysite然后在虚拟主机里把 DocumentRoot 指过去结果忘了给这个目录配 Directory 段或者配了没配对。Apache 默认对位于 /var/www 之外的目录一律拒绝访问这个坑我踩过不止一次后面排查部分会再细说。2.3 模块加载与常用模块确认httpd 的模块化设计很实用不需要的功能可以不加载省内存少暴露面。模块配置文件在 /etc/httpd/conf.modules.d/ 目录下默认已经加载了大部分常用模块。你可以用下面命令查看当前加载了哪些模块httpd -M这个命令输出很长但值得仔细看一遍。重点关注这几个mod_rewriteURL 重写模块伪静态、强制 HTTPS 跳转都靠它。默认是加载的。mod_sslHTTPS 支持模块默认注释掉了配置 SSL 之前需要先装 mod_ssl 包并启用。mod_proxy 和 mod_proxy_http反向代理模块需要把请求转发给 Tomcat、Node.js 时用。默认未加载需要单独配置。mod_headers修改 HTTP 头做安全加固、CORS 跨域时用。mod_deflateGzip 压缩加快页面加载速度。如果要用 SSL 和代理执行yum install -y mod_ssl装完 mod_ssl 后/etc/httpd/conf.d/ 下会多一个 ssl.conf同时会生成默认自签名证书。后面配 HTTPS 就是在这个基础上改。3. 虚拟主机配置实战3.1 基于域名的虚拟主机一台服务器跑多个网站是 Apache 的看家本领实现方式就是虚拟主机。基于域名的虚拟主机是最常用的所有站点共享 80 端口通过 Host 头区分请求归属哪个站点。我习惯在 /etc/httpd/conf.d/ 下为每个站点建一个独立配置文件比如 vhost-example.conf。以下是一个典型配置VirtualHost *:80 ServerName www.example.com ServerAlias example.com DocumentRoot /data/www/example ErrorLog logs/example-error_log CustomLog logs/example-access_log combined Directory /data/www/example Options FollowSymLinks AllowOverride All Require all granted /Directory /VirtualHost关键参数解释ServerName这个站点的唯一标识。访问时 Host 头匹配到它就走这个虚拟主机。ServerAlias额外域名比如不带 www 的裸域名多个域名指向同一站点时很管用。DocumentRoot站点文件根目录。这个目录一定要存在并且 Apache 用户apache要有读取权限否则直接 403。ErrorLog / CustomLog站点独立的日志路径。多站点混在一起写默认日志排查问题会非常痛苦。配完以后一定记得先注释掉或删掉默认的 welcome.conf否则访问默认 IP 时可能还是会跳到测试页。然后执行apachectl configtest systemctl reload httpdreload 和 restart 的区别值得多说一句reload 是平滑重载不中断现有连接适合配置变更restart 是重启进程会断开所有连接。线上环境改配置一律用 reload除非改了监听端口这种需要完全重启的参数。3.2 基于端口的虚拟主机和 IP 虚拟主机基于域名的虚拟主机是最常见的但偶尔也会遇到基于端口的场景比如同一台机器上跑两个不同服务一个走 8080一个走 8081。这时候首先要让 Apache 监听多个端口Listen 8080 Listen 8081然后在虚拟主机配置里写VirtualHost *:8080 ServerName app1.example.com DocumentRoot /data/www/app1 /VirtualHost VirtualHost *:8081 ServerName app2.example.com DocumentRoot /data/www/app2 /VirtualHost这种配置用在开发环境或者内网服务上挺多。对外提供服务时我一般还是建议统一用 80/443再用 Nginx 或 Apache 的反向代理做端口转发这样用户侧只需要记域名不需要记端口。另外提一下基于 IP 的虚拟主机。如果服务器有多个网卡 IP可以在 VirtualHost 里指定具体 IP 而不是 *这在某些需要区分来源 IP 的合规场景里有价值平时基本用不上。3.3 虚拟主机配置文件命名的坑conf.d 目录下的文件是按文件名顺序加载的。如果有多个配置文件都声明了同一个 谁先加载谁生效。我在一个项目里吃过亏配置了两个站点一个叫 1-example.conf一个叫 2-example.conf结果因为第二个文件里的 ServerName 写在前面所有请求都进了错的站点。解决方式是养成好习惯——每个站点一个文件文件名里带明确的站点标识比如 example.conf、blog.conf并在文件里把 Listening 端口和 ServerName 写清楚。加载顺序问题不用刻意规避但要在文件头部写注释标明站点名称、负责人、维护时间半年后回来维护时你会感谢自己。4. HTTPS 配置与安全加固4.1 用自签名证书快速启用 HTTPS内网环境、测试环境不想买证书可以用 openssl 生成自签名证书。安装 mod_ssl 之后先看看自带的 /etc/pki/tls/certs/localhost.crt 能不能直接凑合用。如果是内部系统直接用默认证书先顶上再自己生成一套也行。自己生成一张有效期 365 天的证书mkdir -p /etc/httpd/ssl cd /etc/httpd/ssl openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example.key -out example.crt执行过程中会提示输入国家、省份、组织等信息直接回车跳过或者随便填浏览器访问时会提示证书不受信任这是自签名证书的正常现象。接着在 SSL 配置文件里指定证书路径VirtualHost *:443 ServerName www.example.com DocumentRoot /data/www/example SSLEngine on SSLCertificateFile /etc/httpd/ssl/example.crt SSLCertificateKeyFile /etc/httpd/ssl/example.key Directory /data/www/example Options FollowSymLinks AllowOverride All Require all granted /Directory /VirtualHost配置完成后重启 httpd用 https:// 访问。这里提醒一个细节很多教程写的是 systemctl restart httpd但重启前务必先跑 apachectl configtest因为 SSL 相关路径写错、证书文件权限不对私钥一般不能是 644都会导致启动失败而 configtest 能提前暴露 90% 的问题。4.2 使用 Lets Encrypt 免费证书让浏览器不再报警如果站点要对外提供服务自签名证书会吓跑用户。正规做法是用 Lets Encrypt 免费 CA 证书。安装工具yum install -y epel-release yum install -y certbot python2-certbot-apacheCentOS 7 自带 Python 2certbot 的 Apache 插件可以自动修改 httpd 配置并加载证书省去手动改 SSL 虚拟主机的操作。执行certbot --apache -d www.example.com -d example.comcertbot 会引导你填写邮箱、同意协议然后自动完成验证、签发证书、改写配置。签发成功后证书文件在 /etc/letsencrypt/live/www.example.com/ 目录下。该证书有效期 90 天需要定期续期certbot renew --dry-run把续期命令加入 crontab0 3 * * * /usr/bin/certbot renew --quiet注意certbot 自动续期前会先检查 80 端口是否可达所以如果服务器前面还有一层 CDN 或 Nginx 反代续期需要额外配置 webroot 方式这里不展开但知道有这个坑就行。4.3 安全加固的几个实用项HTTPS 通了之后别急着收工还有几个顺手就能做的加固项。第一个是禁用服务器版本泄露ServerTokens Prod ServerSignature Off这两个配置写在 httpd.conf 里作用是隐藏 Apache 版本号和操作系统信息减少被扫描器精确识别后的攻击风险。第二个是强制 HTTPS 跳转。在 80 端口虚拟主机里加一段VirtualHost *:80 ServerName www.example.com RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R301,L] /VirtualHost这样用户访问 http:// 地址会被 301 跳转到 https既安全又对 SEO 友好。第三个是关闭目录自动索引。在前面的 Directory 段里确认 Options 没有 Indexes 关键字。如果嫌改配置麻烦可以直接执行echo Options -Indexes /data/www/example/.htaccess前提是 AllowOverride 没有设为 None。不过我的经验是能改主配置就改主配置少依赖 .htaccess出问题时少一层迷雾。5. 防火墙、SELinux 与开机自启5.1 firewalld 放行 80 和 443 端口CentOS 7 自带 firewalld默认只放行 ssh 和一些系统服务不会自动放行 HTTP 端口。前面安装完已经放了一次这里再补充几条端口和来源范围的规则比较全面firewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port443/tcp firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.1.0/24 port port8080 protocoltcp accept firewall-cmd --reload第二条新增的 rich-rule 表示只允许内网 192.168.1.0/24 网段访问 8080 端口适合管理后台这种敏感服务。firewalld 的规则加载是即时的reload 之后立刻生效已经在连的 ssh 会话不会断开这一点比直接改 iptables 文件要安全得多。检查当前防火墙规则是否生效firewall-cmd --list-all输出里会看到 ports 和 services 列表。如果在云服务器上还要去云控制台确认安全组规则很多 80 端口打不开的问题本质是云安全组拦截了跟服务器防火墙一点关系都没有。5.2 SELinux 导致的 Permission Denied 处理CentOS 7 默认是开启 SELinux 的这也是最让新手抓狂的地方。常见现象配置完全正确、目录权限 755、文件可读但访问就是 403翻 /var/log/httpd/error_log 发现 Permission denied。这是 SELinux 在拦。判断是不是 SELinux 的问题两步走。第一步看状态getenforce如果是 Enforcing大概率是 SELinux 拦截。第二步看日志ausearch -m avc -ts recent如果输出有 avc: denied 记录基本可以确认。解决办法有两种。一是给目录打上正确的 SELinux 类型标签chcon -R -t httpd_sys_content_t /data/www/example这样 Apache 就能正常读取这个目录下的静态文件。如果你的站点需要写文件比如上传图片、生成缓存还要加上 httpd_sys_rw_content_tchcon -R -t httpd_sys_rw_content_t /data/www/example/uploads二是直接修改布尔值适合特定场景。比如 Apache 做反向代理时默认不允许发起网络连接需要执行setsebool -P httpd_can_network_connect 1这里的教训是不要一看到 SELinux 就 setenforce 0 或者改 /etc/selinux/config 永久关闭。关闭虽然省事但会让服务器失去一层重要安全保护尤其生产环境不应该这么干。正确做法是为你的站点目录设置正确的上下文标签这比关 SELinux 干净得多。5.3 systemctl 管理与开机自启CentOS 7 的 Apache 完全由 systemd 管理日常操作就几个命令systemctl start httpd # 启动 systemctl stop httpd # 停止 systemctl restart httpd # 重启 systemctl reload httpd # 平滑重载 systemctl enable httpd # 设置开机自启 systemctl disable httpd # 取消开机自启 systemctl is-enabled httpd # 查看开机自启状态开机自启这条建议在安装配置完成后立刻执行systemctl enable httpd如果没有执行这条服务器重启后 Apache 不会自动启动到时候远程访问不了你还得找台机器登录上去排查纯属浪费时间。systemd 管理的服务日志可以用 journalctl 查看但 Apache 自身的错误日志还是走 /var/log/httpd/error_log。两者互补journalctl 能看服务本身有没有被 systemd 杀掉、什么时候启动的error_log 能看到请求处理层面的报错。排查问题时先看哪个取决于症状丢在哪一层。6. 常见问题与排查实录6.1 启动失败Address already in use现象systemctl start httpd 后马上退出日志显示(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80这个错误很好理解80 端口被其他进程占了。排查方法ss -lntp | grep :80如果输出里有 nginx、java、python 或其他进程就是端口冲突。最简单的处理让出端口或者让 Apache 改监听端口。改监听端口就在 /etc/httpd/conf/httpd.conf 里改 Listen 80 为 Listen 8080然后记得对应用户访问时加端口号。如果是和 Nginx 共存的情况可以考虑让 Nginx 监听 80Apache 监听 8080再用 Nginx 反代到 Apache。这个组合在高并发场景下很常见Nginx 处理静态资源更高效PHP 动态请求交给 Apache 处理。6.2 访问返回 403 Forbidden403 的含义是服务器拒绝访问可能是文件权限、目录配置、SELinux 这三类原因。我按排查优先级列一个三步法。第一步检查 /data/www/example 目录的执行权限和可读权限ls -ld /data/www/example用户 apache 至少要有读和执行权限目录一般是 755 或 750如果属组是 apache。如果目录在外面挂载的磁盘上还要看挂载选项是不是 noexec。第二步检查 Apache 配置里的 Directory 段。注意 Directory 路径必须和实际路径完全一致配错了直接 403。另外确认 Require all granted 写的是 granted不是 denied。第三步排查 SELinux按前面 5.2 节的方法设置上下文标签。有一个细节特别容易忽略如果你是在 /home/user/www 下建站点主机上如果开了 vsftpd 或者系统有家目录权限限制Apache 需要跨越 /home 目录的权限边界。Linux 权限是逐级检查的/home 本身是 755 没问题但 /home/user 如果是 700Apache 就读不了。这种问题通过 ls -ld 逐级查看权限就能发现。6.3 日志怎么看error_log 是排障第一入口Apache 的日志是排查问题的第一现场。CentOS 7 默认配置下错误日志位置在 /etc/httpd/conf/httpd.conf 里通过 ErrorLog 指令指定默认是 logs/error_log相对路径基于 ServerRoot所以实际位置是 /var/log/httpd/error_log。访问日志在 /var/log/httpd/access_log格式通常是 combined 格式包含客户端 IP、请求时间、请求方法、状态码、User-Agent 等信息。比如一条典型记录192.168.1.10 - - [10/Nov/2025:14:23:01 0800] GET /index.php HTTP/1.1 200 1024 - Mozilla/5.0状态码 200 表示正常404 表示文件不存在500 表示后端处理出错503 可能是服务过载或维护。跟踪实时日志很有用tail -f /var/log/httpd/error_log然后你在浏览器里复现问题日志会实时滚动每一条请求、每一行报错都很清晰。我排障时几乎都是先开这个窗口再打开浏览器反复刷新比盲目改配置高效得多。排除一个方向后别忘了清理日志文件日志增长很快长期不轮转会占满磁盘。CentOS 7 自带的 logrotate 配置 /etc/logrotate.d/httpd 会做按周轮转一般不用手动处理但如果你改了日志路径记得同步修改 logrotate 配置。6.4 常见问题速查表下面这个表是我日常运维时最常翻的几点列出来供你直接对照现象常见原因排查/解决启动失败提示 Address already in use80 端口被其他进程占用ss -lntp | grep :80 找到进程改端口或停止占用访问 IP 显示默认测试页welcome.conf 干扰删除/注释 /etc/httpd/conf.d/welcome.conf 里的 LocationMatch访问显示 403 Forbidden目录权限、Directory 配置、SELinux依次检查 755 权限、Require all granted、chcon 类型标签动态请求返回 500PHP 语法错误或 PHP-FPM 未启动查看 error_log定位具体 PHP 文件行号HTTPS 访问不了防火墙未放行 443 或证书路径错误firewall-cmd 放行 443检查 SSLCertificateFile 路径httpd 重启后没生效未执行 reload配置文件修改后执行 systemctl reload httpd伪静态失效mod_rewrite 没加载或 AllowOverride Nonehttpd -M 查看模块确认 Directory 里 AllowOverride All页面显示源码PHP 模块未安装或未加载yum install php确认 php 模块后重启 httpd上传目录写不进去目录权限或 SELinux 上下文不对chown apache:apachechcon -t httpd_sys_rw_content_t这些坑都踩过一遍之后再看 Apache 的配置就会觉得清晰很多。7. 调优与后续扩展补充几个经验7.1 MPM 工作模式选型Apache 2.4 提供了几种工作模式MPMCentOS 7 默认安装的是 prefork也就是一个请求对应一个进程。并发不高、跑 PHP尤其是 mod_php时prefork 是最稳的选择因为每个进程都是独立的一个进程崩了不影响别人。如果并发量上来了可以考虑 worker 或 event 模式。event 模式是 2.4 推荐的但对 PHP 的原生支持不如 prefork 直接——PHP 模块在 event 模式下无法安全使用。实际部署中如果并发要求高我更推荐 Apache 前再挂一层 Nginx 做静态加速和负载均衡动态请求回源给 Apache。这是一套非常成熟且稳妥的架构。切换 MPM 的方式是安装对应的模块包再修改配置。比如yum install -y httpd-mod_ssl等等这个包名不对MPM 的安装包名是yum install -y mod_mpm_event然后修改 /etc/httpd/conf.modules.d/00-mpm.conf注释掉 LoadModule mpm_prefork_module 那行取消 LoadModule mpm_event_module 行的注释。改完重启服务用 httpd -M 确认当前生效的模式。7.2 常用性能参数调整httpd.conf 里几个直接影响性能的参数KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5KeepAlive 开启后同一客户端的一个 TCP 连接可以发送多个请求减少握手次数。KeepAliveTimeout 别设太长默认 5 秒够用设太长会让空闲连接占用资源。prefork 模式下的进程数控制IfModule prefork.c StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 256 MaxConnectionsPerChild 10000 /IfModule这些参数不是越大越好得根据服务器内存来。每个 Apache 进程大概占 10~30MB 内存如果机器是 2G 内存MaxRequestWorkers 设成 512 会直接把内存吃光触发 OOM。我的经验是4G 内存的机器MaxRequestWorkers 从 256 起步用 ab 压测看内存和响应时间再往上调。7.3 反向代理和负载均衡的简单配置如果需要把请求转发给后端应用Java、Node.js、Python配置 mod_proxy 相关模块后写VirtualHost *:80 ServerName app.example.com ProxyPreserveHost On ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ /VirtualHost注意配置了 ProxyPass 的虚拟主机里不要再配 DocumentRoot否则会冲突。反向代理配置好后还要检查 SELinux 的布尔值 httpd_can_network_connect前面 5.2 节提过没开的话会一直报 503 或者连接超时。写在最后的实操建议整套流程走下来CentOS 7 安装和配置 Apache2httpd这件事并不复杂但每一步都有几个容易被忽略的细节。我在实际运维中最大的体会是别急着改配置先理解配置文件在说什么再用 apachectl configtest 验证语法最后才动 systemctl。配置前后多用 httpd -M 看模块、ss -lntp 看端口、tail -f /var/log/httpd/error_log 看日志排查问题会非常顺。最后再分享一个小技巧在 httpd.conf 的末尾加一行 IncludeOptional conf.d/*.conf 如果你早期版本的 CentOS 已经有这行了就不用重复。重点是我习惯在每个虚拟主机配置文件顶部写一段注释记录站点的部署路径、证书签发时间、PHP 版本要求、对接的后端服务。半年后服务器出问题你翻注释就能快速定位是哪个项目在跑、谁改过、当时为什么这样配这比任何监控告警都省时间。
返回列表