Directorio de artigos
Un único servidor que executa varios sitios web de WordPress que comparte Memcached está a causar problemas de sobrescritura de datos ou conexión cruzada?
Este artigo ofrece unha guía paso a paso sobre como illar perfectamente os datos da caché de obxectos e transitorios en diferentes sitios configurando un prefixo de caché separado (WP_CACHE_KEY_SALT) e scripts de caché de obxectos.
Elimina ao 100 % os conflitos de datos, o que permite que varios sitios gocen da experiencia definitiva de aceleración a nivel de memoria simultaneamente e inclúe consellos de seguridade para evitar erros nos entornos de produción.
Hai uns días, un amigo preguntoume polos seus tres sitios web de WordPress que se executan no seu servidor. Quería configurar Memcached para aceleralos, pero preocupáballe que os datos se desordenasen.
Rin nese momento porque eu mesmo caera nesa trampa.

Sinceramente, Memcached é incriblemente doado de configurar para un só sitio, pero faise interesante cando se trata de varios sitios coexistindo. Por que?
Por defecto, Memcached coloca as cachés de obxectos e transitorias de todos os sitios web no mesmo grupo. Imaxina que os sitios web A e B usan a mesma clave de caché: iso causaría caos. Os datos de A sobrescribirían directamente os de B e os dous sitios web comezarían a "interferir" cos datos do outro.
O que atopei foi aínda máis ridículo: unha páxina de detalles dun produto nun sitio web de comercio electrónico mostraba o contido dun artigo doutro blog. Quedei completamente abraiado e pensei: "Que é isto?!".
Levoume unha noite enteira averigualo; resultou ser un conflito de clave de caché.
Así que hoxe comparto o meu método de configuración coa esperanza de que poida axudar a amigos coas mesmas necesidades. Aínda o estou explorando eu mesmo e pode que algunhas das miñas ideas non estean completamente desenvolvidas, pero este método funcionou ben para min.
Preparación do entorno do servidor
Antes de comezar a configurar WordPress, debes asegurarte de que o servidor teña instalado o servizo Memcached e a extensión PHP Memcached.
Como instalo Memcached usando HestiaCP?
Tomando Ubuntu como exemplo, só implica tres liñas de comandos.
sudo apt update
sudo apt install memcached php-memcached
sudo systemctl restart php8.x-fpm # 根据你的 PHP 版本改Despois da instalación, lembra comprobar se o servizo Memcached está a funcionar.
sudo systemctl status memcachedSe ves "activo (en execución)", significa que non hai ningún problema.
Ten en conta que os nomes dos paquetes poden variar entre os sistemas. Para os sistemas baseados en Debian, este comando úsase xeralmente; non obstante, para CentOS ou outras distribucións, pode que necesites usar yum ou dnf para instalar.
Naquel momento estaba a usar Ubuntu 20.04 e todo o proceso foi bastante ben.
Operación principal: configurar o prefixo da caché
Este paso é a alma de toda a configuración e a clave para evitar a confusión de datos.
Debes engadir un prefixo de caché único ao ficheiro wp-config.php no directorio raíz de cada sitio web de WordPress.
Abre o ficheiro wp-config.php do primeiro sitio web e busca esta liña de comentarios.
/* That's all, stop editing! Happy blogging. */Engadir por riba desta liña
// 网站 A 的配置
define( 'WP_CACHE_KEY_SALT', 'site1_unique_string_' );Despois, abre o ficheiro wp-config.php no segundo sitio web e engade unha configuración similar.
// 网站 B 的配置
define( 'WP_CACHE_KEY_SALT', 'site2_unique_string_' );Dígoche que a cadea que segue a WP_CACHE_KEY_SALT debe ser absolutamente única . Suxíroche que uses o nome de dominio ou a abreviatura do teu sitio web, como site1_com_ ou site2_net_.
Era preguiceiro e usaba números, pero tres meses despois esquecín por completo cal número correspondía a cada sitio web e tiven que buscalos un por un, o que foi unha auténtica dor de cabeza.
Pensa niso: Memcached funciona almacenando e recuperando datos baseándose en claves de caché. Se defines un prefixo único para cada sitio web, os seus datos estarán illados de forma natural e non interferirán entre si.
Isto é coma darlle a cada sitio web o seu propio armario. Aínda que todos estean na mesma habitación, as chaves son diferentes, polo que os datos non se mesturarán.
Activar o almacenamento en caché de obxectos
Despois de configurar o prefixo, o seguinte paso é permitir que WordPress use realmente Memcached.
Hai dúas opcións aquí, e probei ambas. Cada unha ten as súas propias vantaxes.
Opción 1: Método de complemento (o máis sinxelo)
Inicia sesión no panel de administración de WordPress e instala un complemento de caché que sexa compatible con Memcached.
Recomendo usar W3 Total Cache ; é bastante estable. Despois da instalación, na configuración do complemento, selecciona Memcached como tipo de caché, introduce 127.0.0.1 para o servidor e o porto predeterminado 11211 e, a seguir, garda.
Se queres unha solución máis pura, podes instalar directamente o complemento Memcached Object Cache , que está dedicado a esta tarefa e non ten outras funcións misceláneas.
Para ser sincero, ao principio pensei que o enfoque do plugin era bastante bo, xa que é práctico. Pero máis tarde decateime de que algúns plugins inclúen un montón de funcións que non necesito e sempre estou preocupado polas actualizacións, con medo de que de súpeto engadan algunha función que estrague a miña configuración.
Opción 2: Implementar manualmente object-cache.php (máis controlable)
Se es un pouco perfeccionista coma min e non queres instalar demasiados complementos, podes usar esta solución.
Descarga o complemento Memcached Object Cache desde o repositorio oficial de complementos de WordPress ou busca o ficheiro object-cache.php máis recente en GitHub. Despois, carga o ficheiro object-cache.php extraído no directorio wp-content de cada sitio web mediante FTP ou SSH.
Ten en conta que é o directorio raíz de wp-content, non o subdirectorio de plugins.
Despois de engadilo, WordPress recoñecerá e activará automaticamente a caché. Non precisas configurar nada, porque lerá o WP_CACHE_KEY_SALT que configuraches anteriormente en wp-config.php.
Quería aforrar tempo, así que empreguei esta solución principalmente porque é controlable. Se xorde un problema, sei onde buscar solucións e non me pillarán desprevenidos as actualizacións automáticas dos complementos.
Verificar que a configuración sexa efectiva.
Despois de rematar de preparar a mostra, seguro que quererás saber se tivo éxito, non si?
O xeito máis sinxelo é comprobar o estado de Memcached. Conéctate usando telnet ou as ferramentas nc.
echo "stats" | nc 127.0.0.1 11211Entón verás un feixe de estatísticas. Presta especial atención aos valores de `cmd_set` e `get_hits` e actualiza a páxina unhas cantas veces para ver se están a aumentar. Se o fan, significa que a caché funciona correctamente.
Outra forma máis intuitiva de verificar isto é abrir ambos sitios web simultaneamente e ver se interfiren entre si. Se o sitio web A non mostra contido do sitio web B, basicamente significa que o prefixo está a funcionar.
Fixen unha proba aínda máis rigorosa nese momento. Establecín diferentes valores transitorios en dous sitios web diferentes e despois usei a ferramenta nc para consultar directamente os datos en Memcached. De feito, puiden ver dous pares de chave-valor con prefixos diferentes, sen ningunha confusión.
Nese momento, sentín que realmente conseguira algo grande, e só de pensalo xa me sinto xenial.
Non ignores os problemas de seguridade
Dado que todos os sitios web comparten unha única instancia de Memcached, existe un risco de seguridade que debes ter en conta.
En teoría, se outros usuarios están no servidor, poderían ler os teus datos almacenados na caché a través dun porto local. Aínda que isto require un certo nivel de coñecementos técnicos, sempre é aconsellable ter coidado.
Polo tanto, debes asegurarte de que o teu servizo Memcached non escoita en absoluto enderezos IP públicos . Asegúrate de que esta liña estea presente no ficheiro de configuración `/etc/memcached.conf`.
-l 127.0.0.1Deste xeito, Memcached só escoitará o enderezo de bucle local e non será accesible desde fóra.
Se tes uns requisitos de seguranza extremadamente altos ou se o teu servidor aloxa sitios web que incomodan a outros usuarios, suxíroche que consideres usar Redis en lugar de Memcached. Redis admite o illamento de varias bases de datos e a verificación de contrasinal, o que o fai moito máis seguro.
Non obstante, Redis é lixeiramente máis complexo de configurar que Memcached. Se só o usas para fins persoais ou de equipo pequeno, Memcached co límite de escoita 127.0.0.1 é basicamente suficiente.
Algúns obstáculos atopados
Finalmente, permítanme compartir algúns erros que atopei, coa esperanza de axudarlles a evitar algúns desvíos.
Asegúrate de que a versión da túa extensión PHP sexa compatible . Anteriormente atopeime cunha situación na que instalei a extensión php-memcached, pero WordPress non a recoñeceu. Máis tarde descubrín que se debía a unha discrepancia na versión de PHP. Asegúrate de comprobar coidadosamente a túa versión de PHP ao instalar extensións para evitar instalar a incorrecta.
Asegúrate de que a ruta ao ficheiro object-cache.php é correcta . Debe estar situado no directorio raíz de wp-content, non no directorio dos plugins. Un amigo meu colocouno no lugar incorrecto e pasou moito tempo intentando arranxalo sen éxito.
Non empregues cadeas curtas para o prefixo da caché . Inicialmente empreguei cadeas como a_ e b_, pero decateime de que eran demasiado curtas e chocaban facilmente coas claves de caché xeradas polo propio WordPress. Emprega polo menos unha cadea aleatoria de sete ou oito caracteres ou unha abreviatura de dominio.
Ao limpar a caché, lembra limpar a caché de ambos os sitios web . Unha vez, só limpei a caché dun sitio web, pero o outro sitio web aínda conservaba os datos antigos, o que provocou inconsistencias entre os dous sitios web. Levoume moito tempo descubrir o problema.
Para ser sincero, non sei se estas experiencias serán útiles para todo o mundo, pero compartínas sen reservas.
Escribe ao final
Configurar Memcached para varios sitios non é tecnicamente complicado; o problema principal é configurar o prefixo da caché. Non obstante, o demo está nos detalles. Os problemas coa coincidencia de versións, as rutas de ficheiros e as configuracións de seguranza poden causarche problemas considerables.
Levo case un ano usando este método, teño tres sitios de WordPress á man e, ata o de agora, non atopei ningún problema importante. Se estás a facer algo semellante, quizais queiras probalo.
Por certo, se tes algunha solución mellor ou atopaches algunha trampa interesante, non dubides en deixar un comentario e compartila. Encantaríame aprender de ti.
Despois de todo, canta máis xente saiba disto, menos xente caerá na trampa, non si?
Xa que leches ata aquí, se che resultou útil, por favor, dálle a "Gústame" e compárteo. Se queres recibir actualizacións primeiro, tamén podes seguirme!
Grazas por ler o meu artigo. Ata a próxima.
Esperemos que o artigo "Como compartir Memcached con varios sitios web de WordPress no mesmo servidor? A guía de configuración definitiva para evitar erros ao 100%" compartido no blog de Chen Weiliang ( https://www.chenweiliang.com/ ) che sexa útil.
Non dubides en compartir a ligazón deste artigo: https://www.chenweiliang.com/cwl-34368.html
