Isso é necessário porque preciso implementar um balanceador de carga no GCP para uma instância do Word Press.
O GCP só encaminhará uma solicitação para a instância do wordpress se ela passar no teste de integridade.
Aqui está uma definição típica de uma tela de verificação de integridade
Ele espera que o 'caminho da solicitação' retorne 200. Caso contrário, o sistema de destino será considerado inativo.
Porém se eu criar uma página no wordpress por exemplo /index.php/newpage
, ela sempre retornará 301.
Enquanto o site wordpress está instalado e funcionando, ele falha na verificação de integridade.
Existe alguma maneira de definir uma página no wordpress que retornará 200? Espero que não exija plugin adicional porque eu gostaria de evitar a manutenção de plugin extra.
O último recurso para mim é adicionar um URL ao servidor php que retornará 200. No entanto, o status deste URL pode não refletir 100% a integridade do site wordpress (que pode cair devido a um problema no MySQL, por exemplo). Se for de facto o último recurso, qual é a melhor forma de o implementar? Não sou proficiente em desenvolvimento php.
A versão do wordpress é 4.6.2
Responder1
Você pode usar a página inicial de instalação do WordPress para a verificação de integridade. Este é o indicador mais confiável de que o site WordPress está disponível.
Responder2
Para constar, tive que configurar um site WordPress em um contêiner e fazer uma verificação de integridade para ter sucesso antes mesmo de conseguir direcionar o tráfego para ele. As sugestões para a "página inicial" funcionam somente APÓS a instalação do WordPress através do navegador. Antes disso, eles retornam um código de status 302 para /wp-admin/install.php
. Eu vasculhei as pastas do contêiner e decidi usar /wp-includes/images/blank.gif
como caminho de verificação de integridade. Isso permitiu que a verificação de integridade fosse bem-sucedida e o tráfego começasse a ser roteado para o contêiner. A partir daí instalei o WordPress através do navegador e consegui alterar o caminho da verificação de integridade de volta para /
.
Responder3
Embora este seja um post antigo, gostaria de comentar porque este tópico ainda é relevante e a resposta aceita não é ideal no meu caso de uso. Eu não sugeriria que outros fizessem isso; especialmente para um sistema de alto tráfego.
Meu problema com a resposta aceita é que é sugerido usar a página inicial como verificação de integridade. Dependendo do seu site, isso pode ser bom, mas não vejo necessidade de o banco de dados ser consultado em uma verificação de integridade. Mesmo que a conexão com o banco de dados falhe, a instância ainda estará tecnicamente íntegra. por exemplo, se o seu cluster RDS cair, a página inicial mostrará um erro de banco de dados que fornecerá um erro 500
para que você acione seu escalonamento automático sem necessidade. A verificação de integridade só precisa verificar o aplicativo e certificar-se de que está configurado corretamente.
Minha página inicial tem muitas consultas e a verificação de integridade por si só colocará carga desnecessária no cluster RDS com minha configuração de múltiplas instâncias. Eu poderia especificar uma página mais leve, mas isso ainda não é ideal, pois a verificação de integridade deve garantir que a instância esteja configurada corretamente e não quero que uma verificação específica do projeto seja adicionada a cada sistema que eu ativar. Embora existam casos de uso para isso também.
Eu uso esta simples verificação de integridade ( _healthCheck.php
):
<?php
/**
* Check if basic WordPress structure is in place
* This is to be used for load balancer health checks
*/
// Checks
define('WORDPRESS_CONFIG', __DIR__ . DIRECTORY_SEPARATOR . 'wp-config.php');
define('WORDPRESS_DIRECTORY', __DIR__ . DIRECTORY_SEPARATOR . 'wordpress');
define('WP_CONTENT_DIRECTORY', __DIR__ . DIRECTORY_SEPARATOR . 'wp-content');
// Health Check Flags
$_healthCheckStatus = true;
// Will stop the while loop
$_healthCheckCompleted = false;
// Just to be safe
try {
// DoWhile loop here to simplify kicking out on a false $_healthCheckStatus
do {
// Check if wp-config exists
if (!file_exists(WORDPRESS_CONFIG)) {
$_healthCheckStatus = false;
}
// Make sure we have required directories
$_healthCheckStatus = _dirIsValidAndNotEmpty(WORDPRESS_DIRECTORY);
$_healthCheckStatus = _dirIsValidAndNotEmpty(WP_CONTENT_DIRECTORY);
// Checks are complete, kick out the loop
$_healthCheckCompleted = true; // Just say no to infinity and beyond
} while (false === $_healthCheckCompleted && true === $_healthCheckStatus);
} catch (\Exception $e) {
// Health check fails
$_healthCheckStatus = false;
}
// If a bad healthcheck, return 404 to tell the load balancer we suck
if (false === $_healthCheckStatus) {
header("HTTP/1.0 404 Not Found");
?>
<html>
<body><h1>Health is bad</h1></body>
</html>
<?php
die();
} else {
?>
<html>
<body><h1>Health appears good</h1></body>
</html>
<?php
}
/**
* Validates a directory and ensures it's not empty
* @param string $dir
* @return bool
*/
function _dirIsValidAndNotEmpty($dir) {
// Make sure we have a directory
if (is_dir($dir)) {
// Make sure it's not empty
$_dirIsNotEmpty = (new \FilesystemIterator($dir))->valid();
if ($_dirIsNotEmpty) {
return true;
}
}
return false;
}
Algumas coisas a serem observadas:
- Eu sempre instalo o WordPress no
wordpress
diretório.- Isso torna muito mais fácil manter um projeto no Git, pois você pode simplesmente ignorar o
wordpress
diretório.
- Isso torna muito mais fácil manter um projeto no Git, pois você pode simplesmente ignorar o
- Como tenho o WordPress em seu próprio diretório, gosto de usar o meu próprio
wp-content
para simplificar o gerenciamento de projetos. - Você pode modificar isso facilmente de acordo com suas necessidades.
Esta verificação de integridade verifica apenas o sistema para garantir que esteja configurado corretamente. Não há necessidade de consultar o banco de dados, pois isso não é necessário para a verificação de integridade. Esse é um problema de configuração que deve ser resolvido antes de você configurar seu sistema.
Responder4
Editado:
Eu usei /wp-admin/images/wordpress-logo.svg (em versões anteriores funcionou com /favicon.ico) Parece mais um hack, mas se o wordpress não funcionar, você receberá um erro 5xx, caso contrário, 200 = já instalado, 200 =não instalado.