はじめに
作成したサイトにせっかくドメイン名を付与しても、サイトにIPアドレスでアクセスできると「IPアドレスでアクセスした際のURL」がGoogleなどにキャッシュされてしまうことがあります。
「IPアドレスでアクセスした際のURL」がキャッシュされてしまうと、検索エンジン側でコンテンツが重複しているとみなされてしまい、SEOにも影響が出る可能性があります。
そこで今回は、IPアドレスによるアクセスを防ぐための方法をまとめてみました。
テストに使用した環境
AWS上のサーバーを利用しました。
- OS
- Amazon Linux 2
- Apache
- 2.4.51
事前作業
Apacheのインストール
- ApacheとTomcatを連携させるに書かれているように、yumコマンドでインストールしました。
Webサイトのドキュメントルート
- Apacheのデフォルトのまま、
/var/www/html
にしています。
ドメインの取得
- 今回は割愛します。
Apacheの設定変更
VirtualHostの設定ファイルの作成
-
/etc/httpd/conf.d
以下に、vhosts.conf
という設定ファイルを作りました。 - ファイル名の末尾が
.hosts
であれば読み込んでくれるそうなので、必ずしも同じ名前(vhosts.conf
)にする必要はありません。 - VirtualHostディレクティブで指定したドメイン名に合致するものが無い場合(※ここではIPでアクセスされた場合)は、「403 Forbidden」が返されるように設定します。
[ec2-user@ip-10-0-1-102 ~]$ cd /etc/httpd/conf.d/
[ec2-user@ip-10-0-1-102 conf.d]$ sudo vi vhosts.conf
--------------------------------------------------------------------------------
<VirtualHost *:80>
ServerName any
<Location />
Order Deny,Allow
Deny from all
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerName {ドメイン名}
DocumentRoot "/var/www/html"
</VirtualHost>
--------------------------------------------------------------------------------
設定ファイルの内容の確認
- 念のため、設定ファイルの記述(構文)が正しいかを確認しておきます。
[ec2-user@ip-10-0-1-102 conf.d]$ sudo apachectl configtest
Syntax OK
設定の反映
- Apacheを再起動して設定を反映します。
[ec2-user@ip-10-0-1-102 conf.d]$ sudo systemctl restart httpd
動作確認
- curlコマンドを使って、ドメインだとコンテンツを正常に取得できる(HTTP STATUS=200)ことと、IPだとコンテンツを取得できない(HTTP STATUS=403)ことを確認します。
[ec2-user@ip-10-0-1-102 conf]$ curl -I http://{ドメイン名}
HTTP/1.1 200 OK
...
[ec2-user@ip-10-0-1-102 conf]$ curl -I http://{IPアドレス}
HTTP/1.1 403 Forbidden
...