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

17/09/2018

概要

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

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

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

https://qiita.com/yoshizaki_kkgk/items/e6f39a5bfb99900b44b2

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のproxy_passは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' );

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

以上です。

追記 let’s encrypt

let’s encrypt

let’s encryptってのが無料で証明書とか発行できるみたいなので

無料でいいよって方はlet’s encryptがおすすめかもです。

切り替え試してみたらば特に問題なさそうなので

僕も無料で(が)いいのですが、もうSSL JPRS契約しちゃったので勿体ないので期限までは致し方なく利用しますが

下記参考にさせていただきました。

https://y-hilite.com/3186/

git clone http request failed

git cloneでhttp request failedってのがでたので

yum update -y nss curl libcurl

yum updateで適当に(Y)yesでアップデートしてたら

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443 nginx

apacheまでアップデートしてしまってたらしくrestart出来ずに焦りましたが

nginxとapacheで重複っぽい気がするので

apache側のlisten

/etc/httpd/conf.d/ssl.confのコメントで解消できました。

/etc/httpd/conf.d/ssl.conf
#Listen 443