Apache Ubuntu如何限制访问
小樊
32
2025-12-21 00:15:43
Apache Ubuntu 访问限制实用指南
一 前置检查与启用模块
- 确认模块:基于 IP 的 mod_authz_host 一般默认启用;如需 .htaccess 认证,启用 mod_auth_basic 与 mod_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.4 与 2.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 的虚拟主机配置是否一致。
以上步骤可快速定位访问控制配置是否正确生效。