ELB (https) + nginx에서 상태 확인이 발생하는 문제
구성
간단한 그림입니다.
문제가 발생한 설정
h tp : // 쿠이타. 이 m/s의 구치/있어 ms/f5cb67592f87942480d
소개, 이 기사를 참고로 다음과 같이 설정했습니다.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com; # 利用するドメインを設定
# アクセスが http なら https としてリダイレクト
if ($http_x_forwarded_proto != https) {
return 301 https://$host$request_uri;
}
location / {
root /var/www/index/;
index index.html;
}
}
이제 한 번은 잘 작동했지만 잠시 후 페이지에 액세스 할 수 없으며 503 Service Unavailable: Back-end server is at capacity
라는 상태가 반환되어 더 이상 표시 할 수 없습니다.
분명히 ELB의 상태 확인이 끝나고 ec2가 제거 된 것 같습니다.
원인
헬스 체크 자체는 http 로 가고 있었으므로, $http_x_forwarded_proto
는 http.
https 로의 리디렉션의 조건에 합치해, 상태 코드 301 을 돌려주었으므로 헬스 체크로 fail 판정이 되어 제외되었다.
라는 것이 원인이라고 추측되었습니다.
대처
대처는 몇 가지 생각할 수 있습니다.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com; # 利用するドメインを設定
# アクセスが http なら https としてリダイレクト
if ($http_x_forwarded_proto != https) {
return 301 https://$host$request_uri;
}
location / {
root /var/www/index/;
index index.html;
}
}
그 밖에도 방법은 여러가지일까 생각합니다.
여기서는 최후의 default_server 와 server_name 로 다른 server 문맥 작성해 나누는 방법으로 대응했습니다.
기존 도메인 지정 서버 컨텍스트
default_server
를 제거하고 상태 확인을 위해 1px gif를 반환하는 컨텍스트를 추가합니다. # health check 用 (とにかく 200 を返せれば OK)
server {
listen 80 default_server;
listen [::]:80 default_server;
root /usr/share/nginx/html;
location / {
# empty_gif というモジュールで 1x1 の透過 gif を返します
empty_gif;
access_log off;
break;
}
}
server {
# default_server を削除
listen 80;
listen [::]:80;
server_name example.com; # 利用するドメインを設定
# アクセスが http なら https としてリダイレクト
if ($http_x_forwarded_proto != https) {
return 301 https://$host$request_uri;
}
location / {
root /var/www/index/;
index index.html;
}
}
이제 문제없이 가동하게 되었습니다.
단, 위의 설정은 IP 직접 액세스하면 1px gif가 표시됩니다.
대응한 이슈가 폐쇄된 사이트에서 IP로 액세스할 필요가 전무이기 때문에 이러한 설정이 되었습니다만, IP에서도 도메인에서도 동일하게 액세스시키고 싶은 경우는, 헬스 체크를 고려한 설정을 생각할 필요가 있다고 생각합니다.
Reference
이 문제에 관하여(ELB (https) + nginx에서 상태 확인이 발생하는 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ameyamashiro/items/63793a02d66b6c48ec09텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)