환경:애플리케이션 서버로부터 특정 포트의 페이지를 요청하는 웹 서버입니다.
질문:애플리케이션 서버에서 실행 중인 특정 웹 애플리케이션을 다시 시작하는 동안 애플리케이션 서버에 페이지 요청이 들어오면 시작이 중단됩니다.
질문:웹 애플리케이션을 시작하는 쉘 스크립트 시작 부분에 특정 포트(또는 리디렉션)에 일종의 블록을 포함하는 것이 가능합니까? 이는 "즉시" 작동해야 하며, 물론 셸 스크립트 끝에서 반대로 작동해야 애플리케이션이 실행되고 나면 요청이 정상적으로 흐르게 됩니다.
답변1
응용 프로그램 서버 컴퓨터에서:
응용 프로그램을 시작하기 전에:
iptables -I INPUT -d <app server ip> --dport <app server port> -j REJECT
시작이 완료된 후:
iptables -D INPUT -d <app server ip> --dport <app server port> -j REJECT
필요한 경우 "애플리케이션이 로드 중입니다."라고 표시된 다른 서버로 트래픽을 리디렉션할 수도 있습니다. 이 경우 다음을 교체하십시오.
-j REJECT
그리고
-j DNAT --to-destination <ip address of other machine>
이 두 명령에 대해. 이렇게 하려면 IP 전달을 활성화해야 합니다. 구성이 필요합니다:
net.ipv4.ip_forward = 1
존재하다/etc/sysctl.conf
이는 다음 부팅 시 적용됩니다. 실행 중인 시스템에 즉시 적용하려면:
echo 1 > /proc/sys/net/ipv4/ip_forward
또한 수신 서버가 해당 서버에서 시작된 것처럼 보이도록 애플리케이션 서버에서 서버로의 트래픽을 위장할 수도 있습니다(즉, 소스 IP 주소를 다시 작성). 다음 방법으로 이를 수행할 수 있습니다.
iptables -t nat -I POSTROUTING -o <interface traffic will get out> -j MASQUERADE
또 다른 옵션은 애플리케이션 서버와 동일한 시스템에 다른 서버가 있고 "애플리케이션이 페이지를 로드 중입니다"라고 표시된 다른 포트에 있는 경우 트래픽을 해당 포트로 리디렉션할 수 있다는 것입니다. REJECT/DNAT 대신에 같은 아이디어입니다.
-j REDIRECT --to-port <other local server port number>
이 옵션은 애플리케이션 서버를 라우터로 변환할 필요가 없습니다 :) (ip_forward는 필요하지 않습니다)