0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

技術ブログ記事の構造フォーマット完全ガイド

Last updated at Posted at 2025-11-05

普段、技術ブログを書いている中で、「こういう構成で書けたら理想的だな」と思うことを備忘録を兼ねてフォーマットにまとめてみました。
正直に言うと、私自身の記事がこの通りになっているかというと…まだまだ改善の余地ありです。
この記事は、自分への戒めと、今後このような形に近づけていきたいという思いも込めて書いています。

技術系のブログ記事を書く際、適切な構造を持つことで読者の理解を深め、記事の価値を最大化できます。

本記事では、構築手順やHow To記事を書く際の基本的な構造フォーマットを、Nginxのインストール手順を例に解説します。


1. タイトル

書き方のポイント

  • 具体的な技術名やバージョンを含める
  • 「〜する方法」「〜の構築手順」など、記事の内容が明確にわかる表現を使う
  • 文字数は30〜50文字程度が理想的

良い例

  • 「Rocky Linux 9にNginxをインストールしてWebサーバーを構築する手順」
  • 「Rocky Linux 9でNginx + PHP-FPM環境を構築する【2025年版】」
  • 「初心者向け!Rocky Linux 9でHTTPS対応Webサーバーを立てる完全ガイド」

避けるべき例

  • 「Nginxを使ってみた」(抽象的)
  • 「超簡単!誰でもできるサーバー構築」(具体性に欠ける)
  • 「Webサーバーの作り方」(技術スタックが不明)

2. はじめに / 概要

含めるべき内容

この記事で実現できることや、対象読者を明確にします。

  • 記事の目的: 何を構築・実装するのか
  • 対象読者: 必要な前提知識レベル
  • 完成イメージ: 最終的に何ができるようになるか
  • 所要時間: おおよその作業時間(任意)

テンプレート例

本記事では、Rocky Linux 9にNginxをインストールし、基本的なWebサーバーを構築する手順を解説します。

対象読者

  • Linuxの基本的なコマンド操作ができる方
  • 自分でWebサーバーを構築してみたい方
  • Nginxを初めて触る方
  • Rocky LinuxやRHEL系ディストリビューションを使用している方

完成イメージ

この記事を読むことで、以下のことができるようになります。

  • Nginxのインストールと起動
  • 基本的なWebページの公開
  • ファイアウォール(firewalld)の設定
  • Nginxの基本的な設定ファイルの編集
  • SELinuxと共存した安全な運用

所要時間: 約30分


3. 前提条件 / 環境

含めるべき内容

読者が同じ環境で作業できるよう、具体的な情報を記載します。

  • 動作環境: OS、バージョン情報
  • 必要なツール: インストール済みであるべきソフトウェア
  • 前提知識: 理解しておくべき技術概念
  • 料金情報: クラウドサービス等を使う場合(任意)

記載例

環境

  • OS: Rocky Linux 9.6
  • メモリ: 1GB以上推奨
  • ディスク容量: 10GB以上の空き容量
  • ネットワーク: インターネット接続必須

必要なもの

  • root権限またはsudo権限を持つユーザーアカウント
  • SSHクライアント(リモート接続の場合)
  • テキストエディタの基本的な操作知識(vi/nano等)

前提知識

  • 基本的なLinuxコマンド(cd, ls, cat等)
  • パッケージ管理(dnf/yum)の基本概念
  • テキストエディタの使い方
  • SELinuxとfirewalldの基本的な理解(推奨)

4. 全体の構成図 / アーキテクチャ

含めるべき内容

構築するシステムの全体像を視覚的に示します。

  • システム構成図: 各コンポーネントの関係性
  • データフロー: 処理の流れ
  • ディレクトリ構成: プロジェクトファイルの配置(必要に応じて)

記載のコツ

  • Mermaid記法やDraw.ioで図を作成
  • 複雑な構成の場合は、段階的に説明
  • 各コンポーネントの役割を簡潔に説明

システム構成

各コンポーネントの役割

  • クライアント: WebブラウザからHTTPリクエストを送信
  • Nginx: Webサーバーとして動作し、静的ファイルを配信
  • 静的ファイル: HTMLやCSS、画像などのコンテンツ
  • firewalld: ファイアウォールとしてポート80番への通信を許可
  • SELinux: セキュリティポリシーによりシステムを保護

ディレクトリ構成

/etc/nginx/
├── nginx.conf          # メイン設定ファイル
├── conf.d/             # 追加の設定ファイル
│   └── default.conf    # デフォルトサーバー設定
└── default.d/          # デフォルト設定の追加ファイル

/usr/share/nginx/html/  # Webコンテンツの配置場所(デフォルト)
└── index.html          # デフォルトページ

/var/log/nginx/         # ログファイル
├── access.log          # アクセスログ
└── error.log           # エラーログ

5. 手順 / 実装

記事のメインパートです。段階的に、再現可能な形で記述します。

5-1. 手順の分割

大きな作業を論理的なステップに分割します。

例: Nginxインストール手順の場合

Step 1: システムのアップデート
Step 2: EPELリポジトリの有効化(必要に応じて)
Step 3: Nginxのインストール
Step 4: Nginxの起動と自動起動設定
Step 5: ファイアウォール(firewalld)の設定
Step 6: SELinuxの設定
Step 7: 動作確認
Step 8: HTMLファイルの配置
Step 9: 設定ファイルのカスタマイズ

5-2. 各ステップの構成

各ステップには以下の要素を含めます。

(1) ステップの目的

まず、このステップで何を行うのかを明確に説明します。

例: このステップでは、Rocky Linuxのパッケージリストを最新の状態に更新し、セキュリティパッチを適用します。これにより、最新版のNginxをインストールする準備が整います。

(2) 具体的なコマンドやコード

実行するコマンドを明記します。コピー&ペーストできる形式で記載します。

例:

以下のコマンドを実行します:

sudo dnf update -y

(3) コマンドの説明

各コマンドが何をしているのか、オプションの意味を説明します。

例:

  • sudo dnf update -y: インストール済みパッケージを最新版にアップデート
    • dnf: Rocky Linuxのパッケージマネージャーコマンド
    • update: パッケージの更新を実行
    • -yオプション: 確認なしで自動的にインストールを進める

(4) 実行結果や確認方法

コマンド実行後の出力例や、正常に完了したことを確認する方法を示します。

例:

正常に完了すると、以下のような出力が表示されます:

Last metadata expiration check: 0:00:15 ago on Wed 30 Oct 2024 10:00:00 AM JST.
Dependencies resolved.
Nothing to do.
Complete!

または更新がある場合:

Complete!

(5) よくあるエラーと対処法(任意)

実際に遭遇しやすいエラーとその解決方法を記載します。

例:

エラー: Cannot download repomd.xml

  • 原因: ネットワーク接続の問題、またはリポジトリサーバーが一時的にダウン
  • 対処法: しばらく待ってから再実行するか、DNSの設定を確認:
# DNS確認
cat /etc/resolv.conf

# キャッシュのクリア
sudo dnf clean all
sudo dnf makecache

5-3. 実際の手順例(完全版)

実際の記事では、以下のように各ステップを詳細に記述します。

Step 1: システムのアップデート

まず、システムのパッケージを最新の状態に更新します。

sudo dnf update -y

更新が完了したら、システムを再起動します(カーネルアップデートがあった場合):

sudo reboot

Step 2: Nginxのインストール

Rocky Linuxの標準リポジトリからNginxをインストールします。

sudo dnf install nginx -y

インストールが完了したら、バージョンを確認します:

nginx -v

出力例:

nginx version: nginx/1.20.1

Step 3: Nginxの起動と自動起動設定

Nginxを起動し、システム起動時に自動的に開始するよう設定します。

# Nginxの起動
sudo systemctl start nginx

# 自動起動の有効化
sudo systemctl enable nginx

# 状態確認
sudo systemctl status nginx

正常に起動していれば、以下のような出力が表示されます:

● nginx.service - The nginx HTTP and reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-10-30 10:00:00 JST; 5s ago

Active: active (running)と表示されていればOKです。

Step 4: ファイアウォール(firewalld)の設定

HTTP通信(ポート80番)を許可します。Rocky Linuxではデフォルトでfirewalldが有効になっています。

# ファイアウォールの状態確認
sudo firewall-cmd --state

# HTTP(80番ポート)を許可
sudo firewall-cmd --permanent --add-service=http

# HTTPS(443番ポート)も許可する場合
sudo firewall-cmd --permanent --add-service=https

# 設定を反映
sudo firewall-cmd --reload

# 設定の確認
sudo firewall-cmd --list-all

出力例:

public (active)
  target: default
  services: cockpit dhcpv6-client http https ssh
  ports: 
  protocols:

