1つのIPアドレスで複数のドメインや複数の証明書を管理する技術メモ

自分用の雑メモ。

あとで見返すように書いてます。間違ってる可能性が高いです。(なのでnoindexにしてる)

 

たとえば、このブログは「https://penpen-dev.com/blog」というURLでホストしています。

ホスティング先は「Xサーバー X10」という日本のレンタルサーバーです。

このレンタルサーバーは「1つのサーバーを複数人で共有しよう」なサーバーなので、1つのIPだけが存在します。

たとえば、nslookupコマンドで調べてみると👇のようになります。


▲ちなみに8.8.8.8と書いているほうは、DNSフルサービスリゾルバ(DNSキャッシュサーバとも言う)のアドレスです。OSの設定で自分で指定することできます。指定しない場合はISPが指定するやつを使うことになるらしい?

 

Xサーバーの管理画面で見ると、たしかにこのアドレスになっています👇

 

なので、「https://penpen-dev.com/blog」というURLをブラウザに打つと、「そのドメインは162.43.118.121というIPアドレスだよ」という結果がまず返却されます。

そして、ブラウザが次に、このIPアドレスに対して「ページの内容をくれ」とリクエストします。

このリクエストするとき、:authority:疑似ヘッダ(http1.1で言う所のHostヘッダ)を送ることで、「162.43.118.121の中の、アクセスしたいのはこのサイトです」というのを示すことが出来ます。

また、:path:という疑似ヘッダも重要で、これを指定することで「さらにこのサイトの/blog/というパスが見たいです」というのを示すことができます。

 

Apacheでは、VirtualHostという機能で、1つのサーバーで複数のウェブサイトをホスティングできます。

たとえば、以下みたいな感じに書くことで、VirtualHostが有効になります。

<VirtualHost *:443>
ServerName www.example.com
DocumentRoot "/www/example"

SSLEngine on
SSLCertificateFile "/path/to/www.example.com_cert.pem"
SSLCertificateKeyFile "/path/to/www.example.com_key.pem"
SSLCertificateChainFile "/path/to/ca_bundle.pem"
</VirtualHost>

 

ちなみに複数のサイトの証明書を適用する技術のことを、SNI(Server Name Indication)と呼ぶらしいです。

 

おわり

 

 

http
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました