はじめに
目的
この章では、本書の狙いと読み進め方をやさしくご説明します。Linux環境でWebサーバーを構築すると、安定したサイト運用や柔軟な設定が可能になります。本書はその手順と注意点を順を追って解説します。
何を学べるか
Ubuntu、CentOS、AlmaLinuxなどの代表的なディストリビューションで、ApacheやNginxを導入・設定する方法を扱います。SSL(HTTPS)対応、セキュリティ対策、複数サイトの運用(バーチャルホスト/サーバーブロック)、およびトラブルシューティングまでカバーします。具体例を交えて初心者にも分かりやすく説明します。
対象読者
・これから自分のサーバーを立てたい方
・レンタルサーバーより自由に設定したい方
・基礎から学び直したい中級者
前提
基本的なコマンド操作(ファイル編集、サービスの起動・停止)ができると学習がスムーズです。必要なソフトは章ごとに具体的に案内します。
読み方のヒント
各章は手順に沿っています。まず全体を把握してから、使うディストリビューションとソフトに合わせて該当章を順番に実行してください。
LinuxでWebサーバーを構築するメリット
概要
Linux上でWebサーバーを立てると、用途や予算に合わせて自由に構成できます。オープンソースが中心で基本的に無償で使え、安定性やセキュリティも高めやすい点が特徴です。
コストを抑えられる
Linux自体と多くのWebサーバーソフトは無料で利用できます。例えば、個人のブログや社内の小さなサービスなら、ライセンス費用をほとんどかけずに構築できます。
柔軟にカスタマイズできる
必要な機能だけを入れ、不要な機能は外せます。軽量化して古いハードウェアで動かしたり、大規模向けにチューニングして高負荷に耐える構成にしたりできます。
安定性とセキュリティを高めやすい
Linuxの設計は安定性を重視します。更新や設定で不要なサービスを切り、アクセス制限や自動更新を組み合わせると安全に運用できます。
情報・ツールが豊富
設定例やトラブル解決の情報が多く、スクリプトや自動化ツールも揃っています。定期バックアップやデプロイの自動化がしやすい点も利点です。
活用例と注意点
個人サイト、テスト環境、社内サービス、商用サイトまで幅広く使えます。注意点は定期的な更新とバックアップ、適切な権限管理が必要なことです。運用は手間がかかりますが、その分自由度とコスト効果があります。
構築前の準備
はじめに
Webサーバー構築を始める前に、OS選定・ハードウェア・ネットワークの確認を行います。準備を整えると後が楽になります。
ディストリビューション選定
- Ubuntu(LTS): 初心者向けでパッケージが豊富です。長期サポート版を推奨します。
- AlmaLinux / Rocky Linux: RHEL互換で安定性重視のサーバー向けです。
- CentOS Stream: 開発寄りの流れを追う場合に向きます。
- MX Linux: 軽量でデスクトップ用途向けですが、学習用や低スペック環境で使えます。
用途(学習・運用・商用)に応じて選んでください。
必要スペック確認
- 軽めのサイト: CPU 1〜2コア、メモリ 1〜2GB、ディスク 20〜40GB。
- 中規模: CPU 2〜4コア、メモリ 4〜8GB、ディスク 50〜200GB。
実際はアクセス量と保存するデータ量で決めます。SSDを使うと応答が速くなります。
ネットワーク環境の確認
- グローバルIP(公開用): インターネットから直接アクセスするなら必要です。動的IPの場合はDDNSを検討してください。
- ローカルIP(内部): 社内ネットワークやルーター設定で確認します。
- ファイアウォール設定: HTTP(ポート80)とHTTPS(ポート443)を開ける必要があります。SSH(ポート22)は管理用に開け、IP制限や公開鍵認証を使うと安全です。
チェックリスト(簡易)
- 使用目的を決める(学習/公開/商用)
- ディストリ選定とISO入手
- 必要スペックの確保(コア数・メモリ・SSD)
- グローバルIPの有無確認とDNS準備
- ファイアウォールとSSHの基本設定
以上を確認してからインストールへ進んでください。
主要Webサーバーソフトの選択
概要
代表的なWebサーバーには Apache、Nginx、LiteSpeed があります。用途や環境によって向き不向きがあるため、特徴を押さえて選ぶことが重要です。
Apache
- 長所:モジュールが豊富で拡張しやすく、設定も柔軟です。LAMP構成での利用例が多く、初心者向け情報が豊富です。
- 短所:プロセスモデルによりメモリ消費が増えやすく、高負荷時の効率はNginxより劣ることがあります。
Nginx
- 長所:イベント駆動で軽量・高速です。静的ファイル配信や高同時接続に強く、リバースプロキシとしても便利です。
- 短所:設定方法や一部のモジュールでApacheと異なるため、移行時に設定を書き換える必要があります。
LiteSpeed
- 長所:商用に近い高機能で高速です。特にWordPressなどPHPベースのサイトで効果を発揮します。
- 短所:商用ライセンスが必要な機能があり、コストがかかる場合があります。
比較のポイント(実務目線)
- 性能:静的配信はNginx、動的処理はLightSpeedや最適設定のApacheが有利です。
- メモリ:Nginx が最も効率的です。
- 互換性:Apache はモジュールや.htaccess対応で互換性が高いです。
- サポート・コスト:オープンソースは無料でコミュニティが活発。商用版は有償サポートを受けられます。
選び方の指針
- 初心者や既存のLAMP環境なら Apache
- 高トラフィックや静的コンテンツ中心なら Nginx
- WordPressや高性能を重視し、予算があれば LiteSpeed
導入前に使用するOSや制約、予算を確認してから決めると失敗が少ないです。
Apacheを使ったWebサーバー構築手順
概要
CentOS/AlmaLinuxでApache(httpd)を使い、基本的なWebサーバーを立ち上げる手順を示します。最小限のコマンドで動作確認まで行います。
前提
- rootまたはsudo権限を持つユーザーであること
- ネットワーク経由でサーバーのIPにアクセスできること
1) インストール
sudo yum install -y httpd
2) サービス起動と自動起動設定
sudo systemctl start httpd
sudo systemctl enable httpd
3) ファイアウォールの許可
sudo firewall-cmd –permanent –add-service=http
sudo firewall-cmd –permanent –add-service=https
sudo firewall-cmd –reload
(firewalldを使っていない場合は環境に合わせて設定します)
4) ドキュメントルートとサンプルページ作成
デフォルトの公開フォルダは /var/www/html です。
sudo chown -R apache:apache /var/www/html
cat <<‘EOF’ | sudo tee /var/www/html/index.html
Apache is working
EOF
5) 動作確認とログ確認
- ブラウザで http://<サーバーのIP>/ にアクセスします
- サービス状態: sudo systemctl status httpd
- アクセスログ: /var/log/httpd/access_log
- エラーログ: /var/log/httpd/error_log
6) 設定変更時の注意点
設定ファイルを編集したら、構成チェックと再読み込みを行います。
sudo apachectl configtest
sudo systemctl reload httpd
付記(SELinux)
SELinuxが有効な場合、書き込み権限やコンテキストで止まることがあります。公開フォルダに書き込みを許可する例:
sudo chcon -R -t httpd_sys_rw_content_t /var/www/html
以上が基本手順です。さらに複数サイト運用やSSL導入は別章で説明します。
Nginxを使ったWebサーバー構築手順
概要
Ubuntu/Debian系(ラズパイ含む)でNginxを使ってWebサーバーを立ち上げる手順をまとめます。基本はインストール→ファイアウォール設定→(必要なら)PHP連携→動作確認です。
インストール
- パッケージ情報を更新します。
sudo apt update - Nginxをインストールし、自動起動を有効にします。
sudo apt install nginx
sudo systemctl enable –now nginx
ファイアウォール設定
UFWを使う場合はHTTPを許可します。
sudo ufw allow ‘Nginx HTTP’
または
sudo ufw allow 80/tcp
PHP(php-fpm)連携
PHPで動かすならphp-fpmを入れます。
sudo apt install php-fpm php-mysql
Nginxの設定ファイル(例: /etc/nginx/sites-available/default)でPHPの処理部分を有効にします。主な設定例:
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock
}
phpのソケット名は環境で変わるので /run/php/ を確認してください。
所有権と権限
ドキュメントルート(例: /var/www/html)の所有者をwww-dataにします。
sudo chown -R www-data:www-data /var/www/html
動作確認
/var/www/htmlにinfo.phpを作り、ブラウザでhttp://サーバーIP/info.phpにアクセスしてPHP情報画面が出れば成功です。Nginxの設定を変更したら、必ず構文チェックと再読み込みを行います。
sudo nginx -t && sudo systemctl reload nginx
注意点
- PHPバージョンやソケット名は環境で異なります。まずファイル位置を確認してください。
- 本番ではinfo.phpは公開しないでください。
複数サイト運用(バーチャルホスト/サーバーブロック)
概要
1台のサーバーで複数のサイトを公開するとき、Apacheは「バーチャルホスト」、Nginxは「サーバーブロック」を使います。名前(host名)で判別する方法が一般的です。
Apacheの基本手順
- 設定ファイルを配置: /etc/httpd/conf.d/(CentOS系)または /etc/apache2/sites-available/(Debian系)。
- 有効化: Debian系では a2ensite サイト名.conf を実行して sites-enabled にリンクします。
- 例(簡略):
ServerName example.com
DocumentRoot /var/www/example
ErrorLog /var/log/apache2/example_error.log - 設定後は systemctl reload apache2(または httpd)で反映します。
Nginxの基本手順
- 設定ファイルを /etc/nginx/sites-available/ に置き、sites-enabled に ln -s でリンクします。
- 例:
server {
listen 80;
server_name example.com;
root /var/www/example;
access_log /var/log/nginx/example_access.log;
} - systemctl reload nginx で反映します。
テストと注意点
- ローカル確認は /etc/hosts に host名を追加してブラウザで確認します。
- 各サイトごとにログと所有権を分け、ファイル権限を適切に設定してください。
- ポート競合や server_name の重複に注意します。SELinuxやファイアウォール設定が影響する場合があります。
SSL/TLS(HTTPS)対応
概要
WebサイトをHTTPS化すると通信が暗号化され、閲覧者の情報を守れます。無料で使えるLet’s Encryptが一般的です。certbotというツールで証明書を取得・更新します。
Let’s Encryptでの導入手順(簡潔)
- ポート確認: サーバーの80番(HTTP)と443番(HTTPS)を開けます。
- certbotの導入: Debian/Ubuntuなら
sudo apt install certbotを実行します。 - 証明書取得: Apacheなら
sudo certbot --apache -d example.com、Nginxならsudo certbot --nginx -d example.comを使います。certbotが自動で設定を更新します。
Apache / Nginxの設定例
- Apache: 設定ファイルに
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
を指定します。 - Nginx: サーバーブロックに
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
を追記します。
自動更新と確認
certbotはsystemdタイマーやcronで自動更新を設定します。手動で確認するには sudo certbot renew --dry-run を実行します。更新後はWebサーバーをリロードしてください。
よくある注意点
- ファイアウォールで80/443を許可すること。
- HTTPからHTTPSへリダイレクトを設定して常時暗号化を有効にすること。
- HSTSを使う場合は慎重に設定してください(誤設定でアクセス不能になる恐れがあります)。
上記でほとんどの環境はHTTPS化できます。必要なら具体的な環境(OSやWebサーバー)を教えてください。
セキュリティ強化
この章では、Linuxサーバーで実施すべき基本的なセキュリティ対策を分かりやすく説明します。各項目はすぐ実行できるものを中心にしています。
ファイアウォール
必要なポートだけを開放します。Webなら80/443、管理用はSSHのみなど役割を限定します。ufwやfirewalld、nftablesなどを使い、デフォルトで拒否にしてから許可ルールを追加すると安全です。SSHは接続元IPを絞るか、ポート変更や鍵認証にして不正アクセスを減らします。
SELinux / AppArmor
可能なら有効にして、プロセスの振る舞いを制限します。設定変更や一時的な無効化が必要な場合は、影響範囲を確認してから行ってください。
定期的な更新
OSとサーバーソフトは定期的に更新します。自動更新や週次の確認を習慣化すると脆弱性対策になります。
不要なサービスの停止
使わないサービスは停止・無効化、不要ならアンインストールします。例:telnet、ftp、使っていないデーモン
SSH と認証強化
パスワード認証を無効にして鍵認証に切替え、rootログインを禁止します。fail2ban等でログイン試行を制限すると効果的です。
ファイル権限と所有者
Web公開ディレクトリの所有者と権限を適切に設定し、世界書込可能を避けます。アップロード機能は別ユーザーで処理すると安全です。
監視とログ管理
ログを定期的に確認し、異常を検知する仕組み(ログ監視、通知)を導入します。ログローテーションとバックアップも忘れずに。
追加対策(任意)
侵入検知ツール(AIDE、rkhunter)、WAF、バックアップの暗号化などを導入するとさらに安心です。
チェックリスト:
– 必要ポートのみ開放
– SELinux/AppArmorの確認
– 定期更新の実施
– 不要サービスの削除
– SSH鍵認証とfail2ban
– 権限・所有者の最小化
– ログ監視とバックアップ
トラブルシューティング
ログの確認
まずログを確認します。Apacheは/var/log/httpd/、Nginxは/var/log/nginx/にエラーログとアクセスログがあります。tail -f /var/log/nginx/error.logのようにリアルタイムで追い、発生時刻とメッセージを照合します。journalctl -u nginx -xeでsystemdのログも確認します。
設定の文法チェック
設定ミスはよくある原因です。Apacheはapachectl configtest、Nginxはnginx -tで文法チェックします。エラーが出たら該当ファイルの行番号を修正して再テストします。
ポートとファイアウォール
ポートが開いているか確認します。ss -tulpn | grep :80やss -tulpn | grep :443で待ち受け状態を見ます。ファイアウォールはufw status、firewall-cmd --list-allやiptables -Lで確認し、必要なポートを許可します。
サービスの状態確認と再起動
systemctl status nginxやsystemctl status httpdでプロセス状態を確認します。設定を直したらsystemctl restart nginx等で再起動します。起動できない場合はjournalctl -u <service> -bで詳細ログを調べます。
パーミッション・SELinux・所有者
ドキュメントルートの所有者と権限を確認します。ls -lで確認し、必要ならchown/chmodで修正します。SELinuxが有効ならコンテキストが原因のことがあります。sestatusで状態を確認し、restorecon -R /path/to/siteなどで修正します。
リソースとディスク
メモリ不足やディスク満杯はサービス障害を招きます。df -hで空き容量、free -mやtopでメモリ状況を確認します。必要なら不要ファイルを削除したり設定でプロセス数を調整します。
よくあるエラーと対処例
- 403 Forbidden: ドキュメントルートの権限やIndex設定を確認します。SELinuxも確認します。
- 500 Internal Server Error: CGIやPHPのログを見てスクリプトのエラーを修正します。
- 502/504: バックエンド(php-fpmやアプリサーバー)の起動・タイムアウト設定を確認します。
以上を順に確認すると原因に辿り着きやすくなります。問題が残る場合は、ログの具体的な行や設定ファイルの該当部分を手元で確認してください。
便利な応用・発展例
WordPressなどCMSの導入
Webサーバー上にWordPressを入れることで簡単にブログやサイトが作れます。MariaDB/MySQLとPHP(またはPHP-FPM)を組み合わせ、ドメインとSSLを設定すれば運用開始です。テーマやプラグインで機能を拡張できますが、定期的なバックアップと更新を忘れないでください。
自宅サーバー・Raspberry Pi・仮想環境
Raspberry Piは低消費電力で試作に向きます。自宅運用ならルーターのポート開放やダイナミックDNSを使います。VirtualBoxやOCIなどの仮想環境はテスト用に便利で、本番と同じ構成を試せます。電源とバックアップ計画は必須です。
LAMP/LNMPの一括構築
スクリプトや構成管理(簡単なAnsibleやbash)でApache/Nginx、MySQL/MariaDB、PHPを一括導入できます。Dockerやdocker-composeを使えば環境を切り替えやすく、依存関係を気にせず試せます。
運用で役立つ小技
自動バックアップ、Let’s Encryptの自動更新、ログ監視や簡易監視ツールで稼働状況をチェックします。ステージング環境を用意すると安全に更新できます。
まとめ
ここまでの内容を簡潔に整理します。初心者でも運用できるよう、実践的な視点でまとめました。
-
基本の流れ: ディストリビューションとWebサーバー(例: Nginxは軽量、Apacheは拡張性)を選び、インストール→起動→自動起動設定→ファイアウォール開放→動作確認を行います。
-
複数サイト: バーチャルホスト(Apache)やサーバーブロック(Nginx)でドメインごとに設定します。ドキュメントルートやログの分離を忘れないでください。
-
HTTPS化: Let’s Encryptなどで無料証明書を取得し、自動更新を設定すると運用が楽になります。
-
セキュリティと運用: 不要なモジュールの無効化、最低限の権限、定期的なアップデート、ログ監視とバックアップを習慣化してください。
-
発展: ロードバランサー、リバースプロキシ、コンテナ化、自動デプロイなどを段階的に導入すると拡張性が高まります。
最後に、まずは小さなサーバーで手順を実践し、動作とログを確認しながら本番へ移行することをおすすめします。丁寧に運用すれば長期安定稼働が可能です。












