为什么/wp-login.php不能实现负载均衡?

时间:2017-11-13 作者:Bratchley

我看到有几个问题贴出来了,但它们要么没有通过这个特定的项目,要么没有得到回答。

基本上,我在同一wordpress网站的两个实例之间设置了负载平衡nginx 在前面。为了成功登录,我必须锁定所有请求/wp-admin/wp-login.php 到特定服务器。哪台服务器似乎无关紧要,只要所有请求都转到同一台服务器。

起初,我以为有一台服务器在保存会话数据,但我对PHP会话进行了集群,结果发现它没有保存任何内容。我检查了cookie,但没有显示任何服务器敏感信息(只有具有静态值的WP测试cookie)。我不断监视文件系统,查看是否有文件正在某个后端应用程序服务器上创建,但没有结果。我甚至检查了登录表单,它似乎和它们一样基本。

我真的不知道为什么WP会关心哪台服务器实际得到了POST 要求

如果你愿意,我可以提供nginx配置,但它非常简单,我不想把这篇文章弄得一团糟。

1 个回复
最合适的回答,由SO网友:jaswrks 整理而成

需要检查的几件事:

审查wp_salt. 确保所有web服务器都在中的同一组盐上运行wp-config.php 文件理想情况下,这些应该从单个位置镜像。

查看is_ssl() 并确保此功能正确检测所有web服务器上的SSL。我已经看到,当负载平衡器在端口上建立内部连接时,这个小功能会引起很多麻烦80 到web服务器。如果is_ssl() 没有检测到这一点(由于负载平衡),这可能导致此问题;i、 例如,可能的cookie协议更改。

一个快速解决方案是检查wp-config.php

if ( ! empty( $_SERVER[\'HTTP_X_FORWARDED_PROTO\'] )
        && strcasecmp( $_SERVER[\'HTTP_X_FORWARDED_PROTO\'], \'https\' ) === 0 ) {
    $_SERVER[\'HTTPS\'] = \'on\'; // Convince WordPress.
}
查看$_SERVER[\'REMOTE_ADDR\'] 环境变量,并确保在所有web服务器上以相同的方式填充该变量。WordPress有许多插件将使用此功能,而不考虑负载平衡的情况。

最简单的检查方法是转储<?php phpinfo(); 在一些web服务器上,检查它们是否都正确设置了此选项。或者实际IP地址最终是否为HTTP_X_FORWARDED_FOR, HTTP_CLIENT_IP, 还是别的什么?简而言之,通过修复REMOTE_ADDR.

确保所有web服务器的系统时间同步。

更仔细地研究任何以防止暴力攻击为目标的插件,因为这些插件更有可能进行一些严格的验证;e、 例如,测试用户代理、IP地址、IP地址的更改等。他们的工作不是被愚弄,但有时会产生误报。

如果问题仍然存在,请发布您正在运行的活动插件列表和您提到的Nginx配置。FastCGI参数以及您可能有或没有的任何代理配置都值得一看。

结束

相关推荐

Nginx重写规则与WordPress永久链接规则冲突

nginx url重写规则面临问题。我想要的是服务http://example.com/2015/03/23/post-title/ 有人试图访问时的页面http://example.com/2015/03/23/myfeed/post-title/ url。它应该返回200状态。我尝试了下面的重写规则,当wordpress permalink设置为默认值时,它可以正常工作,但当我将permalink设置为自定义时,下面的规则就不起作用了。location ~ ^(.*)/myfeed(.*) {