さくらVPS(CentOS)でnginxフロントに置いてSSLリバースプロキシでapache表示とWordPressのリダイレクト等

17/09/2018

概要

google検索等で常時SSL化した方がいい流れっぽいので
少し遅ればせながら本サイトで対応してみた際詰まった箇所等があったのでのメモです。

さくらVPS(CentOS)で
Nginxからのリバースプロキシでapache(wordpress)表示するといった流れですが
サーバー周りとリクエストヘッダとか知識乏しいので、とりあえずこれで動きましたよっていう設定です。

SSLの証明書周りは下記とか参考にしました。

SSL JPRSってのが追加された?のか一番安いので入れてみました。
入れてから気づいたけどサブドメインはまた別で用意するかワイルドカードSSL証明が必要っぽい
しかも高い。追って考えます。

nginx

//nginx default.conf
server{
 listen 80;
  server_name   domain.com;
 return 301 https://$host$request_uri;
 // httpリクエストはhttpsにリダイレクト
}
server{
 listen 443;
 server_name   domain.com;
 ssl on;
 ssl_certificate /path/to/server.crt;
  ssl_certificate_key /path/to//server.key;
 proxy_set_header Host $http_host;
 proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Proto https;
 proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Server $http_host;
 location / {
    proxy_pass http://127.0.0.1:8888;
   // apacheにリバースプロクシ
  }
}

多分Nginx->apacheの流れはhttpでよいみたい?です。

apache

//apache virtual.conf
<VirtualHost *:8888>
  ServerName domain.com
 DocumentRoot /var/www/html/domain.com/
</VirtualHost>

wordpress

でNginxとapacheをrestartしたらサーバー側はOKなハズ。
後wp_optionのsiteurl/homeをhttpsに変更ました。

がwordpress側でリダイレクトがうまく行ってないみたいで結構色々な記事見て苦戦したのですが

僕の場合WP側にも下記追記で一応うまく動きました。

//wp-config.php
define('WP_DEBUG', false);
define('FORCE_SSL_ADMIN', true);
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
  $_SERVER['HTTPS']='on';
}
# 管理画面でのhttpsを強制する設定みたなのっぽい
# HTTP_X_FORWARDED_PROTOってのがnginxで設定したproxy_set_header X-Forwarded-Proto https;ヘッダが関係してるっぽい。かな?

あとhome画面/index.phpでもリダイレクトループみたいな感じになって表示できなかったので
最新バージョンでは書かなくても大丈夫になったとかなんやかんや情報あったんですが
下記追記というかtemplate_redirectのアクションコメントで一応期待どおりの動きになりました。

//wp-includes/template-loader.php
-  do_action( 'template_redirect' );
+ // do_action( 'template_redirect' );

ただの羅列&原因とか対処適当でとりあえず動いたよってだけですが
客仕事用のサイトでもないのでとりあえず良しとします。
誰かお困りの方の参考になれば幸いです。

以上です。