Webサーバー サイトの管理
Reverse Proxy サーバーで
SSL証明書を集中管理する
Reverse Proxy サーバーで
SSL証明書を集中管理する
リバースプロキシとWebサーバー間も【HTTPS】通信にしていたが、「SSL証明書」の更新に手間がかかるので、リバースプロキシでの一括管理に変更する。
以下、Reverse Proxy で、SSL証明書を集中管理する方式に切り替えた記録。
スポンサー リンク
目 次
1. リバースプロキシとWebサーバー間を【HTTPS】通信にした設定
リバースプロキシとWebサーバー間も【HTTPS】通信にする。
Webサーバーで稼働している「WordPress」のURLも【https】。
Webサーバーで稼働している「WordPress」のURLも【https】。
リバースプロキシとWebサーバー、双方に「SSL証明書」を配置する必要がある。この為、「SSL証明書」の更新は、Webサーバーで行い、証明書のコピーをリバースプロキシにもアップロードする、という手間がかかる。
1. リバースプロキシでの、バックエンドサーバー(Webサーバー)設定。
server {
listen 80;
server_name arakan60.site;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name arakan60.site;
ssl_certificate /etc/letsencrypt/live/arakan60.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/arakan60.site/privkey.pem;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location / {
proxy_pass https://192.168.11.108;
--- 以下省略 ---
【 http://url 】のアクセスを、全て【 https://url 】にリダイレクトし、SSLの暗号化処理を行う設定になっている。
2. Webサーバーでの、nginx 設定。
server {
listen 80;
server_name arakan60.site;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name arakan60.site;
root /home/yaopi/www/wplux;
index index.htm index.php;
# ssl on;
ssl_certificate /etc/letsencrypt/live/arakan60.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/arakan60.site/privkey.pem;
# クライアントのIPアドレス取得
set_real_ip_from 192.168.11.104;
real_ip_header X-Forwarded-For;
--- 以下省略 ---
Webサーバー側でも同じように【 http://url 】のアクセスを、全て【 https://url 】にリダイレクトし、SSLの暗号化処理を行う設定になっている。
2. リバースプロキシとWebサーバー間を【HTTP】通信にした設定
リバースプロキシとWebサーバー間は、【HTTP】通信にする。
Webサーバーで稼働している「WordPress」のURLは【https】のままとする。
Webサーバーで稼働している「WordPress」のURLは【https】のままとする。
「SSL証明書」は、リバースプロキシにのみ配置すればよく、集中管理が可能となる。従って「SSL証明書」の更新も、リバースプロキシだけで行えばよい。
1. リバースプロキシでの、バックエンドサーバー(Webサーバー)設定。
server {
listen 80;
server_name arakan60.site;
location ^~ /.well-known {
root /home/yaopi/www/wplux;
}
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name arakan60.site;
ssl_certificate /etc/letsencrypt/live/arakan60.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/arakan60.site/privkey.pem;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location / {
proxy_pass http://192.168.11.108;
--- 以下省略 ---
①.80ポート接続を、全て443ポート(https)にリダイレクトさせていたが、SSL証明書を更新する場面で、Let's Encrypt がポート80に接続に来るので、ポート80に /.well-known の locationディレクティブを設けて、rootでトークンへのパスを明示する。
※:証明書の更新(2020.10.02 追記)
https://arakan60.site/.well-known/acme-challenge/xxxxx
で、トークンにアクセスされるので、
ポート 443 に /.well-known の locationディレクティブが必要。
https://arakan60.site/.well-known/acme-challenge/xxxxx
で、トークンにアクセスされるので、
ポート 443 に /.well-known の locationディレクティブが必要。
②.proxy _pass を【http】に変更。
2. Webサーバーでの、nginx 設定。
server {
listen 80;
server_name arakan60.site;
root /home/yaopi/www/wplux;
index index.htm index.php;
# クライアントのIPアドレス取得
set_real_ip_from 192.168.11.104;
real_ip_header X-Forwarded-For;
--- 以下省略 ---
「server」ディレクティブが「listen 80;」のみになり、WebサーバーにSSLの暗号化負荷がかからなくなる。
3. WordPressでの設定。(wp-config.php に追記。)
注意: FORCE_SSL_LOGIN は Version 4.0 で廃止されました。
注意: FORCE_SSL_LOGIN は Version 4.0 で廃止されました。
define('FORCE_SSL_ADMIN', true);
$_SERVER['HTTPS'] = 'on';
WordPressを強制的にSSL化することで、WordPressが吐き出す絶対URLが
<script src="https://..." ></script>
となる。
リバースプロキシの使用 #
SSL を提供するリバースプロキシにより WordPress がホストされ、自身は SSL なしでホストされる場合、このオプションを設定すると当初すべてのリクエストが無限リダイレクトループに陥ります。これを避けるには HTTP_X_FORWARDED_PROTO ヘッダーを認識するように WordPress を構成してください。ここでリバースプロキシは適切に構成されており、ヘッダーを設定するものとします。
define('FORCE_SSL_ADMIN', true); if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) { $_SERVER['HTTPS']='on'; }
3. Duplicator の installer.phpでの引越について
【HTTP】通信にしたWebサーバーで稼働している「WordPress」を、バージョンアップ等で引越をする必要に迫られる時がある。
Duplicator を使って引越す場合、installer.php で「デプロイ」を行う際に、【wp-config.php】が存在するとエラーが出るので、【wp-config.php】をリネームするか削除する。
この状態で、installer.php での「デプロイ」は、問題なく動く。
「Admin Login」をクリックする前に、【wp-config.php】を編集して強制的にSSL化すれば、問題なくログインできる。
参考:
以上。
(2020.09.12)
(2020.09.12)
スポンサー リンク