PSGI 環境下的MT留言IP問題,其實很簡單

切換 MT 運行環境為nginx + PSGI,後台速度的确刷一下上去了。 但是,由于是所有的 cgi/pl 文件其實都交給了服務器的 mt-starman-daemon 本地網關守護進程, 所以所有的程序的來訪IP都會變成 127.0.0.1 。 檢查一下後台日志,的确如此,其他都不重要,但是留言/評論 的IP地址就不能不說遺憾。

檢查配置 mt-starman-daemon 時的增加的 nginx 設置,如下:

codelocation /cgi-bin/mt/ {
proxy_set_headerHost $http_host;
proxy_set_headerX-Forwarded-Host $host;
proxy_set_headerX-Real-IP $remote_addr; 
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass  http://starman;
}

配置中明确有原始訪問的IP。。 那麼還是看 MT 的程序。 根據直覺,直接查看 MT/App.pm, 搜索關鍵詞 $ENV{REMOTE_ADDR},結果定位到如下:

codemy $trusted = $app->config->TransparentProxyIPs || 0;
my $remote_ip = (
      $ENV{MOD_PERL}
    ? $app->{apache}->connection->remote_ip
    : $ENV{REMOTE_ADDR}
);
$remote_ip ||= '127.0.0.1';
my $ip
    = $trusted
    ? $app->get_header('X-Forwarded-For')
: $remote_ip;

呃, MT 本身就有這個功能。。。。。也就是 TransparentProxyIPs 。 這下簡單了。 打開 mt-config.cgi, 增加以下設置:

TransparentProxyIPs 1

保存。 重啟動 mt-starman-daemon。

再次發一條評論,測試可以正常獲取原始IP地址。

彎路一堆。 幸好OK。

MovableType.org 一搜索。有詳細解釋,地址如下: https://movabletype.org/documentation/appendices/config-directives/transparentproxyips.html

-bbb。

Anyway,解決就好。