rosh-1228のメモ

自身の勉強したことをメモしてます。

NginxでVirtualHostを設定した

今回やったこと

  • nginxのVirtualHostを使ってhtmlを表示
  • www.○○○.net○○○.netの複数ドメインを使って自身のhtmlを表示

前提条件

参考

設定は以下3つのサイトを参考させていただきました。 大変助かりました!

概要

ざっくりと書くと以下の順番で設定

  1. お名前.comでドメインを取得
  2. さくらインターネットドメインの登録を行い、ネームサーバの確認
  3. お名前.comでネームサーバの設定
  4. nginxでvirtualhostの設定

アクセスするときの概要を図にするとこんな感じ f:id:rosh-1228:20210804084421p:plain

お名前.comでドメインを取得

お名前.comドメインを取得する。 今回は安くなっていた.netドメインを取得した。

さくらインターネットでネームサーバを確認

さくらインターネットの会員メニューへログイン

契約中のドメイン一覧をクリック

f:id:rosh-1228:20210804085349p:plain

ドメインメニューをクリック f:id:rosh-1228:20210804085514p:plain

ドメインメニューからネームサーバ新規登録をクリック f:id:rosh-1228:20210804085814p:plain

ドメインメニューにお名前.comで取得したドメインを入力し、送信をクリック

f:id:rosh-1228:20210804090042p:plain

管理ドメインとネームサーバの一覧でさっき登録したドメインが表示されているので、ゾーン編集をクリック f:id:rosh-1228:20210804090300p:plain

サーバのIPアドレスを入力して送信するをクリック f:id:rosh-1228:20210804090744p:plain

ネームサーバが2つ表示されている(タイプNSの行に表示されている)ので、これをお名前.comのネームサーバ設定で使う

お名前.comでネームサーバの設定

お名前ドットコムnaviにアクセスし、ドメイン機能一覧をクリック f:id:rosh-1228:20210804091115p:plain

ネームサーバの変更をクリック

f:id:rosh-1228:20210804091225p:plain

ドメイン名にチェックを入れ

f:id:rosh-1228:20210804091348p:plain

「2.ネームサーバの選択」-「その他」をクリックし、さくらインターネットで確認したネームサーバを2つ入力し、下にある確認ボタンをクリック f:id:rosh-1228:20210804091508p:plain

これで自身の端末(自分はmac)でnslookupで名前解決されていることを確認。

server can't find ○○○.net: SERVFAILと表示された場合、さくらインターネットかお名前.comで設定の反映に時間がかかっていると思われる。

自分の場合は15分くらいまって再度nslookupを実行すると名前解決された。

nginxでvirtualhostの設定

お名前.comをさくらインターネットの設定が完了したので、nginxの設定をしていく。

virtual host用のデータ配置用のディレクトリを作成

sudo mkdir /home/demo/public_html

公開用ディレクトリやログ用のディレクトリを作成

sudo mkdir -p /home/demo/public_html/○○○.net/public
sudo mkdir -p /home/demo/public_html/○○○.net/log

publicの下に○○○.netにアクセスした時に表示させたいindex.htmlを作成(中身はなんでも)

sudo vi /home/demo/public_html/○○○.net/public/index.html

virtual hostの設定ファイルを作成

sudo vi /etc/nginx/sites-available/○○○.net

内容は以下のような感じで、2つのserverコンテキストにあるserver_nameにそれぞれ表示させたいドメインを書く /usr/share/nginx/html/var/log/nginxはnginxをインストールしたときにデフォルトディレクト

server {
      listen 80;
      server_name www.○○○.net;
      access_log /var/log/nginx/access.log;
      error_log /var/log/nginx/error.log;
      location / {
                 root /usr/share/nginx/html;
                 index index.html;
                 }
       }
server {
      listen 80;
      server_name ○○○.net;
      access_log /home/demo/public_html/○○○.net/log/access.log;
      error_log /home/demo/public_html/○○○.net/log/error.log;
      location / {
                root /home/demo/public_html/○○○.net/public/;
                index index.html;
                }
      }

nginxが設定を読み込んでくれるようにシンボリックリンクを作成

sudo ln -s /etc/nginx/sites-available/○○○.net /etc/nginx/sites-enabled/○○○.net

/etc/nginx/nginx.confの下の方にあるincludeに以下の設定をする

#コメントアウトしているのは、デフォルトの設定

自分は今回コメントアウトした

#include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

最後にnginxサービスを停止・起動する

sudo service nginx stop
sudo service nginx start

これでwww.○○○.netでも○○○.netのどちらでもそれぞれのhtmlが表示できるようになった。