web-dev-qa-db-ja.com

サブディレクトリ構成Apache2

私は現在、Apache2.4を使用してUbuntu18.04にWebサイトをセットアップしています。

私がやろうとしているのは、サブドメインへの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に作成されます

また、/var/www/html/php56に.htaccessファイルを追加しようとしても、AllowOverride Allに関係なく考慮されません。

私がやろうとしているもう1つのことは、403エラーをスローする代わりにdomain.com/sub1リクエストをsub1.domain.comにリダイレクトすることですが、.htaccessファイルがないため、構成ファイルの数を最小限に抑えます。

注:テスト目的で、Require all deniedではなくRequire ip x.x.x.xを意図的に設定しています

私が間違っていることは何ですか?

必要な情報を提供するのを忘れた場合は、お知らせください。

ご協力いただきありがとうございます

更新:

トムの助言のおかげで、何が悪いのかわかりました。 /etc/Apache2/sites-available/sub1.domain.com.confで、HTTPからHTTPSへのリダイレクトがありました。実際、Let'sEncryptは/etc/Apache2/sites-available/sub1.domain.com-le-ssl.confファイルを作成し(証明書のセットアップ中に、HTTPSリダイレクトを強制することを選択しました)、そのファイルにはRequire all grantedがあったため、そのファイルは私のsub1.domain.com.confファイルを上書きしていました。

最後に、トムの答えに従ってディレクトリの設定を変更しました。そうすれば、はるかに明確になります。ありがとうございます。
domain.comのルートフォルダが/var/www/domain.com/wwwになっているため、リダイレクトの質問も解決しました。

2
Amaury

サブドメインのルートディレクトリをルートドメインのサブフォルダにしません。の代わりに:

/var/www/html/
    - sub1/
    - sub2/
    - sub3/

私はこのように自分でそれをします:

/var/www/domain.com/
    - www/ (the root)
    - sub1/
    - sub2/
    - sub3/

これにより、ファイルへのアクセスを簡単に制限できます。現在の設定では、おそらくアクセスはVirtualHostによって制限されていますが、ルートドメインを経由して同じデータにアクセスできます:http://www.example.com/sub1/data

2
Tommiie