PK
パーネルカニック研究所
今日もどこかでkernel panic。
root@pk-lab:~#

自作LinuxでWebサーバーを起動する

連載ナビ

この連載は「Linuxを使えるようになる」ではなく、「Linuxがどう動いているのか」を理解するための実践シリーズです。

今回は Linuxを理解する 〜 LFSで学ぶLinux内部構造 〜 の Part 7 / 第2回として、仕組みのつながりを意識しながら学びます。

シリーズの最終到達点です。

自作Linux上でnginxを起動し、HTTP応答を確認します。

なぜこの確認が重要か

「nginxが起動した」だけでは、実運用では不十分です。

最低でも次の3点を分けて確認できると、障害対応が速くなります。

1. プロセスは起動しているか(systemd / PID)

2. ソケットは待ち受けしているか(TCP 80)

3. アプリとして応答しているか(HTTPヘッダ・ステータス)

この3段階で確認すると、

「起動失敗」「ポート競合」「アプリ設定ミス」を切り分けやすくなります。

図解テキスト


boot complete
  -> systemd
  -> nginx service
  -> listen :80
  -> curl/browser response

この回で実行するコマンド

上から順番に実行すれば、この回の内容を体験できます。

まずはそのままコピペして実行し、次に1行ずつ意味を確認してください。


/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx
ss -ltnp | grep :80
curl -i http://127.0.0.1

ハンズオン手順

1. ターミナルを開いて、上のコマンドを1行ずつ実行する

2. 出力結果を見て、分かったことを1行メモする

3. エラーが出たら、そのエラーメッセージをそのまま残す

4. 各コマンドが何を確認するためのものかを説明してみる

追加で見るべき観点

### 1. systemd 管理下での状態確認


systemctl status nginx --no-pager
systemctl is-enabled nginx
  • active (running) ならプロセスは生存
  • enabled なら再起動後も自動起動

### 2. エラー時のログ確認


journalctl -u nginx -b --no-pager | tail -n 50
tail -n 50 /usr/local/nginx/logs/error.log
  • systemd 側で失敗しているか
  • nginx 自身の設定/権限エラーか

### 3. 設定の整合性確認


/usr/local/nginx/sbin/nginx -t
cat /usr/local/nginx/conf/nginx.conf | sed -n '1,200p'
  • syntax is ok / test is successful を確認
  • listen 80;root の設定が意図通りかを確認

典型トラブルと対処

### bind() failed (98: Address already in use)

  • 原因: 既に別プロセスが80番ポートを使用
  • 対処:

ss -ltnp | grep :80

競合プロセスを停止してから nginx を再起動します。

### Permission denied

  • 原因: 証明書/ログ/ドキュメントルートの権限不足
  • 対処: nginx 実行ユーザーの読み書き権限を見直す

### curl で接続できない

  • 原因候補: ファイアウォール、listen設定、起動失敗
  • 対処順:

1. systemctl status nginx

2. ss -ltnp | grep :80

3. curl -v http://127.0.0.1

図解: リクエスト処理の最小経路


Browser / curl
  -> TCP :80
  -> nginx master
  -> nginx worker
  -> document root (index.html)
  -> HTTP 200 response

この経路のどこで止まっているかを意識すると、

ログとコマンド結果を結びつけて診断できます。

チェックポイント

  • コマンドが最後まで実行できた
  • 出力の中で重要な値を1つ説明できる
  • 次の回に進む前に、分からない単語を1つ調べた

今回理解できたこと

  • Linux内部の各要素が1つのサービス起動に集約される
  • ブラックボックスを減らすと自力で原因を追える
  • 起動確認は「プロセス・ポート・HTTP応答」の3層で見ると再現性が上がる