官方网站 云服务器 专用服务器香港云主机28元月 全球云主机40+ 数据中心地区 成品网站模版 企业建站 业务咨询 微信客服 控制版面

CentOS7配置虚拟主机

admin 2个月前 (06-04) 阅读数 227 #虚拟主机知识
文章标签 虚拟主机Apache

CentOS 7 Apache 虚拟主机实战指南:HTTP/HTTPS 双栈部署、SELinux 深度适配与企业级故障诊断

在现代 Web 架构中,“一机多站”并非权宜之计,而是资源集约化与运维标准化的核心能力,Apache 虚拟主机(Virtual Host)作为 CentOS 7 生产环境中久经考验的方案,凭借其零容器依赖、配置透明、审计友好、生态成熟等优势,在中小规模业务系统中仍具不可替代性,本文摒弃碎片化教程,提供一套全链路、可复现、防踩坑的虚拟主机落地流程——涵盖从系统初始化、权限建模、双协议配置、SELinux 上下文治理、日志生命周期管理,到基于 HTTP 状态码的根因分析法,全程严格对标 CIS 基线与 Red Hat 官方安全建议。


环境准备与服务初始化

确认系统为 CentOS Linux 7.9(或更高小版本):

cat /etc/redhat-release  # 应输出类似:CentOS Linux release 7.9.2009 (Core)
sudo yum update -y && sudo yum install -y epel-release
sudo yum install -y httpd mod_ssl python3-certbot-apache

关键提示:CentOS 7 默认搭载 httpd 2.4.x,其授权模型已彻底重构——Require all granted 取代旧版 Order/Allow,且 ServerName<VirtualHost> 必填项(否则触发警告并影响泛域名匹配)。

启动服务并持久化:

sudo systemctl enable --now httpd
sudo firewall-cmd --permanent --add-service={http,https} && sudo firewall-cmd --reload

网站目录结构与最小权限模型

example.com 为例,构建符合 FHS 标准的隔离目录:

sudo mkdir -p /var/www/example.com/{public_html,logs,backup}
sudo chown -R $USER:apache /var/www/example.com/public_html
sudo chmod 755 /var/www/example.com
sudo chmod 750 /var/www/example.com/logs  # 日志目录仅限 apache 用户读写

🔐 安全原则

  • public_html 属主为开发用户(便于文件上传),属组为 apache
  • 禁止 root 直接拥有 Web 目录(规避提权风险);
  • 若需 CMS 自动更新(如 WordPress),仅对 wp-content 子目录执行:
    sudo chown -R apache:apache /var/www/example.com/public_html/wp-content
    sudo chmod -R 775 /var/www/example.com/public_html/wp-content

HTTP 虚拟主机配置(明文)

启用模块化配置:确保 /etc/httpd/conf/httpd.conf 中存在未注释行:

IncludeOptional conf.d/*.conf

新建站点配置 /etc/httpd/conf.d/example.com.conf

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog /var/www/example.com/logs/error.log
    CustomLog /var/www/example.com/logs/access.log combined
    <Directory "/var/www/example.com/public_html">
        Options -Indexes +FollowSymLinks  # 显式禁用目录索引(安全加固)
        AllowOverride None                 # 生产环境禁用 .htaccess(性能+审计)
        Require all granted
    </Directory>
</VirtualHost>

⚠️ 重要操作:每次修改后必须执行 sudo httpd -t 验证语法,成功后 reload:

sudo httpd -t && sudo systemctl reload httpd

HTTPS 全站加密与强制跳转

使用 Certbot 自动部署(推荐):

sudo certbot --apache -d example.com -d www.example.com --redirect

--redirect 参数将自动注入 301 跳转规则,并启用 HSTS 头(Strict-Transport-Security)。
若手动配置 SSL,请在 *:443 块中添加:

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1  # 禁用不安全协议
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256

SELinux 上下文精准标记(避坑重点)

默认 SELinux 策略拒绝 Apache 访问非标准路径,执行:

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com/public_html(/.*)?"
sudo restorecon -Rv /var/www/example.com/public_html

📌 扩展场景

  • CGI 脚本 → httpd_sys_script_exec_t
  • 上传目录写入 → httpd_sys_rw_content_t(需额外 setsebool -P httpd_can_network_connect 1

日志分离与自动化轮转

/etc/logrotate.d/httpd 中追加:

/var/www/example.com/logs/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 644 apache apache
    sharedscripts
    postrotate
        /bin/systemctl reload httpd.service >/dev/null 2>&1 || true
    endscript
}

故障诊断四象限法

状态码 根因定位路径
403 ls -ldZ /var/www/example.com/public_html → SELinux 类型 + 权限 + 父目录 x
404 httpd -S 查看虚拟主机加载顺序;检查 DocumentRoot 路径大小写与符号链接有效性
HTTPS 失效 openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep "Verify return code"
DNS 正常但无法访问 curl -vH "Host: example.com" http://<server_ip> 模拟请求头,排除 ServerName 匹配失败

💡 终极提醒:虚拟主机的本质是 Linux 权限体系、HTTP 协议语义、SELinux 策略引擎的三维协同,每一次 systemctl reload httpd 前的 httpd -t,不仅是语法检查,更是对安全边界的敬畏,掌握此流程,即握有 CentOS 7 Web 基础设施的治理密钥。

(全文共计 1830 字|原创内容,严禁搬运) 来源**:CentOS 7 配置虚拟主机完整指南

版权声明
本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主 如果涉及侵权请尽快告知,我们将会在第一时间删除。
本站原创内容未经允许不得转载,或转载时需注明出处:特网云知识库

热门