温馨提示×

Apache Ubuntu如何限制访问

小樊
32
2025-12-21 00:15:43
栏目: 智能运维

Apache Ubuntu 访问限制实用指南

一 前置检查与启用模块

  • 确认模块:基于 IP 的 mod_authz_host 一般默认启用;如需 .htaccess 认证,启用 mod_auth_basicmod_authn_file;如需目录级配置,按需启用 mod_rewrite
    命令示例:sudo a2enmod auth_basic authn_file rewrite
  • 配置生效方式:修改后执行 sudo systemctl reload apache2(或 restart)。
  • 目录权限建议:确保网站目录可被 www-data 读取,例如:
    sudo chown -R www-data:www-data /var/www/html
    sudo find /var/www/html -type f -exec chmod 644 {} ;
    sudo find /var/www/html -type d -exec chmod 755 {} ;
    以上准备可确保访问控制指令与认证机制可用且配置可热加载生效。

二 常见限制方式与示例

  • 基于 IP 限制(推荐 2.4 语法)
    在虚拟主机或目录块中使用 Require:
    <Directory “/var/www/protected”>
    Require ip 203.0.113.10 198.51.100.0/24
    Require all denied

    如需放行全部内网:Require ip 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16。
    兼容旧版 2.2 可用:Order Deny,Allow / Deny from all / Allow from 203.0.113.10。
  • 仅允许域名访问,禁止通过 IP 直连
    方法 A(默认虚拟主机捕获 IP 并返回 403):
    <VirtualHost *:80>
    ServerName 203.0.113.20
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
    RewriteRule ^ - [F]

    方法 B(直接在 IP 虚拟主机中拒绝):
    <VirtualHost *:80>
    ServerName 203.0.113.20
    DocumentRoot /var/www
    Require all denied

    若启用 HTTPS,对 :443 虚拟主机做同样配置(并在需要时配置 SSLCertificateFile/SSLCertificateKeyFile)。
  • 基于用户名密码认证(.htaccess 或
    创建密码文件:sudo htpasswd -c /etc/apache2/.htpasswd alice
    配置示例:
    <Directory “/var/www/secret”>
    AuthType Basic
    AuthName “Restricted Area”
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user

    如需仅允许某用户:Require user alice。
  • 限制特定文件类型
    示例(禁止下载 .mp4/.avi/.mov):
    <FilesMatch “.(mp4|avi|mov)$”>
    Require all denied

    以上示例覆盖 IP、域名、认证与文件类型等常见场景,语法区分 Apache 2.42.2

三 配置位置与生效方式

  • 站点配置:/etc/apache2/sites-available/your-site.conf 中的 块。
  • 全局配置:/etc/apache2/apache2.conf(或 ports.conf 等)。
  • 分布式配置:在目标目录放置 .htaccess,并确保对应 中 AllowOverride 允许(如 AllowOverride All)。
  • 使配置生效:sudo systemctl reload apache2(生产环境优先 reload,避免中断)。
  • 多站点与默认主机:若未屏蔽 IP 访问,可能命中排序最靠前的虚拟主机;建议显式创建默认虚拟主机捕获 IP 请求并返回 403

四 验证与排错

  • 语法检查:sudo apache2ctl configtest(无输出或 Syntax OK 表示通过)。
  • 重载服务:sudo systemctl reload apache2。
  • 日志排查:
    tail -f /var/log/apache2/error.log
    tail -f /var/log/apache2/access.log
  • 常见问题:
    • 403 被拒:检查目录权限(www-data 可读)、目录中是否缺少默认首页、是否误用了 Require all denied。
    • .htaccess 不生效:确认 中 AllowOverride 非 None,且父目录策略未覆盖。
    • IP 限制无效:确认使用 2.4 的 Require 语法,且没有更高优先级配置覆盖。
    • 端口与协议:同时检查 :80:443 的虚拟主机配置是否一致。
      以上步骤可快速定位访问控制配置是否正确生效。

0