services:の行にhttpが含まれていればOKです。

Step 5: SELinuxの設定

Rocky LinuxではSELinuxがデフォルトで有効になっています。Nginxが正常に動作するための設定を行います。

SELinuxの状態確認:

getenforce

Enforcingと表示されればSELinuxが有効です。

Nginxの基本的な動作には特別な設定は不要ですが、カスタムディレクトリを使う場合は以下を実行:

# カスタムディレクトリ(/var/www/html等)にコンテキストを設定
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html

Rocky Linux特有の注意点

1. SELinuxの設定が必要

Rocky LinuxではSELinuxがデフォルトで有効です。カスタムディレクトリを使う場合:

# コンテキストの確認
ls -Z /usr/share/nginx/html/

# カスタムディレクトリのコンテキスト設定
sudo semanage fcontext -a -t httpd_sys_content_t "/path/to/custom(/.*)?"
sudo restorecon -Rv /path/to/custom

2. ファイアウォールはfirewalld

Rocky Linuxではfirewalldを使用します(ufwではありません):

# サービスの追加
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

# ポート番号で指定する場合
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

3. 設定ファイルの配置場所

Rocky Linuxでは/etc/nginx/conf.d/ディレクトリを使用:

# 新しいサイト設定を作成
sudo vi /etc/nginx/conf.d/mysite.conf

Step 6: 動作確認

ブラウザで以下のURLにアクセスします:

http://サーバーのIPアドレス/

または、サーバー上で以下のコマンドを実行:

curl http://localhost

Nginxのデフォルトページ(テストページ)が表示されれば成功です。

Step 7: HTMLファイルの配置

独自のHTMLファイルを配置します。Rocky LinuxのNginxではデフォルトで/usr/share/nginx/htmlが使用されます。

# 現在のindex.htmlを確認
ls -la /usr/share/nginx/html/

# バックアップを作成
sudo cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bak

# 新しいindex.htmlを作成
sudo vi /usr/share/nginx/html/index.html

以下の内容を入力:

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>テストページ</title>
</head>
<body>
    <h1>Rocky Linux 9 + Nginx</h1>
    <p>Webサーバーが正常に動作しています。</p>
</body>
</html>

保存方法(vi):

  • i で挿入モード
  • 内容を入力
  • Esc でコマンドモード
  • :wq で保存して終了

ブラウザを再読み込みして、新しいページが表示されることを確認します。

Step 8: 設定ファイルのカスタマイズ(任意)

Nginxの基本設定を確認・編集します。

# メイン設定ファイルの確認
sudo vi /etc/nginx/nginx.conf

# デフォルトサーバー設定ファイルの確認
sudo vi /etc/nginx/conf.d/default.conf

注意: Rocky LinuxのNginxはsites-available/sites-enabledではなく、conf.d/ディレクトリを使用します。

設定を変更した場合は、構文チェックを行います:

sudo nginx -t

出力例:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

問題なければ、Nginxを再読み込み:

sudo systemctl reload nginx

5-4. コードブロックの書き方のポイント

**良い例:**ファイルパスとコマンドを明確に分けて記載します。

/etc/nginx/conf.d/mysite.confを作成します:

sudo vi /etc/nginx/conf.d/mysite.conf

以下の内容を追加:

server {
    listen 80;
    server_name example.com www.example.com;
    
    # ドキュメントルートの設定
    root /usr/share/nginx/html;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
    
    # アクセスログとエラーログ
    access_log /var/log/nginx/mysite_access.log;
    error_log /var/log/nginx/mysite_error.log;
}

設定内容の説明:

  • listen 80: ポート80番でリクエストを待ち受け
  • server_name: このサーバーで使用するドメイン名
  • root: Webコンテンツの配置場所
  • index: デフォルトで表示するファイル
  • location /: すべてのリクエストに対する処理

6. 動作確認 / テスト

構築した環境やアプリケーションが正しく動作することを確認します。

含めるべき内容

  • 起動方法: サービスの起動コマンド
  • 確認手順: ブラウザアクセス、コマンドでの確認など
  • 期待される結果: スクリーンショットやログ出力
  • テストケース: 主要な機能の確認方法

記載例

Nginxの状態確認サービスが正常に動作しているか確認します:

sudo systemctl status nginx

期待される出力:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
     Active: active (running)

ブラウザでの確認ブラウザで以下のURLにアクセスします:

