10.

conf(.conf)の完全ガイド — nginx.conf / httpd.conf / sshd_config の構文と include

編集
この記事の要点
  • .conf「設定ファイル」全般を指す汎用的な拡張子であり、特定の標準仕様を持たない。読むプログラムが構文を決める
  • Linux/Unix 系ミドルウェアの設定ファイルに多く採用される — nginx.conf / httpd.conf / sshd_config / my.cnf / resolv.conf など
  • 構文は処理系次第。Apache はディレクティブ形式 (DocumentRoot /var/www)、nginx は波括弧でブロック構造、MySQL の my.cnf は INI 風セクション形式
  • ほぼすべての .confinclude 機能を持ち、巨大な設定を機能別に分割管理できる。conf.d/ ディレクトリに分割するパターンが定番
  • nginx: http { server { location / { ... } } } のように入れ子のブロックで階層を表現
  • Apache: <VirtualHost> / <Directory> / <IfModule> のようにXML 風の囲みタグを使う
  • 構文ミスがあると起動時にデーモンが落ちるため、リロード前に nginx -tapachectl configtest で必ず構文チェックする

概要

.conf は configuration(設定)の略で、サーバソフトウェアやミドルウェアの設定ファイル一般に付けられる汎用的な拡張子である。.properties.ini と違って統一された仕様は存在せず、「これを読むプログラムが、自分自身の文法で解釈する」という、極めて緩い扱いになる。Linux/Unix のサーバ運用に関わるエンジニアは日常的に大量の .conf を編集することになる。

代表的なものを挙げると、Web サーバの nginx.confhttpd.conf、SSH サーバの sshd_config、MySQL/MariaDB の my.cnf(拡張子は .cnf だが慣習的に .conf 系列で語られる)、DNS リゾルバの /etc/resolv.conf、syslog/rsyslog の rsyslog.conf、Logrotate の logrotate.conf、cron の /etc/cron.d/*、Fluentd の td-agent.conf 等々。それぞれ文法が全く違うため、「.conf ファイルだから読める」ということは決して無い、と肝に銘じる必要がある。

内部構造・構文

処理系ごとに代表的な構文を見比べる。

nginx (nginx.conf) — 波括弧でブロックを入れ子にし、各ブロック内に directive value; を書く。文の終端はセミコロン。

user  nginx;
worker_processes  auto;

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile      on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  example.com;

        location / {
            root   /usr/share/nginx/html;
            index  index.html;
        }

        location /api/ {
            proxy_pass http://backend:3000/;
        }
    }

    include /etc/nginx/conf.d/*.conf;
}

Apache HTTP Server (httpd.conf) — ディレクティブを 1 行 1 個書き、XML 風の <Section>...</Section> でグループ化する。

ServerRoot "/etc/httpd"
Listen 80
LoadModule rewrite_module modules/mod_rewrite.so

<VirtualHost *:80>
    ServerName  example.com
    DocumentRoot /var/www/html
    <Directory "/var/www/html">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

IncludeOptional conf.d/*.conf

SSH (sshd_config) — シンプルな Keyword Value 形式。コメントは #

Port 22
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers admin deploy

MySQL (my.cnf) — INI スタイルでセクション分け。

[mysqld]
port = 3306
datadir = /var/lib/mysql
character-set-server = utf8mb4

[client]
port = 3306
default-character-set = utf8mb4

このように、波括弧型・タグ型・キーワード型・INI 型と文法は処理系ごとに全く異なる。共通しているのはコメント記号がだいたい # であることと、include 系のディレクティブで他ファイルを取り込めることくらい。/etc/nginx/conf.d//etc/httpd/conf.d//etc/my.cnf.d/ といった分割ディレクトリは、いずれもこの include 仕組みを利用している。

主な用途

  • Web サーバ — nginx、Apache、Caddy
  • DB サーバ — MySQL、PostgreSQL、MariaDB の各種設定
  • SSH / セキュリティ — sshd_config、fail2ban、firewalld
  • システム基盤 — resolv.conf、ntp.conf、chrony.conf、rsyslog.conf、logrotate.conf
  • 監視・収集 — Fluentd (td-agent.conf)、Telegraf、Prometheus (prometheus.yml は YAML だが同系統)
  • パッケージマネージャ — yum.conf、apt の sources.list、pacman.conf

関連形式との比較

形式標準仕様構造表現用途の幅
.conf (汎用)無し(処理系次第)波括弧/タグ/INI/フラット 等まちまちサーバ・ミドルウェア全般
.ini事実上の規格セクション + key=value古典的アプリ設定
.yml / .yamlYAML 1.2インデント階層Kubernetes、CI、現代的ミドルウェア
.tomlTOML 1.0セクション + key=value、型ありRust 等の現代ツール
.jsonRFC 8259波括弧機械処理向け、コメント不可
.propertiesJava の慣習フラット、ドット区切りJava エコシステム

編集・パーサ・ツール

  • エディタ — VS Code(nginx / apache / sshd_config / ini 用の構文ハイライト拡張が個別に存在)、Vim/Neovim、Emacs
  • 構文チェックnginx -tapachectl configtestsshd -tnamed-checkconfmysqld --validate-config など、ほとんどのデーモンに専用チェッカーがある
  • 整形・解析nginxbeautifiercrossplane(nginx 設定を JSON にパースするツール)
  • 自動生成 — Ansible のテンプレートモジュール (Jinja2) で .conf を雛形から生成するのが現代の運用主流

注意点・落とし穴

  • リロード前に必ず構文チェック — 構文エラーがあると systemctl reload でデーモンが起動しなくなる。nginx -tapachectl configtest を必ず通してから reload する
  • include 順序の罠conf.d/*.conf はファイル名のアルファベット順に読み込まれる。先に書きたいルールには 00- プレフィックスを付ける、といった命名規約を決めておくと事故が減る
  • 後勝ち / 先勝ちが処理系ごとに違う — Apache は同名ディレクティブの「最後に書いたもの勝ち」、nginx は location の「最長一致勝ち」など、優先順位ルールが処理系ごとに異なる
  • 機微情報の平文管理 — DB パスワードや API キーを直書きせず、ファイルパーミッション (600) + 別ファイル分離 + Vault 等の利用を検討
  • 本番の手動編集 — Ansible / Terraform / Chef 等で構成管理されている場合、サーバで直接 .conf を書き換えると次回のデプロイで上書きされる。設定の真実はリポジトリ側
  • .conf という拡張子だけで仲間と判断しない — 中身は処理系ごとに別物。テンプレートを流用する時は文法を必ず確認

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. HTML(.html / .htm)
  2. CSS(.css)
  3. JSON(.json)
  4. XML(.xml)
  5. YAML(.yaml / .yml)
  6. TOML(.toml)
  7. env(.env)
  8. INI(.ini)
  9. properties(.properties)
  10. conf(.conf)

最近更新/作成されたページ