Skip to content

subdomain

Makoto Yamashita edited this page Mar 7, 2022 · 17 revisions

サブドメインの設定

文責: 山下

概要

サブドメインの追加・設定についての情報です。

Google Domainsでの設定

設定画面について

理工展ではGoogle Domainsでドメインを確保しています。このGoogle Domainsでは100個のサブドメインを作れるとかどっかで見たことがあります。

まず、Google Domainsにてパソ管アカウントでログインします。

サブドメインに関する情報は、「マイドメイン」->「rikoten.com」->「DNS」->「カスタムリソースレコード」に情報があります。

サブドメインの追加

名前に希望するサブドメインの名前、IPアドレスに理工展サーバーのIPアドレス(当該画面の下部に載っているほかのサブドメインと同様)を入力します。

サーバーでの設定

暗号化(letsencrypt)

よくあるサイトは1つの証明書で複数のサブドメインをカバーしますが、理工展ではとりあえず1つのサブドメインに1つの認証ファイルを作っています(certbot certificatesで確認可能)。後述しますがここら辺に関する勘違いと、加えてソフト側の便利さを追求したがゆえの仕様を誤解したことにより、失敗をしてまあまあ焦りました。

Certbotで全部できます。まずはサーバーにログインします。次に証明書を取ります。

まず、sudo certbot certonly --cert-name @@@.rikoten.com -d @@@.rikoten.comで証明書発行。

1: Nginx Web Server plugin (nginx)を選択(1を入力してEnter)

次に、nginxの設定ファイルを作ります。名前は他のファイルに倣って、@@@.confとします。ただ一から書くのは本気でやばいので(やったけどミスタイプが怖くて怖くて、というか1か所ミスっててPHP表示されんかった)、他のファイルをコピーしましょう。

sudo cp tool.conf @@@.conf

あとは@@@.confを編集します。toolになっているところを@@@(新しいサブドメイン)に書き換え、ルートのフォルダの末尾のリポジトリ名を正しいリポジトリ名に変えれば設定ファイルは完成です。 ちなみに、なぜtool.confを選んだかというと、

  • circle.confを使うならlisten 80のあとのdefault_serverは消すこと、これはnginxの中でデフォルトのサーバーがこれですという意味なので2つできるとnginxはエラーを吐く
  • site.confはrikoten.comからwww.rikoten.comへの遷移のコードがあるのでコピーは控えるべき。

ということです。

このときルートフォルダも作っておきましょう。動作テストできた方がいいので。僕の場合は、ルートフォルダにindex.htmlをvimで書きました。Hello, World!!と出た時はうれしかったです!ぜひ感動を味わってほしいので、間違ってもイラっと来る文字にはしないように()

次に、ログの出力先を作ります。ログの出力先のディレクトリを作って、chownでnginxユーザーを所有者にしてください。おそらく/var/log/nginx/@@@/access.logに出力されることになっているので、

cd /var/log/nginx
sudo mkdir @@@
sudo chown nginx @@@

これで解決です。

次に、nginxの設定ファイルを有効化する必要があります。理工展サーバーでは(Wikiのサーバーの項に説明されている通り)、/etc/nginx/sites-enabled/の中のファイルのみ確認します。今あなたはおそらく/etc/nginx/sites-available/rikoten.com/の中に新しいドメインを作ったので、そのファイルに対してシンボリックリンクを作ります。つまり、Windowsで言うショートカットです。

ショートカットを作りたいディレクトリ(/etc/nginx/sites-enabled/)に移動して、sudo ln -s /etc/nginx/sites-available/rikoten.com/@@@.conf @@@.confと書くと、ディレクトリに@@@.confというシンボリックリンクが生成されます。このリンクを開くと、リンク先のファイルが開かれます。

