Web制作、Web開発の歩き方

Linux Essentials for Web Developers

第8話:WebサーバーとLinux: Apache/Nginxのセットアップ

(最終更新日:2024.1.04)

Linuxのイメージ
この記事は5分で読めます!
(絵が小さい場合はスマホを横に)

「Linux上でWebサーバーを動かそう」

Linux上でWebサーバーを動作させるには、ApacheやNginxといったソフトウェアをセットアップする必要がある。 今回は、インストールから基本的な設定、セキュリティ設定、パフォーマンスの最適化と実用で必要な部分にフォーカスして説明する。


1.Webサーバーの基本設定

Webサーバーのセットアップと基本設定にはいくつかの重要なステップがある。 ここでは、Linuxシステム上で最も一般的なWebサーバーソフトウェアであるApacheとNginxの基本的な設定について説明する。

Apacheのインストールは、Debian/Ubuntu系では「sudo apt install apache2」、 Red Hat/CentOS系では「sudo yum install httpd」になる。

主要な設定ファイルの場所は、Debian/Ubuntu系では/etc/apache2/apache2.conf、 Red Hat/CentOS系では/etc/httpd/httpd.confになる。 また、サイトごとの設定は、Debian/Ubuntu系では/etc/apache2/sites-availableディレクトリ内のファイル、 Red Hat/CentOS系では/etc/httpd/conf.d/ディレクトリ内のファイルになる。

これらの設定ファイル中で、ドキュメントルートの設定、ServerNameの設定、ポート番号の設定を行う。 Apacheの場合は「DocumentRoot /var/www/html」「ServerName example.com」「Listen 80」になる。 Nginxの場合は「root /usr/share/nginx/html;」「server_name example.com;」「listen 80;」になる。

設定を反映させるには、Webサーバーを再起動させる必要があるので、そこだけ注意しよう。 加えて、Webサーバー用のポート(80番と443番)がファイアウォールで解放されていることを確認する。 ファイアウォールの設定は、ufwかiptablesというツールで行うことが多い。 それぞれ設定方法が異なるので、調べて設定しよう。

Webサーバーをインストール、初期設定する

また、セキュリティ設定も必要だ。 安全なWebサーバー運用のために、SSL/TLS証明書の設定やセキュリティヘッダの設定など、セキュリティ関連の設定を行おう。 難しければ、この部分は外注化することも検討しよう。下記には、ApacheにおけるSSL/TLSの設定、セキュリティヘッダーの設定例を紹介する。 /etc/apache2/sites-available/ 内の適切なサイト設定ファイル(例: 000-default.conf)で以下の設定を行うことで実現できる。

ApacheにおけるSSL/TLSの設定
セキュリティヘッダーの設定例


2.セキュリティとパフォーマンスの最適化

■セキュリティ設定
ここでは、Let's Encryptを使用してSSL/TLS証明書を設定するプロセスを説明する。 無料で安全なHTTPS接続を実現するための効果的な方法だ。 以下はLet's Encrypt証明書をApacheやNginxに設定する基本的なステップになる。

Let's Encryptの証明書を取得および更新するために、Certbotを使用する。 Debian/Ubuntu系で説明すると「sudo apt-get update」「sudo apt-get install certbot」でCertbotをインストールできる。 そして、Certbotを使用して、証明書を取得およびインストールすることができる。 「sudo certbot --apache -d example.com」でCertbotは自動的にApacheの設定を調整し、SSL/TLS証明書を適用する。

上記のコマンドで、Let's EncryptでのSSL/TLS証明書を設定できるが、90日間の有効期限がある。 基本的にCertbotは自動的に更新を行ってくれるが、心配な人は「sudo certbot renew --dry-run」で 自動更新がうまく動くか確認できるので、見ておこう。 「The dry run was successful.」と返答があれば、確かに自動更新ができることを示す。

Certbotは自動的に設定をしてくれるが、正しい設定を行わないと、うまく動いてくれない。 以下の点は事前に確認しておこう。

  1. ドメイン名が正しくDNSに登録されていること
  2. ファイアウォールやセキュリティグループの設定で、HTTPS(ポート443)が開放されていること
  3. ウェブサーバーの設定ファイルは、Certbotによって自動的に編集されるが、その内容を確認して問題がないこと

加えて、SSL/TLSの設定では、リダイレクトを設定して、すべてのHTTPトラフィックをHTTPSに転送することを行うと良い。 全ての人に安全な接続でサイト利用してもらうことができる。 また、ApacheやNginxで下記の設定も行っておこう。設定方法自体は調べればすぐ出てくる。

  1. 不要なモジュールの無効化:使用しないモジュールは無効化することで、攻撃面を減少させる
  2. ディレクトリリスニングの無効化:特定のディレクトリに含まれるファイルとサブディレクトリの一覧を表示させず、不要な情報漏洩を防ぐ
  3. サーバーシグネチャの非表示:サーバーのソフトウェア名、バージョン、OS情報をHTTPレスポンスのヘッダーに含ませないようにし、余計な情報を与えないようにする
  4. セキュリティヘッダーの設定:クロスサイトスクリプティングやクリックジャッキングなどの攻撃を防ぐ

■パフォーマンス設定
セキュリティに加えて重要なのが、パフォーマンスの最適化である。 下記の4点を設定すると良い。 表示速度はユーザーエクスペリエンスに直結する内容だ。特にサイズの大きい画像サイズの最適化は行っておこう。

  1. Gzip、Brotli圧縮の採用:これらの圧縮を有効にすることで、HTML、CSS、JavaScriptのデータ転送量を削減する
  2. キャッシングの設定:静的コンテンツ(画像、CSS、JavaScriptファイルなど)のキャッシングを有効にし、リピートビジターのロード時間を短縮する
  3. Keep-Aliveの有効化:複数のリクエストが同じTCP接続を再利用できるようにし、接続のオーバーヘッドを減少させる
  4. 画像サイズの最適化:画像のファイルサイズは、最適化ツールを用い画質を保ったままサイズを半分程度に削減する

セキュリティ設定とパフォーマンス最適化

3.まとめ

今回はWebサーバーの設定について解説した。 Webサーバーを運用するうえで、セキュリティや表示パフォーマンスは特に気を付けたい部分である。 今回紹介した内容を踏まえて、安全で快適なWebサイトをユーザーに提供できるように心がけよう。

▼参考図書、サイト

 「スーパーユーザーなら知っておくべきLinuxシステムの仕組み」 インプレス Brian Ward, 柴田 芳樹
 「Linux再入門―カーネル、シェル、ファイルといった基本概念を理解してトラブルシューティング力を高めよう」 Udemy しま