haproxy 背后的 WordPress:$_POST 正在重置

haproxy 背后的 WordPress:$_POST 正在重置

情况是这样的:

负载平衡器 (haproxy) 为 3 个 Web 服务器和一个数据库服务器提供服务,总共 5 个服务器,Web 服务器之间共享 memcache 会话。我可以确认PHPSESSIONIDWeb 服务器之间共享了 memcache 会话,但是当我尝试登录时,它$_POST不断重置,并且登录 cookie 从未设置,导致不断重定向到登录页面。

我已经设置了appsessionidhaproxy,并且它有效,但在我看来,这违背了使用负载平衡器的目的,因为大多数用户都会登录,所以很可能一台服务器会比其他服务器接收更多的流量。有人遇到过这种情况吗?有什么解决办法吗?还是我被迫使用粘性会话?

编辑1:

做了一些研究,发现我可以保存$_POST$_SESSION但可能会存在一些安全问题。我的想法是在每个页面的关闭操作中将其从会话中清除。有什么想法吗?

编辑2:

以下是/etc/haproxy/haproxy.cfg

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    daemon
    user haproxy
    group haproxy

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL).
    tune.ssl.default-dh-param 2048
    ssl-default-bind-ciphers LONG LIST OF CIPHERS

defaults
    log     global
    balance leastconn
    mode http
    option httplog
    option dontlognull
    option redispatch
    option http-server-close
    option forwardfor
    option abortonclose
    maxconn 3000
    retries 3
    timeout queue 1m
    timeout connect 10s                                                                                                                                
    timeout client 5m
    timeout server 5m
    timeout http-request 5s
    timeout http-keep-alive 10s
    timeout check  10s

frontend www-http
    bind xxx.xxx.xxx.xxx:80
    reqadd X-Forwarded-Proto:\ http
    redirect scheme https if !{ ssl_fc }
    default_backend wordpress-backend

frontend www-https
    bind xxx.xxx.xxx.xxx:443 ssl no-sslv3 crt /etc/ssl/private/default.pem crt /etc/ssl/private/
    rspadd  Strict-Transport-Security:\ max-age=15768000
    reqadd X-Forwarded-Proto:\ https
    default_backend wordpress-backend

backend wordpress-backend
    option httpchk HEAD /haphealth
    server wordpress-1 xxx.xxx.xxx.xxx:8081 maxconn 10 check
    server wordpress-2 xxx.xxx.xxx.xxx:8081 maxconn 10 check
    server wordpress-3 xxx.xxx.xxx.xxx:8081 maxconn 10 check

答案1

我知道这是一个老话题,但我想知道 Web 服务器上是否存在一些 303 重定向。在这种情况下,客户端将使用 GET 重试,POST 数据将丢失。请改用 307 重定向。

答案2

我在同一页面上返回安全(https)和不安全(http)数据的网站上使用它:

frontend WordPress
 mode http
 option httplog
 bind <ip_address>:80 transparent
 bind <ip_address>:443 transparent ssl crt <path_to_cert>
 http-request set-header X-Forwarded-Proto https #  <------ This is the line makes sure everything that's requested is HTTPS
 redirect scheme https code 307 if !{ ssl_fc }
 default_backend wp_backend

然后,我从“http://some_site.com' 到 'https://some_site.com“”。

一切如预期般顺利。

相关内容