http://サーバーのIPアドレス/

作成したHTMLページが表示されれば成功です。
image02.png

コマンドラインでの確認curlコマンドでHTTPレスポンスを確認:

curl -I http://localhost

期待される出力:

HTTP/1.1 200 OK
Server: nginx/1.20.1
Content-Type: text/html

ステータスコード200 OKが返ってくれば正常です。

ログファイルの確認アクセスログとエラーログを確認します:

# アクセスログ
sudo tail -f /var/log/nginx/access.log

# エラーログ
sudo tail -f /var/log/nginx/error.log

ポートの待ち受け確認Nginxがポート80番で待ち受けているか確認:

sudo ss -tulpn | grep :80

または:

sudo netstat -tulpn | grep :80

出力例:

tcp    0    0 0.0.0.0:80    0.0.0.0:*    LISTEN    1234/nginx: master

7. 解説 / ポイント

実装した内容について、技術的な背景や重要なポイントを解説します。

含めるべき内容

  • 技術選定の理由: なぜその技術を選んだか
  • 設計のポイント: アーキテクチャの意図
  • ベストプラクティス: 推奨される実装方法
  • 注意点: ハマりやすいポイント
  • パフォーマンス: 最適化のヒント(該当する場合)

記載例

なぜNginxを選ぶのかNginxを選択する主な理由:

  1. 高いパフォーマンス: 同時接続数が多い環境でも安定動作
  2. 軽量: メモリ消費が少なく、リソース効率が良い
  3. リバースプロキシ機能: 複数のバックエンドサーバーへの振り分けが可能
  4. 設定のシンプルさ: 設定ファイルが直感的で理解しやすい

Apacheとの比較

項目 Nginx Apache
同時接続処理 イベント駆動(非同期) プロセス/スレッドベース
メモリ使用量 少ない 多め
静的ファイル配信 非常に高速 高速
動的コンテンツ PHP-FPM等と連携 mod_phpで直接処理可能
設定ファイル シンプル .htaccessで柔軟

設定ファイルの構造

Nginxの設定は階層構造になっています:

nginx.conf (メイン設定)
└── http ブロック
    └── server ブロック (バーチャルホスト)
        └── location ブロック (URLパスごとの設定)

よく使う設定ディレクティブ

# ワーカープロセス数(通常はCPUコア数に合わせる)
worker_processes auto;

# 同時接続数
worker_connections 1024;

# ログレベル
error_log /var/log/nginx/error.log warn;

# gzip圧縮の有効化
gzip on;
gzip_types text/plain text/css application/json;

パフォーマンスチューニングのポイント

1. 静的ファイルのキャッシュ設定

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

2. ファイルディスクリプタ数の増加

worker_rlimit_nofile 65535;

3. keepalive接続の最適化

keepalive_timeout 65;
keepalive_requests 100;

8. セキュリティに関する注意事項

技術記事では、セキュリティに関する配慮を明記することが重要です。

含めるべき内容

  • 機密情報の取り扱い: パスワード、証明書の管理方法
  • 脆弱性への対処: 既知の脆弱性や注意すべき実装
  • 本番環境での注意点: 開発環境と本番環境の違い
  • 権限管理: 最小権限の原則
  • データ保護: ログファイルやバックアップの扱い

記載例

基本的なセキュリティ設定

1. Nginxのバージョン情報を隠す

サーバー情報の露出を防ぎます:

# /etc/nginx/nginx.conf の http ブロック内に追加
http {
    server_tokens off;
}

設定を反映:

sudo nginx -t
sudo systemctl reload nginx

2. 不要なHTTPメソッドを制限

GETとPOSTのみを許可:

location / {
    limit_except GET POST {
        deny all;
    }
}

3. アクセス制限の設定

特定のIPアドレスからのみアクセスを許可:

location /admin {
    allow 192.168.1.0/24;   # 社内ネットワーク
    allow 203.0.113.10;     # 特定のIP
    deny all;               # その他は拒否
}

4. レート制限の実装

DDoS攻撃を防ぐための設定:

# /etc/nginx/nginx.conf の http ブロック内
http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    
    server {
        location / {
            limit_req zone=one burst=20;
        }
    }
}

HTTPS/SSL設定

本番環境では必ずHTTPSを使用してください。

Let's Encryptで無料SSL証明書を取得

# Certbotのインストール
sudo apt install certbot python3-certbot-nginx -y

