ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
インストール
# CentOS 7
sudo yum install -y httpd
# RHEL 8 / 9 / Rocky / AlmaLinux (dnf)
sudo dnf install -y httpd
# バージョン確認
httpd -v
# Server version: Apache/2.4.62 (Rocky Linux)
# Server built: ...
# モジュール一覧
httpd -M
起動と自動起動
# サービス起動
sudo systemctl start httpd
# 状態確認
sudo systemctl status httpd
# Active: active (running) since ...
# OS 起動時の自動起動
sudo systemctl enable httpd
# 設定確認(起動せずに)
sudo httpd -t
# Syntax OK
# 設定変更後の安全な再読み込み
sudo systemctl reload httpd # 既存接続を維持して再読込
sudo systemctl restart httpd # 完全再起動
# 停止
sudo systemctl stop httpd
ファイアウォール (firewalld) 設定
# 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-services
# dhcpv6-client http https ssh
# 個別ポート開放(例: 8080)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
# 動作確認
curl -I http://localhost/
# HTTP/1.1 403 Forbidden (デフォルトでは welcome page)
SELinux への対処
CentOS / RHEL ではデフォルトで SELinux が有効。非標準パスや非標準ポートを使うとアクセス拒否されます:
# 現状確認
getenforce
# Enforcing / Permissive / Disabled
# DocumentRoot を /var/www/html 以外に置く場合、コンテキスト付与が必要
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/web(/.*)?"
sudo restorecon -Rv /srv/web
# 一時的に確認用(再起動で戻る)
sudo chcon -R -t httpd_sys_content_t /srv/web
# 非標準ポート (8080 等) を使う場合
sudo semanage port -a -t http_port_t -p tcp 8080
# 監査ログで拒否原因を見る
sudo ausearch -m AVC -ts recent
# 緊急回避(開発時のみ)
sudo setenforce 0 # 一時的に Permissive
# 永続的に: /etc/selinux/config で SELINUX=permissive
ディレクトリ構成
| パス | 役割 |
|---|---|
/etc/httpd/conf/httpd.conf | メイン設定ファイル |
/etc/httpd/conf.d/*.conf | 追加設定(自動 include) |
/etc/httpd/conf.modules.d/*.conf | モジュールロード設定 |
/var/www/html/ | デフォルト DocumentRoot |
/var/log/httpd/access_log | アクセスログ |
/var/log/httpd/error_log | エラーログ |
/etc/httpd/logs | ↑のシンボリックリンク |
動作確認用 index.html
# テストページ作成
echo '<h1>Hello Apache</h1>' | sudo tee /var/www/html/index.html
# 所有権・権限
sudo chown -R apache:apache /var/www/html/
sudo chmod -R 755 /var/www/html/
# ブラウザでアクセス
# http://サーバIP/ → Hello Apache
# コマンドラインで確認
curl http://localhost/
Virtual Host 設定
# /etc/httpd/conf.d/example.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
Options Indexes FollowSymLinks
AllowOverride All # .htaccess 有効化
Require all granted
</Directory>
ErrorLog /var/log/httpd/example_error.log
CustomLog /var/log/httpd/example_access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName api.example.com
DocumentRoot /var/www/api
...
</VirtualHost># 設定検証 → 反映
sudo httpd -t
sudo systemctl reload httpd
# Virtual Host 一覧確認
sudo httpd -S
SSL/TLS 化(Let's Encrypt)
# mod_ssl インストール
sudo dnf install -y mod_ssl
# Certbot で Let's Encrypt 証明書取得
sudo dnf install -y certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.com
# → 自動的に <VirtualHost *:443> 設定が追加される
# → 自動リダイレクト設定も可能
# 自動更新(90 日ごと)
sudo systemctl enable --now certbot-renew.timer
# 手動更新テスト
sudo certbot renew --dry-run
手動の SSL VirtualHost
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/example
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
# 強い暗号スイートのみ許可
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder on
# HSTS
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>
PHP 連携
# 方法1: mod_php(簡単・低速)
sudo dnf install -y php
sudo systemctl restart httpd
# 動作確認
echo '<?php phpinfo();' | sudo tee /var/www/html/info.php
# http://localhost/info.php
# 方法2: PHP-FPM(推奨・高速・分離)
sudo dnf install -y php-fpm php-mysqlnd
sudo systemctl enable --now php-fpm
# /etc/httpd/conf.d/php.conf にデフォルトで proxy_fcgi 設定済
# <FilesMatch \.php$>
# SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
# </FilesMatch>
# 設定確認
php -v
php -m | grep mysqlnd
よく使うモジュール
| モジュール | 用途 |
|---|---|
mod_ssl | HTTPS |
mod_rewrite | URL 書換 |
mod_proxy / proxy_http / proxy_fcgi | リバプロ・FastCGI |
mod_deflate | gzip 圧縮 |
mod_headers | HTTP ヘッダ追加 |
mod_security | WAF |
トラブルシューティング
| 症状 | 原因 | 対処 |
|---|---|---|
| 外部からアクセスできない | firewalld 閉 | firewall-cmd --add-service=http |
| 403 Forbidden(自作ディレクトリ) | SELinux コンテキスト | chcon -R -t httpd_sys_content_t |
| 500 Internal Server Error | .htaccess 構文 / PHP エラー | tail /var/log/httpd/error_log |
| (13)Permission denied | ファイル権限 / SELinux | 権限 + SELinux 両方確認 |
| Address already in use: 80 | nginx 等が 80 使用中 | ss -tlnp | grep :80 |
FAQ
Q: nginx と Apache どちらが速い?
A: 静的配信は nginx が高速。動的(PHP / Python)は両方とも FastCGI 経由で大差なし。Apache は .htaccess でディレクトリ単位設定可能、nginx は不可(設定ファイル集中管理)。
Q: yum と dnf どちらを使う?
A: CentOS 7 までは yum、RHEL 8 / Rocky / Alma 以降は dnf(yum は dnf へのシンボリックリンク)。コマンドは互換。
Q: SELinux は無効化していい?
A: 本番環境では無効化非推奨。コンテキスト付与で対応するのが正攻法。開発時のみ Permissive モードに。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- インストール方法(Ubuntu)
- Apache HTTP Server のインストール方法(CentOS / RHEL)
- ディレクトリ構造
- httpd.conf(設定ファイル)
- ドキュメントルートの変更方法
- .htaccess
- コマンド一覧
- エラー一覧
- VPSへの導入例(CentOS編)
- SSLの設定
- httpd.conf系のバーチャルホストの設定エラー有無確認方法
- .htaccess でベーシック認証
- configの文法チェック
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- UE5のEvent Tickノードの使い方|毎フレーム処理とDelta Seconds 2026-06-13 13:26:37
- UE5のレベルブループリントでキャラクターをスポーンさせる方法 2026-06-13 13:26:37
- UE5のビューポートの使い方|視点操作・ビューモード・投影の基本 2026-06-13 13:26:36
- UE5でAI Move ToがBlockedで失敗する原因と対処方法|NavMesh確認 2026-06-13 13:26:36
- Reactのよくあるエラーと対処まとめ|環境構築・npm関連 2026-06-13 13:26:36
- UE5のWorld Compositionとは|サブレベルによる大規模ワールドと非推奨化 2026-06-13 13:26:35
- C++のコンパイルと実行方法|g++の使い方とオプション 2026-06-13 13:26:35
- .protoのgo_packageオプションとは|Goコード生成時のパッケージ指定 2026-06-13 13:26:34
- C++の開発環境構築|コンパイラとIDEの選び方・Hello World 2026-06-13 13:26:34
- gRPCクイックスタート|.proto定義からサーバ・クライアント実装まで 2026-06-13 13:26:33
- C#・Visual Studioのよくあるエラーと対処まとめ 2026-06-13 13:26:33
- C++の関数まとめ|標準入出力(printf・cout・cin)と関数の基本 2026-06-13 13:26:33
- UE5のアウトライナーとは|アクターの一覧・整理・親子付け 2026-06-13 13:26:32
- UE5でSet Input Mode UI Onlyを解除する方法|Game Onlyに戻す 2026-06-13 13:26:32
- UE5エディタの自動保存の頻度を変更する方法|Auto Save設定 2026-06-13 13:26:31
コメントを削除してもよろしいでしょうか?