让位于反向代理后的wordpress获得真实ip

由于freeshell使用nginx作为反向代理,导致apache不能获取到客户端的ip,从而wordpress中评论的ip地址都显示为了nginx反向代理的ip。

在apache上安装mod_rpaf插件,将nginx设置的 X-Real-IP 变量中的真实ip复制到 X-Forwarded-For 变量内:

下载插件:

编译安装:

编辑apache的配置文件:添加一个配置文件

 

 

但诡异的是,wordpress并不认这个 X-Forwarded-For 变量,需要再安装一个叫reverse-proxy-comment-ip-fix的插件,方可获取到真实的客户端ip。

为反向代理后的wordpress添加https

今天我兴高采烈的申请完startssl的免费ssl证书后,就想部署到freeshell上,将证书和私钥都上载好了后,通过https访问博客发现大量的css,js都是http格式的,导致浏览器自动禁用了不安全的脚本,使网站看起来一团糟。我赶紧在wordpress控制台中将网站地址改成了https开头的,结果不仅仍然一团糟,还导致wp-admin管理控制台无限重定向了。

接着,我在qq上咨询了boj,得知freeshell前端采用nginx进行反向代理,使用服务器头x-scheme向后端传递所使用的协议。我猜测是这样的:

结果wordpress认为当前使用的协议是http,又因为将站点地址设置为了https,导致登陆时wordpress无限重定向到https,且用https访问时所用资源使用http加载。 所以只要让wordpress认为是通过https访问的即可。

设置方法如下,在apache的配置文件中加入下面的内容:

意思就是如果x-scheme满足https开头就将服务器变量https设为on,这样wordpress在检测变量 $_SERVER["https"]时得到的结果就是on,就能正常显示了。