最後にnginxに設定を反映させます。sudo nginx -s reloadで再起動されます。再起動の前に自動で動作確認(sudo nginx -tと同等)を行ってくれて、もし設定ファイルにおかしな点(起動失敗するレベルに致命的なものを含む)があった場合はエラーを言ってくれます。例えばログの出力先のディレクトリがなかったり、そこへの書き込み権がなかったり、設定ファイルの中身の綴りが間違っていて明らかにおかしいオプションが指定されていたりしたら怒られます。認証ファイルが開けない場合も文句を言われます。再起動に失敗してnginxが起動せず、今のサイトにOBに助けてもらえるまでアクセスできないという悲劇は防がれるわけです。さすが。(予期せぬサーバー落ちで強制的に再起動になった場合はつみます。気を付けよう。)

失敗談

sudo certbot --expand -d rikoten.com -d sandbox.rikoten.comで作ったら、rikoten.comの証明書がsandbox.rikoten.comと統合されて新しいrikoten.com-0001という認証ファイルが出来上がったんですよね。sudo certbot certificatesで確認したらそうなっていて、ミスったーと思ってsudo certbot delete --cert-name rikoten.com-0001ってやって、認証ファイルを消して、もう一度別の方法(実はこれも間違っていたのだが…)で試そうとしたら、nginxがエラーはいたんですよ。大焦りですよね。

見てもらって分かったかもですが、無意識にcertbotのあとのcertonlyを消してしまっていたので、certbotが勝手にnginxまで設定しちゃったんですよね。

ファイルの中身が変わっていたのは、circle.confが証明書に新しいsandbox.rikoten.comの設定がされていて、site.confのrikoten.comの設定部分の証明書がrikoten.com-0001に変わっていました。

僕はnginxには設定変更はされていないだろうと思って安易に証明書だけcertbotで消去したのですが、nginxはあるはずの証明書がないということでエラーを出したわけです。

では、なぜcertbotで新しく証明書を作り直そうとして、certbotからnginxに関するエラーが出たのか?それは、もう一度実行した際も僕はcertonlyを抜かしていたんですよね、おそらくその影響で、certbotはnginxに対して「今お前設定変更できる?」と確認を取って、それに対してnginxは「いや、設定ファイルに書いてある証明書が見つからんのだけど」というエラーを吐いたわけです。

しかもそのエラーの内容が、「証明書が見つからないよ!」というエラーだったので、nginxの状態は全く関係ないと思い込んでいた僕はてっきり、certbot側が消去した際に、nginxを落としていなかったせいでcertbot側に何らかの残存ファイルがあるのではないかと大焦りしたわけです。

そのあと冷静に考えて、証明書の場所を指定するのはnginxの設定ファイルだけだと考えて、sudo nginx -tでnginxの状態をテストしたら、certbotの作り直しの時と完全に同じメッセージが出たので、certbotではなくnginx側の問題だけで、設定ファイルが書き換えられたことに原因があると気づきました。

とりあえず一番重要なことを言います。「ソフト側が最悪の事態にはならないように頑張ってくれている、あとは自分を信じて戦い抜け」です。とりあえずソフトは最悪の事態にならないようにしてくれています。状況を冷静に見極める。自分が知っている範囲のエラーが少しひねられただけの可能性も十分にあります。なんか変更を伴う操作のコマンドを打つのではなく、状況確認のコマンドを打ったり、怪しそうなファイルやディレクトリを1つずつ確認すること。変更は状況を把握した後でないと、混乱している状態では危ないです。とにかく落ち着いて。

OBからの返事も来ないと不安になります。でも、事態をひどくしないように、冷静に進めること。状況把握を進めて、もしわかれば自分で操作する、わからなければOBを待つ、といったところです。大丈夫です、nginxが連続で動き続けてさえいれば、変更前の設定で動き続けるわけですし。

参考資料

これ全部読みました、気が狂いそうになりました。1年生の僕にはきつすぎます…。

  • [https://designsupply-web.com/developmentlab/3542/]
  • [https://qiita.com/wynnkengeofu/items/10b5f96b838cbda2f014]
  • [https://teratail.com/questions/150249]
  • [https://laboradian.com/how-to-delete-certificate-with-0001-lets-encrypt/]
  • [https://takuya-1st.hatenablog.jp/entry/2019/03/28/162555]
  • [https://certbot.open-code.club/certonly-standalone.html]
Clone this wiki locally