我目前正在使用 Apache2.4 在 Ubuntu 18.04 上建立一个网站。
我想做的是将对我的子域的 HTTP(S) 访问限制为某些 IP。这些子域要么用于开发测试,要么是管理工具(phpMyAdmin 等),所以我绝对不希望这些子域公开。
我还希望 domain.com 公开。
网站的当前状态是什么:
- domain.com 是可公开访问的
- domain.com 显示 /var/www/html/ 内容
- sub1.domain.com 是可公开访问的
- sub1.domain.com 显示 /var/www/html/sub1 内容
- sub2.domain.com 是可公开访问的
- sub2.domain.com 显示 /var/www/html/sub2 内容
预期结果是什么:
- domain.com 是可公开访问的
- sub1.domain.com 被限制到多个 IP
- sub2.domain.com 被限制到多个 IP
这是我目前的配置:
DNS 条目:
Name Type TTL Target
A 300 ServerIP
sub1 CNAME 300 domain.com
sub2 CNAME 300 domain.com
www CNAME 300 domain.com
Apache2.conf:
[...]
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<Directory /var/www/html/sub1>
AllowOverride All
Require all denied
</Directory>
[...]
/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName domain.com
ServerAlias domain.com
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
/etc/apache2/sites-available/sub1.domain.com.conf
<VirtualHost *:80>
ServerName sub1.domain.com
DocumentRoot /var/www/html/sub1
<Directory /var/www/html/sub1>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all denied
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =sub1.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
符号链接/etc/apache2/sites-available/sub*.domain.com.conf
由/etc/apache2/sites-enabled
我还不明白的是,如果我尝试在中添加 .htaccess 文件/var/www/html/php56
,它不会被考虑,尽管AllowOverride All
我正在尝试做的另一件事是将 domain.com/sub1 请求重定向到 sub1.domain.com 而不是抛出 403 错误,但没有 .htaccess 文件,因此我尽量减少了配置文件的数量。
注意:出于测试目的,我特意设置Require all denied
为Require ip x.x.x.x
我做错了什么?
如果我忘记提供任何所需信息,请告知我。
感谢您的帮助
更新:
感谢 Tom 的建议,我弄清楚了问题所在。在我的系统中,/etc/apache2/sites-available/sub1.domain.com.conf
我有一个从 HTTP 到 HTTPS 的重定向。实际上,Let's Encrypt 创建了一个/etc/apache2/sites-available/sub1.domain.com-le-ssl.conf
文件(在证书设置期间,我选择强制 HTTPS 重定向),并且该文件中有Require all granted
,所以该文件正在覆盖我的sub1.domain.com.conf
文件。
最后,我根据 Tom 的回答更改了我的目录设置 - 这样就清楚多了,谢谢!
这也解决了我的重定向问题,因为现在我的 domain.com 根文件夹是/var/www/domain.com/www
答案1
我不会将子域名的根目录设为根域名的子文件夹。相反,应该这样:
/var/www/html/
- sub1/
- sub2/
- sub3/
我会自己这样做:
/var/www/domain.com/
- www/ (the root)
- sub1/
- sub2/
- sub3/
这使得限制文件访问变得容易得多。在当前设置中,也许访问受到限制,VirtualHost
但可以通过根域访问相同的数据:http://www.example.com/sub1/data
。