AWS2-3 サイトの基本設定

⚙️ サイトの基本設定

1) テーマとプラグイン導入

2) パーマリンク設定

3) SSL(HTTPS)対応(Let’s Encrypt)


🎯 学習目標

  • WordPressのテーマ導入と有効化プラグイン選定と導入ができる
  • パーマリンクを「投稿名」にし、.htaccessmod_rewrite を正しく動作させる
  • Let’s Encrypt で無料SSLを導入し、HTTP→HTTPSリダイレクトWPのURL更新 を完了できる

✅ 0. 事前チェック(1分)

# Apache 稼働
sudo systemctl status httpd
# mod_rewrite 有効
sudo httpd -M | grep rewrite
# DocumentRoot 確認(例:/var/www/html)
grep -n 'DocumentRoot' /etc/httpd/conf/httpd.conf
  • rewrite_module が見つからない場合 → LoadModule rewrite_module modules/mod_rewrite.so を有効化(httpd.conf)→ sudo systemctl reload httpd

1) テーマとプラグイン導入

1-1. テーマ導入(管理画面)

  1. http://<EC2のIP>/wp-admin/ に管理者でログイン
  2. 外観 > テーマ > 新規追加 から
    • 例:Twenty Twenty-Four(公式)や Astra を検索→インストール有効化
  3. 外観 > カスタマイズ でサイトアイコン/色/フォントなど最小調整

(任意)WP-CLIでテーマ導入

cd /var/www/html
wp theme install twentytwentyfour --activate
# 例:Astra
wp theme install astra --activate

1-2. プラグイン導入(最小構成の例)

まずは最小で。増やしすぎるとパフォーマンス/保守性が低下します。

目的候補例備考
セキュリティWPcode + DISALLOW_FILE_EDIT, (もしくは) Wordfence / iThemes Securityログイン保護、2FA、編集禁止を基本に
バックアップUpdraftPlusS3連携可。定期バックアップ設定
キャッシュWP Super Cache / W3 Total Cache小規模なら Super Cache が簡単
画像圧縮EWWW Image Optimizer画質/圧縮バランス良し
SEOメタAll in One SEO / Yoast SEOメタ/サイトマップ生成

導入手順(管理画面)
プラグイン > 新規追加 で検索 → 今すぐインストール有効化

WP-CLI例

cd /var/www/html
wp plugin install updraftplus --activate
wp plugin install wp-super-cache --activate
wp plugin install ewww-image-optimizer --activate

最初にやるセキュリティ最小化

  • wp-config.php に既に設定済みならOK:define('DISALLOW_FILE_EDIT', true);

2) パーマリンク設定(投稿名)

2-1. 管理画面で設定

  1. 設定 > パーマリンク
  2. 「投稿名」 を選択 → 変更を保存

2-2. .htaccessAllowOverride

  • 保存時に .htaccess が自動生成されればOK。
  • 生成されない/リライトが効かない場合:

Apache設定(/etc/httpd/conf/httpd.conf)
<Directory "/var/www/html"> ブロックを確認し、AllowOverride All に変更。

<Directory "/var/www/html">
    AllowOverride All
    Require all granted
</Directory>

反映:

sudo systemctl reload httpd

手動で .htaccess を作成(/var/www/html/.htaccess):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

権限:

sudo chown ec2-user:apache /var/www/html/.htaccess
sudo chmod 664 /var/www/html/.htaccess

検証:任意の投稿を作成 → http://<IP>/%postname%/ 形式で開ければ成功。


3) SSL(HTTPS)対応(Let’s Encrypt)====> ドメインなし運用なので説明のみ

前提:独自ドメインを紐づけ済み(Route53 などで A レコード→EC2 の Elastic IP)。
Let’s Encrypt はIP直アクセス不可。必ずドメインが必要です。

3-0. 前準備(VirtualHost と ServerName)

/etc/httpd/conf.d/wordpress.conf(新規作成推奨):

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html
    <Directory "/var/www/html">
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog  /var/log/httpd/wp_error.log
    CustomLog /var/log/httpd/wp_access.log combined
</VirtualHost>

反映:

sudo systemctl reload httpd
  • example.com がサーバの Elastic IP を向いているか(DNS 反映)を nslookup example.com / dig で確認。

3-1. Certbot の導入(Amazon Linux 2)

方法A:EPEL から certbot(推奨)

sudo amazon-linux-extras install epel -y
sudo yum install -y certbot python3-certbot-apache
certbot --version

