
Então aqui está o problema:
Balanceador de carga (haproxy) entregando para 3 servidores web e um servidor de banco de dados, 5 servidores no total com sessões de memcache sendo compartilhadas entre os servidores web. Posso confirmar que PHPSESSIONID
está sendo compartilhado entre os servidores web, porém quando tento fazer login, ele $_POST
continua sendo redefinido e o cookie logado nunca é definido, resultando em um redirecionamento constante para a página de login.
Eu configurei appsessionid
o haproxy e isso funciona, mas vai contra o propósito de usar um balanceador de carga em minha mente, já que a maioria dos usuários estará logada, então é bastante provável que um servidor receba mais tráfego do que outros. Alguém já encontrou isso e alguma idéia de como resolvê-lo? Ou sou forçado a usar sessões fixas?
EDITAR 1:
Pesquisei mais e percebi que poderia economizar $_POST
, $_SESSION
mas poderia haver algumas preocupações de segurança. Meu pensamento seria apagá-lo da sessão na ação de desligamento em todas as páginas. Pensamentos?
EDITAR 2:
Aqui está/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
Responder1
Eu sei que este é um tópico antigo, mas me pergunto se houve alguns redirecionamentos 303 no servidor web. Nesse caso, o cliente tentará novamente com GET e os dados do POST serão perdidos. Use o redirecionamento 307.
Responder2
Eu uso isso em sites que retornam dados seguros (https) e não seguros (http) na mesma página:
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
Em seguida, atualizei as configurações do WP para o site em 'http://some_site.com' para 'https://some_site.com'.
Isso funcionou como esperado.