どうも、シローです。
前回はさくらVPSでサーバをレンタルして、SSH接続ができるところまでやりましたね。
今回は
- Apacheを導入してWebサーバを立ち上げる
- Webサービスのドメインを生成する
- Let's Encript で HTTPS化する
- Gitを導入する
をやってみようと思います。
ApacheでWebサーバを立ち上げる
Webサービスを立ち上げるためには、ブラウザでURLにアクセスしたときに、どのファイルをブラウザに返却してあげればいいかを判断して、ブラウザにデータを送るWebサーバの存在が不可欠です。
Webサーバを立ち上げる手順はNginxはApacheなどのソフトウェアを利用したり、プログラミング言語でサーバ構築用のプログラムを自作してそれを立ち上げる方法などがありますが、今回はApacheを使ってWebサーバを立ち上げてみようと思います。
Apacheをインストール
それでは、早速前回立ち上げたサーバにSSH接続して、apacheをインストールしましょう。
OSはubuntuなので、apacheをインストールするにはaptコマンドを使います。
1 |
shiro@shiro-mmm:~$ sudo apt install apache2 |
インストールが終わったら、サーバのIPアドレスを使ってアクセスしてみるとこんな感じの画面にアクセスできます。
curlコマンドでWebサーバの動作確認
ブラウザでアクセスする以外にもコマンドでWebサーバが正しく動いているか確認する方法があります。
その中の一つがcurlコマンドを使用することです。
1 |
shiro@shiro-mmm:~$ sudo apt install curl |
インストールが済んだら、下のコマンドを実行してみてください。
1 2 |
shiro@shiro-mmm:~$ curl localhost |& grep title <title>Apache2 Ubuntu Default Page: It works</title> |
Apacheのバージョン情報を隠す
試しに立ち上げたWebサービスの存在しないページにアクセスしてみると。こんな感じの404のページが表示されます。
これだと、apacheのバージョンの他にOSの種類まで、表示されてしまっているので、脆弱性の隙をついて攻撃する人に余計な情報を渡してしますのでよろしくありません。
なので、/etc/apache2/apache2.confを以下のように編集して、消してしまいましょう。
1 2 3 4 5 6 7 |
shiro@shiro-mmm:~$ sudo vim /etc/apache2/apache2.conf .... # vim: syntax=apache ts=4 sw=4 sts=4 sr noet ServerSignature Off # On から Offにする ServerTokens ProductOnly # 詳しくないけど、これも書いといたほうがいいらしい shiro@shiro-mmm:~$ sudo service apache2 restart // apacheを再起動して、変更を反映 |
ちゃんと消えれば、反映完了です。
お名前.comでドメインを取得する
立ち上げたWebサイトにアクセスするためには、サーバのIPアドレスをブラウザに入力すると行けますが。
数字の羅列で、他の人は(自分も含めてだと思うけど)いちいち覚えてられません。また、IPアドレス直でしかアクセスできないサイトはgoogleとかの検索にものらないので、他の人がそもそも見ることができない状態になっています。
なので、IPアドレスに他の人に覚えてもらいやすい名前をつけてあげましょう。そのIPアドレスのあだ名がドメインとなります。
もちろん、このドメインは全国のWebサイトの中で唯一のものになるので、無料でホイホイ作れるとあっという間に割振れるものがなくなっちゃうので、有料になってます。
今回は、ドメインをお名前.comで取得してサーバのIPアドレスと紐づけてみましょう。
コンソール画面に入って、ドメインを申請する
お名前.comに入って、アカウント登録を済ませたら。ドメインを申請しましょう。
下の画面から、使いたいドメインの名前を使えるか検索しましょう。
検索にヒットしたら、申請しましょう。お試しなら「.work」が安くていいですね。
あとは、道なりに進んで行けば購入完了です。
ドメイン一覧で確認したら、こんな感じになります。
DNSレコードを作成して、ドメインとIPアドレスを紐づける
ドメインを取得しても、契約したサーバのIPアドレスと紐付けをしないと、アクセスができません。
お名前.comはドメインを取得するだけではなく、ドメインとIPアドレスを紐づけるサービスDNS(Domain Name System)を提供しているので、今度はこれを使って、IPアドレスとの紐付けを行いましょう。
コンソール画面のDNS一覧を開いてみましょう。
ドメインを選択して、次の画面に進むとDNSレコード作成画面に進みます。
DNSのAレコードを作成する
DNSでは、ドメインとIPアドレスとの紐付け情報などをレコードという単位で管理しています。
レコードには、「ドメインとIPアドレスの紐付け情報であるAレコード」や、「ドメインとその別名(あだ名)の紐付け情報であるCNAMEレコード」など、色々な種類があります。(その辺の情報はまた、別の機会でまとめたいな)
今回は、ドメインとIPアドレスの紐付けを行いたいので、Aレコードを作成します。
レコード作成画面で下の赤枠のところで、ホスト名のところに先ほど購入したドメインを、VALUEのところにVPSのIPアドレスを入力して追加しましょう。
これで、ドメインとIPアドレスの紐付けが完了しました。
Let's EncriptでHTTPS化を行う
通常、ブラウザでWebサイトを閲覧するときにはWebサーバとブラウザの間でデータの送受信が行われます。その通信の規約みたいなものがHTTPであり、通称HTTP通信と呼ばれます。
ただ、この通信で送受信されるデータは、どんな情報なのかが筒抜けになっているので無関係な人が閲覧できたり、場合によっては改ざんできることもあり得てしまいます。
そのため、多くのWebサービスではこの通信情報を暗号化することによって、データを受け取る側以外には理解できない情報にして通信する方式が勧められています。この通信方式をHTTPSといい、通称HTTPS通信と呼ばれます。(SはSecureの意味)
Let's Encriptとは
HTTPS通信をするためには、データを暗号化させるための暗号鍵とそれを復号化させるための復号鍵が必要です。
その鍵の情報を使って、HTTPS化するのですが、手順が色々複雑で難しいところがあります。
ただ、Let's Encriptというサービスを使うと、無料でHTTPS化をサーバないで完結することができます。
Let's Encriptのインストール
サーバにSSHで入ると、まずはApacheの設定ファイルをコピーしてドメイン用のファイルを作成します。
1 2 |
shiro@shiro-mmm:~$ cd /etc/apache2/sites-available/ shiro@shiro-mmm:/etc/apache2/sites-available$ cp 000-default.conf shiro-mmm.conf |
コピーしたら、次のコマンドでLet's encriptに必要なモジュールをインストールします。
1 |
shiro@shiro-mmm:~$ sudo apt install letsencrypt python-certbot-apache |
インストールが完了したら、次のコマンドでLet's encriptでHTTPSに必要な情報を取得します。
1 |
shiro@shiro-mmm:~$ sudo letsencrypt --apache |
複数の設問が問われますが、HTTPをHTTPSにリダイレクトするかどうかという設問には「Redirect」を選択しましょう。
Entry email address | ご使用のEmailアドレス |
Please read the Terms of Service at ... | Agree |
Would you be willing to share your email address ... | 任意 |
Which names would you like to activate HTTPS for ? | 表示されているホスト名を選択 |
Please choose whether or not to redirect HTTP trafic to HTTPS | Redirectを選択 |
Apacheを再起動して、ブラウザに取得したドメイン(https://ホスト名)でアクセスすると、無事HTTPSの鍵のマークが表示されていると思います。
また、先ほどapacheの設定ファイルのディレクトリ(etc/apache2/site-available)にアクセスすると、コピーしたドメイン用の設定ファイルの他に、SSL(暗号化)通信用の設定ファイル(ホスト名-le-ssl.conf)が作成されています。今後はこのファイルを編集します。