![코드 200을 반환하는 WordPress에서 URL을 만드는 방법은 무엇입니까?](https://rvso.com/image/697044/%EC%BD%94%EB%93%9C%20200%EC%9D%84%20%EB%B0%98%ED%99%98%ED%95%98%EB%8A%94%20WordPress%EC%97%90%EC%84%9C%20URL%EC%9D%84%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
이는 워드프레스 인스턴스용으로 GCP에 로드 밸런서를 구현해야 하기 때문에 필요합니다.
GCP는 상태 테스트를 통과한 경우에만 WordPress 인스턴스에 요청을 전달합니다.
다음은 상태 점검 화면의 일반적인 정의입니다.
'요청 경로'가 200을 반환할 것으로 예상합니다. 그렇지 않으면 대상 시스템이 다운된 것으로 간주됩니다.
그러나 예를 들어 wordpress에서 페이지를 생성하면 /index.php/newpage
항상 301이 반환됩니다.
WordPress 사이트가 실행되는 동안 상태 확인에 실패합니다.
200을 반환하는 WordPress 페이지를 정의할 수 있는 방법이 있습니까? 추가 플러그인을 유지하는 것을 피하고 싶기 때문에 추가 플러그인이 필요하지 않기를 바랍니다.
나에게 최후의 수단은 200을 반환하는 URL을 PHP 서버에 추가하는 것입니다. 그러나 이 URL의 상태는 WordPress 사이트의 상태를 100% 반영하지 않을 수 있습니다(예를 들어 mysql 문제로 인해 다운될 수 있음). 이것이 최후의 수단이라면 이를 구현하는 가장 좋은 방법은 무엇입니까? 저는 PHP 개발에 능숙하지 않습니다.
워드프레스 버전은 4.6.2입니다.
답변1
상태 확인을 위해 WordPress 설치 첫 페이지를 사용할 수 있습니다. 이는 WordPress 사이트를 사용할 수 있다는 가장 신뢰할 수 있는 지표입니다.
답변2
그만한 가치가 있기 때문에 컨테이너에 WordPress 사이트를 설정하고 해당 사이트로 트래픽을 보내기 전에 상태 확인을 받아야 했습니다. "첫 페이지"에 대한 제안은 브라우저를 통해 WordPress가 설치된 후에만 작동합니다. 그 전에는 302 상태 코드를 /wp-admin/install.php
. 나는 컨테이너 폴더를 뒤져보고 /wp-includes/images/blank.gif
상태 확인 경로로 사용하기로 결정했습니다. 이를 통해 상태 확인이 성공하고 트래픽이 컨테이너로 라우팅되기 시작했습니다. 거기에서 브라우저를 통해 WordPress를 설치했고 상태 확인 경로를 다시 /
.
답변3
이것은 오래된 게시물이지만 이 주제는 여전히 관련이 있고 허용되는 답변은 내 사용 사례에 적합하지 않기 때문에 이에 대해 언급하고 싶었습니다. 나는 다른 사람들에게 이것을 제안하지 않을 것입니다. 특히 트래픽이 많은 시스템의 경우.
허용되는 답변에 대한 내 문제는 홈 페이지를 상태 확인으로 사용하는 것이 제안된다는 것입니다. 사이트에 따라 괜찮을 수도 있지만 상태 확인 시 DB를 쿼리할 필요는 없습니다. DB 연결이 실패하더라도 인스턴스는 기술적으로 여전히 정상입니다. 예를 들어 RDS 클러스터가 다운되면 홈 페이지에 DB 오류가 표시되어 500
필요 없이 자동 크기 조정을 트리거하게 됩니다. 상태 확인은 앱을 확인하고 올바르게 설정되었는지 확인하기만 하면 됩니다.
내 홈 페이지에는 많은 쿼리가 있으며 상태 확인만으로도 실제로 다중 인스턴스 설정으로 RDS 클러스터에 불필요한 로드가 발생합니다. 더 가벼운 페이지를 지정할 수 있지만 상태 확인을 통해 인스턴스가 올바르게 설정되었는지 확인해야 하고 회전하는 모든 시스템에 프로젝트별 확인을 추가하고 싶지 않기 때문에 이는 여전히 이상적이지 않습니다. 이에 대한 사용 사례도 있지만.
저는 다음과 같은 간단한 상태 확인( _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;
}
참고할 몇 가지 사항:
- 나는 항상 WordPress를
wordpress
디렉토리에 설치합니다.- 이렇게 하면 디렉터리를 무시할 수 있으므로 Git에서 프로젝트를 유지 관리하는 것이 훨씬 쉬워집니다
wordpress
.
- 이렇게 하면 디렉터리를 무시할 수 있으므로 Git에서 프로젝트를 유지 관리하는 것이 훨씬 쉬워집니다
- 나는 자체 디렉토리에 WordPress를 가지고 있기 때문에
wp-content
프로젝트 관리를 단순화하기 위해 내 디렉토리를 사용하는 것을 좋아합니다. - 필요에 따라 쉽게 수정할 수 있습니다.
이 상태 점검은 시스템이 올바르게 설정되었는지 확인하기만 합니다. 상태 확인에는 필요하지 않으므로 DB를 쿼리할 필요가 없습니다. 이는 처음에 시스템을 설정하기 전에 처리해야 하는 구성 문제입니다.
답변4
편집됨:
나는 /wp-admin/images/wordpress-logo.svg를 사용했습니다(이전 버전에서는 /favicon.ico와 함께 작동했습니다). 해킹처럼 들리지만 wordpress가 작동하지 않으면 5xx 오류가 발생합니다. 그렇지 않으면 200=이미 설치됨, 200 =설치되지 않았습니다.