私は現在、Apache2.4を使用してUbuntu18.04にWebサイトをセットアップしています。
私がやろうとしているのは、サブドメインへのHTTP(S)アクセスを特定のIPに制限することです。これらのサブドメインは開発テストに使用されるか、管理ツール(phpMyAdminなど)であるため、これらのサブドメインを公開したくありません。
domain.comも公開したい。
ウェブサイトの現在の状態は:
期待される結果は何ですか:
これはこれまでの私の構成です:
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
になっているため、リダイレクトの質問も解決しました。
サブドメインのルートディレクトリをルートドメインのサブフォルダにしません。の代わりに:
/var/www/html/
- sub1/
- sub2/
- sub3/
私はこのように自分でそれをします:
/var/www/domain.com/
- www/ (the root)
- sub1/
- sub2/
- sub3/
これにより、ファイルへのアクセスを簡単に制限できます。現在の設定では、おそらくアクセスはVirtualHost
によって制限されていますが、ルートドメインを経由して同じデータにアクセスできます:http://www.example.com/sub1/data
。