外からのドメイン名(ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com)を指定した場合とサーバー内部からのlocalhostによる実行の際にDocumentRootを分けることをやってみたのでメモ。
やりたいこと
- 外からのドメイン名(ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com)を指定した場合にはAというDocumentRootとする
- localhostからの接続の場合にはBというDocumentRootとする
結論
- serverディレクティブにserver_nameもしくはlisten(もしくはその両方)を記載することでDocumentRootを変えることが出来る
- localhsotからの接続は
listen 127.0.0.1
というようにせってていすれば良い
準備
適当にEC2を起動する。PublicDNSが設定されてインターネット越しにアクセスできるものとする。
以下でnginxをインストールし、起動
$sudo yum install nginx -y
$sudo service nginx start
また、色々面倒なのでhttpdをインストールして、もう一つDocumentRootを作成し、ファイルも置いておく。
$sudo yum install httpd
$sudo echo "hello" | sudo tee /var/www/html/index.html
やってみる
設定ファイルで以下を変更します。
- EC2でデフォルトで当てられるホスト名は長いため、server_names_hash_bucket_sizeを128に変更(設定しないとエラーになります)
- 1つ目のserverディレクティブでlocalhost(127.0.0.1)からの80ポートでのアクセス時に適用されるVirtualHostの設定を行う。こちらではDocumentRootとしてnginxデフォルトの/usr/share/nginx/htmlとする
- 2つ目のserverディレクティブでec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.comの80ポートでのアクセス時に適用されるVirtualHost設定を行う。こちらではDocumentRootとしてhttpdデフォルトのDocumentrootの/var/www/html/とする
/etc/nginx/nginx.conf
http {
+ server_names_hash_bucket_size 128;
server {
- listen 80;
+ listen 127.0.0.1:80;
- server_name localhost;
+ #server_name localhost;
}
- #server {
- # listen 8000;
- # listen somename:8080;
- # server_name somename alias another.alias;
- # root html;
- # location / {
- # }
- #}
+ server {
+ listen 80;
+ server_name ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com;
+ root /var/www/html;
+ location / {
+ }
+ }
nginxを起動します。
$sudo service nginx start
この状態でlocalhsotから接続するとnginxデフォルトDocumentRootのnginxの初期画面の情報が取得できます。
$curl http://localhost/
また、自身のPCからPublicDNSでブラウザからアクセスするとhelloとだけ表示されるHTMLが返却され、アクセス元でDocumentRootを分ける事ができました。