dokuwiki を reverse proxy の後ろで運用する
- reverse proxy が受ける url は
http://reverseproxy/ - バックエンドのサーバーが受ける url は
http://ip.addr.back.end/dokuwiki/
こんな設定でいきます。
reverse proxy の設定
server {
location / {
proxy_pass http://ip.addr.back.end/dokuwiki/;
}
}
dokuwiki に限らず nginx を reverse proxy として使う場合は、proxy_pass の url の書き方に注意する必要があります。
proxy_pass http://ip.addr/back.end/dokuwiki/;
……と書くのと、
proxy_pass http://ip.addr/back.end/dokuwiki;
……と、最後のスラッシュを省いて書くのとでは、意味が違うみたいです。nginx 本家
バックエンド のサーバーの設定
dokuwiki 一式は /path/to/htdocs/dokuwiki に展開されています。
server {
listen ip.addr.back.end;
root /path/to/htdocs;
location /dokuwiki/ {
index doku.php;
try_files $uri $uri/ @dokuwiki;
}
location @dokuwiki {
rewrite
^/dokuwiki/_media(.*)
/dokuwiki/lib/exe/fetch.php?media=$1 last;
rewrite
^/dokuwiki/_detail/(.*)
/dokuwiki/lib/exe/detail.php?media=$1 last;
rewrite
^/dokuwiki/_export/([^/]+)/(.*)
/dokuwiki/doku.php?do=export_$1&id=$2 last;
rewrite
^/dokuwiki/(?!lib/)(.*)
/dokuwiki/doku.php?id=$1&$args last;
}
location ^~ /dokuwiki/(data|conf|bin|inc)/ {
deny all;
}
:
:
}
……と、バックエンドサーバーの document root を /path/to/htdocs/dokuwiki にしたくなかったので、こんな感じの設定になってます。
あとは、/path/to/dokuwiki/lib/local.php で、以下の設定を行います。
$conf['baseurl'] = 'http://reverseproxy/'; $conf['basedir'] = '/';
これで http://reverseproxy/ にアクセスすると http://ip.addr.back.end/dokuwiki/start にアクセスした時と同じ結果を得ることができます。 ただし http://ip.addr.back.end/dokuwiki/ の url からはマトモにアクセスできなくなります……両立はちょっと厳しそうです。