反向代理背后的WordPress:未在Safari和IE中设置会话cookie

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反向代理背后的WordPress:未在Safari和IE中设置会话cookie相关的知识,希望对你有一定的参考价值。

我有一个WordPress博客在反向代理(Apache)后面运行。

httpd.vhosts.conf:

<VirtualHost  *:80>
    ServerName blog.domain.com:80
    ServerAlias www.blog.domain.com
    ProxyPass / http://192.168.101.11/blog/
    ProxyPassReverse / http://192.168.101.11/blog/
</VirtualHost>

博客工作正常,我可以作为管理员登录,但当尝试保存设置或删除插件(并发生wp_redirect)时,我被重定向到登录页面,因为wordpress显然没有找到/接受会话cookie,并且该行动未完成。

因此,我添加了这一行:

    ProxyPassReverseCookiePath / http://192.168.101.11/blog/

(见Apache proxy cookies works only with the first app

这似乎解决了这个问题。但是,我现在已经注意到,使用此设置,登录根本不起作用,但仅限于Safari和IE(在Opera,Firefox,Chrome中工作得很好)。我只是再次被重定向到登录页面。

一些其他信息:

  • 管理部分的会话cookie和wordpress_test_cookie根本不是在Safari中创建的,只有像"__uc*"等那样(对于博客本身)。如果没有ProxyPassReverseCookiePath条目,它们就会被创建。
  • 我为第三方网站(在两个浏览器中)激活了cookie,但这并没有解决问题。
  • 我用这种方式配置了WP-cookies:

WP-config.php文件

define('COOKIE_DOMAIN', '.blog.domain.com');
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');
define('ADMIN_COOKIE_PATH', SITECOOKIEPATH . 'wp-admin' );
答案

解决了它:

我在cookie路径配置中犯了一个小错误。它一定要是:

ProxyPassReverseCookiePath http://192.168.101.11/blog http://blog.domain.com
另一答案

ProxyPassReverseCookiePath执行cookie的path属性的转换。此属性仅包含路径,因此将完整URL传递给指令将不起作用。如果没有ProxyPassReverseCookiePath指令,我不确定为什么它不起作用,但我认为Wordpress不尊重你设置的COOKIEPATH

正确的配置是:

ProxyPassReverseCookiePath /blog/ /
ProxyPassReverseCookieDomain 192.168.101.11 .blog.domain.com

这将改变你的cookie的pathdomain,从而使你在wp-config.php中所做的设置过时了。

以上是关于反向代理背后的WordPress:未在Safari和IE中设置会话cookie的主要内容,如果未能解决你的问题,请参考以下文章

反向代理背后的 Csrfguard

Apache反向代理背后的Keycloak

反向代理背后的密钥斗篷

Nginx 反向代理背后的 Grafana 返回 alert.title

公共反向代理背后的 WCF Webservice

Apache 反向代理背后的 Apache Zeppelin