現状では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;
とするかだ。