方法B:snap が使える場合(参考)

# AL2 では非推奨。利用する場合は snapd セットアップが必要。

3-2. 証明書発行(Apache プラグイン)

# www あり/なしを一括取得
sudo certbot --apache -d example.com -d www.example.com

対話:

  • メールアドレス入力、利用規約同意
  • HTTP→HTTPS リダイレクト を「有効化」を選択すると、自動で設定追記

自動設定される例(/etc/httpd/conf.d/ssl.conf または vhostに追記)

<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/html
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    <Directory "/var/www/html">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

# 80→443 リダイレクト設定(自動付与される場合あり)
<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

反映:

sudo systemctl reload httpd

検証

  • https://example.com/ にアクセス → 鍵マーク表示
  • http://example.com/ → 自動で https:// にリダイレクト

3-3. WordPress 側URLのHTTPS化

  1. 設定 > 一般WordPress アドレス(URL)サイトアドレス(URL)
    https://example.com に更新 → 保存
    ALB/CloudFront 経由でTLS終端する場合は、wp-config.php に以下を追加すると誤検知を防止) if ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) { $_SERVER['HTTPS'] = 'on'; }
  2. 既存内部リンクの HTTPS 置換(任意)
    • 新規サイトなら不要。移行の場合、Better Search Replace プラグインや WP-CLI を利用
    # 例:WP-CLIで一括置換(バックアップ推奨) cd /var/www/html wp search-replace 'http://example.com' 'https://example.com' --all-tables

3-4. 自動更新(certbot renew)確認

Let’s Encryptは90日有効certbot は自動更新用のタイマー/cronを設定します。

# 想定コマンド:systemd timer または cron が設定済み
sudo systemctl list-timers | grep certbot
# 手動テスト
sudo certbot renew --dry-run

🔍 トラブルシュート(SSL/HTTPS)

症状主因対処
certbot: Could not bind to port 8080番ポート占有/vhost不備Apache稼働確認、VirtualHostのServerName/DocumentRootを整備
Challenge failedDNS未反映/誤設定Aレコードが正しくElastic IPを向くまで待機(数分〜数十分)
鍵は付くが「保護されていない要素」画像/CSSにhttp混在テーマ/ウィジェット/固定ページ内のURLをhttpsへ、Search-Replace
WPがhttpに戻るCDN/ALB終端でHTTPS検知不可wp-config.phpHTTP_X_FORWARDED_PROTO 判定を有効化
速度低下不要プラグイン/キャッシュ未設定キャッシュ有効化、画像圧縮、プラグイン整理

🧹 仕上げ(推奨の初期設定)

  1. タイムゾーン/言語設定 > 一般 で「東京」「日本語」
  2. 固定ページ:「ホーム」「ブログ」を作成 → 設定 > 表示設定 で静的ホーム設定(任意)
  3. ディスカッション:コメント/ピンバックの扱いを決める
  4. メディア:サムネイルサイズ等をテーマに合わせ調整
  5. プラグイン最小化:未使用は停止→削除
  6. バックアップ:UpdraftPlusでS3退避スケジュールを設定
  7. MFA(2段階認証):Wordfence等で有効化
  8. セキュリティDISALLOW_FILE_EDIT、管理者IDは “admin” を避ける

✅ チェックリスト

  • テーマを導入し有効化、基本外観を調整
  • 必要最小のプラグインを導入・有効化(セキュリティ/バックアップ/キャッシュ等)
  • パーマリンクを「投稿名」に設定、.htaccessmod_rewrite を確認
  • VirtualHost の ServerName/DocumentRoot を整備
  • certbot --apache で証明書発行、80→443 リダイレクト有効
  • WPのサイトURL/ホームURLを https:// に変更
  • certbot renew --dry-run で自動更新テストOK
  • 画像/内部リンクの混在コンテンツを解消

付録:WP-CLI でまとめてセットアップ(任意・時短)

cd /var/www/html

# プラグイン一気に導入
wp plugin install updraftplus wp-super-cache ewww-image-optimizer --activate

# パーマリンクを投稿名に
wp rewrite structure '/%postname%/' --hard
wp rewrite flush --hard

# 一般設定(例)
wp option update timezone_string 'Asia/Tokyo'
wp option update blogdescription 'AWS LAMP WordPress Training'

# HTTPS への URL 置換(慎重に!事前バックアップ必須)
# wp search-replace 'http://example.com' 'https://example.com' --all-tables