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 からはマトモにアクセスできなくなります……両立はちょっと厳しそうです。