Reverse Proxy SSL証明書の集中管理

Webサーバー サイトの管理
Reverse Proxy サーバーで
SSL証明書を集中管理する
 
リバースプロキシとWebサーバー間も【HTTPS】通信にしていたが、「SSL証明書」の更新に手間がかかるので、リバースプロキシでの一括管理に変更する。
 
リバースプロキシとWebサーバー間を【HTTP】通信にした設定
 
以下、Reverse Proxy で、SSL証明書を集中管理する方式に切り替えた記録。
 
 

 

スポンサー リンク

 

 
 
 
 
 
1. リバースプロキシとWebサーバー間を【HTTPS】通信にした設定
 
リバースプロキシとWebサーバー間も【HTTPS】通信にする。
Webサーバーで稼働している「WordPress」のURLも【https】。
 
リバースプロキシとWebサーバー間を【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サーバー間を【HTTP】通信にした設定
 
「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でトークンへのパスを明示する。
 
②.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 で廃止されました。
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 での「デプロイ」は、問題なく動く。
 
 
但し、installer.php の最後のステップで、「Admin Login」をクリックすると、
installer.php の最後のステップで、「Admin Login」をクリックする
 
「wp-login.php」へのアクセスで、無限リダイレクトループに陥る
「wp-login.php」へのアクセスで、無限リダイレクトループに陥る
 
「Admin Login」をクリックする前に、【wp-config.php】を編集して強制的にSSL化すれば、問題なくログインできる。
 
 
参考:WordPressを強制的にSSL化せずにインストールを実行すると、画面が崩れるがインストールは可能である。
WordPressを強制的にSSL化せずにインストールを実行すると、画面が崩れるがインストールは可能
 
 
参考:
 
以上。
(2020.09.12)
 

 

スポンサー リンク

 

             

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください