PSGI 环境下的MT留言IP问题,其实很简单 Movable Type,站务记录
切换 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,解决就好。
--EOF--