子目录配置 Apache2

子目录配置 Apache2

我目前正在使用 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 deniedRequire 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

相关内容