Chienomi

DelegateからNginxへのリバースプロキシ切り替え

現状ではDelegateをリバースプロキシとして利用しているのだが、サーバー変更に伴ってNginxへと変更することとなった。

そこでプロキシ設定を行ったが、そのように動作しなかった。

server{
    server_name    journal.reasonset.net;

    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

    location / {
        proxy_pass http://path.to.blog/;
    }
}

これは少し複雑な問題のようだ。

WordPress上でサイトアドレスとしてjournal.reasonset.netを設定した場合、301ループとなりjournal.reasonset.netがリクエストされ続ける。 サイトアドレスを設定しなければDelegateでは動作する。

一方で、Nginxでは「無効なURLです」とrejectされてしまう。

これは恐らくDelegate上でHostヘッダを明示していないため、値としてプロキシが要求する際のpath.to.blogが使われるのに対して、Nginxでは明示しなくてもjournal.reasonset.netを要求するという違いからくるのだろう。

解決方法はふたつある。

ひとつはWordPress上でサイトアドレスにjournal.reasonset.netを設定し、 Delegateにおいても

HTTPCONF=kill-qhead:Host
HTTPCONF=add-qhead:Host:journal.reasonset.net

とするか、もしくはNginx上で

proxy_set_header    Host    path.to.blog;

とするかだ。

Wrote on: 2017-06-19T00:00:00+09:00