# SSL証明書の取得と自動設定
sudo certbot --nginx -d example.com -d www.example.com

SSL設定の最適化

server {
    listen 443 ssl http2;
    server_name example.com;
    
    # SSL証明書
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    # SSL設定の最適化
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    
    # HSTSヘッダー
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

ファイルとディレクトリの権限設定

適切な権限を設定してセキュリティを強化:

# Webコンテンツディレクトリの所有者を設定
sudo chown -R www-data:www-data /var/www/html

# ディレクトリのパーミッション
sudo find /var/www/html -type d -exec chmod 755 {} \;

# ファイルのパーミッション
sudo find /var/www/html -type f -exec chmod 644 {} \;

# 設定ファイルのパーミッション
sudo chmod 640 /etc/nginx/nginx.conf
sudo chown root:root /etc/nginx/nginx.conf

セキュリティヘッダーの追加

XSS、クリックジャッキングなどの攻撃を防ぐ:

server {
    # XSS対策
    add_header X-XSS-Protection "1; mode=block" always;
    
    # クリックジャッキング対策
    add_header X-Frame-Options "SAMEORIGIN" always;
    
    # MIMEタイプスニッフィング対策
    add_header X-Content-Type-Options "nosniff" always;
    
    # リファラーポリシー
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    
    # CSP(Content Security Policy)
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline';" always;
}

ログファイルの管理

ログファイルには個人情報が含まれる可能性があります:

# ログのアクセス権限を制限
sudo chmod 640 /var/log/nginx/access.log
sudo chmod 640 /var/log/nginx/error.log

# ログローテーション設定の確認
cat /etc/logrotate.d/nginx

定期的なセキュリティアップデート

# パッケージの更新確認
sudo dnf check-update

# Nginxのアップデート
sudo dnf update nginx

# セキュリティアップデートのみ適用
sudo dnf update --security

セキュリティチェックリスト

本番環境デプロイ前に確認:

  • Nginxのバージョン情報を非表示にしている
  • HTTPSを有効化している
  • SSL/TLS設定が最新のベストプラクティスに従っている
  • 不要なHTTPメソッドを制限している
  • レート制限を設定している
  • セキュリティヘッダーを追加している
  • ファイル・ディレクトリの権限が適切に設定されている
  • ファイアウォールが正しく設定されている
  • ログファイルのアクセス権限が制限されている
  • 定期的なアップデートの仕組みがある

免責事項の記載

本記事で紹介する内容は学習・開発環境を想定したものです。本番環境に適用する際は、以下の点にご注意ください:

  • セキュリティ要件は環境やユースケースにより異なります
  • 最新のセキュリティベストプラクティスを確認してください
  • 本番環境へのデプロイ前に、セキュリティ専門家のレビューを推奨します
  • 本記事の内容を使用して発生した問題について、筆者は責任を負いかねます

9. ハマったポイント / トラブルシューティング

実際に遭遇した問題とその解決方法を共有します。

記載方法

  • 問題: 何が起きたか
  • 原因: なぜ起きたか
  • 解決方法: どう対処したか
  • 参考情報: 関連するドキュメントやIssueのリンク

記載例

問題1: Nginxが起動しない

症状

sudo systemctl start nginx

を実行してもNginxが起動せず、以下のエラーが表示される:

Job for nginx.service failed because the control process exited with error code.

原因

設定ファイルに構文エラーがあるか、ポート80番が既に使用されている。

解決方法

1. 設定ファイルの構文チェック:

sudo nginx -t

エラーメッセージを確認し、該当箇所を修正します。

2. ポート使用状況の確認:

sudo netstat -tulpn | grep :80

既に別のプロセスがポート80を使用している場合:

# プロセスIDを確認
sudo lsof -i :80

# プロセスを停止(例: Apache)
sudo systemctl stop apache2
sudo systemctl disable apache2

3. エラーログの確認:

sudo tail -n 50 /var/log/nginx/error.log

問題2: 403 Forbiddenエラーが表示される

症状

ブラウザでアクセスすると「403 Forbidden」と表示される。

原因

ファイルやディレクトリの権限が不適切、またはindex.htmlが存在しない。

解決方法

1. ファイルの存在確認:

ls -la /var/www/html/

2. 権限の確認と修正:

# 所有者を確認
ls -ld /var/www/html

# 権限を修正
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

3. SELinuxが有効な場合(CentOS/RHEL):

# SELinuxの状態確認
getenforce

# コンテキストの設定
sudo chcon -R -t httpd_sys_content_t /var/www/html

4. Nginxの設定でindexファイルが指定されているか確認:

location / {
    index index.html index.htm;
}

問題3: 設定変更が反映されない

症状

設定ファイルを編集したのに、変更が反映されない。

原因

Nginxのリロードまたは再起動を忘れている。

解決方法

設定ファイルを編集した後は、必ず以下のコマンドを実行:

# 構文チェック
sudo nginx -t

# 設定の再読み込み(推奨)
sudo systemctl reload nginx

# または完全再起動
sudo systemctl restart nginx

reload と restart の違い:

  • reload: 接続を維持したまま設定を再読み込み(ダウンタイムなし)
  • restart: プロセスを完全に再起動(一時的に接続が切れる)

問題4: ファイアウォールでブロックされている

症状

サーバー内からはcurl http://localhostでアクセスできるが、外部からブラウザでアクセスできない。

原因

ファイアウォールでHTTPポート(80番)がブロックされている。

解決方法

1. ファイアウォールの状態確認:

sudo firewall-cmd --state
sudo firewall-cmd --list-all

2. HTTPを許可:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

3. ポート番号で直接指定する場合:

sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

4. クラウド環境の場合は、セキュリティグループやネットワークACLも確認:

  • AWS: セキュリティグループでポート80のインバウンドルールを追加
  • GCP: ファイアウォールルールでHTTP(80)を許可
  • Azure: ネットワークセキュリティグループで80番ポートを開放

5. VPSサービスのコントロールパネルでファイアウォール設定を確認


問題5: SELinuxによるアクセス拒否

症状

ファイルは存在し、権限も正しいが、403エラーやファイルアクセスエラーが発生する。

原因

SELinuxがファイルアクセスをブロックしている。

解決方法

1. SELinux関連のエラーログを確認:

sudo ausearch -m avc -ts recent

2. SELinuxのコンテキストを確認:

ls -Z /usr/share/nginx/html/

3. 正しいコンテキストを設定:

sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html(/.*)?"
sudo restorecon -Rv /usr/share/nginx/html

4. リバースプロキシでバックエンド接続ができない場合:

sudo setsebool -P httpd_can_network_connect on

5. 別のポートでリスンする場合:

sudo semanage port -a -t http_port_t -p tcp 8080

注意: SELinuxを無効化(setenforce 0)するのは推奨されません。適切なコンテキスト設定で対応してください。

問題6: ログファイルが肥大化してディスク容量不足

症状

ディスク使用量が増加し、サーバーの動作が不安定になる。

原因

アクセスログやエラーログが自動でローテーションされていない。

解決方法

1. ログファイルのサイズ確認:

du -sh /var/log/nginx/*

2. ログローテーション設定の確認:

cat /etc/logrotate.d/nginx

3. 手動でログをローテーション:

sudo logrotate -f /etc/logrotate.d/nginx

4. ログローテーション設定の例:

/var/log/nginx/*.log {
    daily               # 毎日ローテーション
    missingok           # ファイルがなくてもエラーにしない
    rotate 14           # 14世代保持
    compress            # 圧縮する
    delaycompress       # 最新のログは圧縮しない
    notifempty          # ログが空なら何もしない
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

10. まとめ

記事の内容を簡潔に振り返り、次のステップを示します。

含めるべき内容

  • 達成したこと: この記事で何を構築したか
  • 学んだこと: 重要なポイントの再確認
  • 次のステップ: さらなる発展の方向性
  • 関連記事: シリーズものの場合は次の記事へのリンク

テンプレート例

本記事では、Rocky Linux 9にNginxをインストールし、基本的なWebサーバーを構築する手順を解説しました。

達成したこと

  • Nginxのインストールと起動
  • ファイアウォール設定によるHTTP通信の許可
  • 独自のHTMLページの公開
  • 基本的なセキュリティ設定の実装

重要なポイント

  • システムのアップデートを最初に実施することでセキュリティを確保
  • ファイアウォール設定を忘れずに行う
  • 設定変更後は必ずnginx -tで構文チェック
  • ログファイルの監視とローテーション設定が重要

次のステップ

さらに発展させるには、以下の内容に取り組んでみてください:

  1. HTTPS対応: Let's Encryptで無料SSL証明書を取得し、HTTPS化
  2. PHP環境の構築: PHP-FPMをインストールして動的サイトに対応
  3. リバースプロキシ設定: バックエンドアプリケーションとの連携
  4. ロードバランシング: 複数サーバーへのトラフィック分散
  5. 監視とアラート: Prometheusなどでサーバー監視を実装

これらの内容は、今後の記事で順次取り上げていく予定です。

参考になった方へ

この記事が役に立った方は、ぜひSNSでシェアしたり、コメントで感想を聞かせてください。質問や不明点があれば、お気軽にコメント欄でお知らせください。


11. 参考文献 / リンク

記事作成にあたって参照した情報源を明記します。

記載すべき情報

  • 公式ドキュメント: 使用した技術の公式サイト
  • 参考記事: 影響を受けた他の記事
  • GitHubリポジトリ: サンプルコードの公開先
  • 関連ツール: 補助的に使用したツール

記載例

公式ドキュメント

参考記事

関連ツール

サンプルコード

本記事で使用した設定ファイルは以下のリポジトリで公開しています:

https://github.com/username/nginx-basic-setup

コミュニティ


おまけ: 記事執筆のTips

読みやすさを向上させるコツ

  1. 適度な改行: 長い段落は避け、2〜3行ごとに改行
  2. 強調の使い分け: 太字は重要な用語に、コードブロックはコマンドやファイル名に
  3. 具体例の提示: 抽象的な説明だけでなく、実例を示す
  4. スクリーンショット: UIや結果画面は画像で示す
  5. 目次の活用: 長文の記事には目次をつける

コマンドラインの記載で気をつけること

良い例:

# コメントで説明を追加
sudo apt update

# 実行結果も記載# 出力: Reading package lists... Done

避けるべき例:

# プロンプト記号が混在して見づらい
$ sudo apt update
# または
user@host:~$ sudo apt update

コピー&ペーストしやすいよう、プロンプト記号は省略するのが基本です。

公開前のチェックリスト

内容の確認

  • タイトルは内容を正確に表しているか
  • コードブロックに言語名が指定されているか(bash, nginx等)
  • 手順通りに実行して動作確認できるか
  • バージョン情報は最新か(記事執筆時点を明記)
  • 誤字脱字はないか
  • リンク切れはないか
  • スクリーンショットは適切に配置されているか
  • ファイルパスが正確に記載されているか

セキュリティの確認

  • パスワードやAPIキーなどの機密情報が含まれていないか
  • セキュリティ上の注意事項を記載しているか
  • 本番環境での推奨設定を明記しているか
  • 必要に応じて免責事項を追加しているか
  • 権限設定の説明は適切か

コマンドの確認

  • すべてのコマンドをクリーンな環境でテスト済みか
  • sudoが必要なコマンドに適切に記載されているか
  • エラーメッセージのサンプルが実際のものか
  • OSやディストリビューション固有のコマンドを明記しているか

さいごに

このフォーマットはあくまで基本形です。記事の内容や対象読者に応じて、柔軟にカスタマイズしてください。

技術記事を書く上で大切なこと:

  1. 再現可能性: 読者が同じ環境を作れること
  2. 丁寧な説明: 初心者でも理解できる言葉選び
  3. トラブルシューティング: 実際に遭遇したエラーとその解決策
  4. セキュリティ: 本番環境での注意点を明記
  5. 継続的な更新: 技術は進化するため、定期的に内容を見直す

特にサーバー構築系の記事では:

  • OSのバージョンを明記する(Rocky Linux 9等)
  • 実行するコマンドは必ずテスト済みのものを掲載
  • ファイアウォール(firewalld)やセキュリティ設定を忘れずに
  • SELinuxの設定方法も説明する(RHEL系では重要)
  • ログファイルの確認方法も説明する
  • クラウド環境とオンプレミス環境の違いがあれば言及
  • Rocky LinuxとUbuntuなど、ディストリビューション間の違いを明記

重要なのは、読者が迷わず再現できることです。自分が初めてその技術に触れたときの気持ちを思い出しながら、丁寧に書くことを心がけましょう。

良質な技術記事は、コミュニティ全体の知識向上に貢献します。ぜひこのフォーマットを活用して、あなたの知見を共有してください!

この記事が役に立ったら:

  • いいねやストックで応援してください
  • コメントで改善点を教えてください
  • SNSでシェアして他の人にも役立ててください
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?