cacti を reverse proxy の後ろで運用する

cacti を reverse proxy の後ろで運用する場合のちょっとしたコツです。

こんな設定で動作させる場合には、特に問題なく動きます。

location /cacti/ {
    proxy_pass http://back.end.ip.addr/cacti/;
}

基本的に reverse proxy 上のパスとバックエンドの web サーバーのパスを揃えてあげる必要があります。例えば reverse proxy が /saboten/ で受けて、バックエンドの /cacti/ に proxy するような……

location /saboten/ {
    proxy_pass http://back.end.ip.addr/cacti/;
}

こんな reverse proxy の設定にすると、現状(v1.1.0)の cacti ではうまく動作しなくなります1)

こういう場合は、バックエンド側で /saboten/ のエイリアスを設定してあげます。

# nginx の場合
server {
    listen back.end.ip.addr;
    location /saboten/ {
        alias /real/path/to/cacti/;
    }
}
# apache2 の場合
Listen back.end.ip.addr
<VirtualHost back.end.ip.addr>
    Alias /saboten "/real/path/to/cacti"
</VirtualHost>

その上で reverse proxy とバックエンドサーバーで共通のパスを /real/path/to/cacti/include/config.php の $url_path に設定します。

$url_path = '/saboten/';
1)
cacti ソースの中で、何か所か php の $_SERVER{'REQUEST_URI'} を javascript の画面リフレッシュ用のパラメータとして設定しているため、ブラウザーが /cacti/some.php をリクエストしてしまいます。
https://manimani.cc/lib/plugins/linkback/exe/trackback.php/wiki:cacti:reverse_proxy