수백 개의 개별 웹 응용 프로그램을 호스팅하는 IIS 서버가 있으며 이러한 응용 프로그램을 호스팅하는 실제 데이터베이스 서버는 짧은 기간 동안 유지 관리를 위해 오프라인 상태가 될 것입니다 (15 분 미만 소요될 것으로 예상).
해당 기간 동안 모든 웹 사이트에서 들어오는 모든 트래픽을 "현재 유지 보수 중입니다"페이지로 리디렉션하려고합니다.
모든 웹 응용 프로그램으로 이동하여 해당 응용 프로그램의 모든 요청에 대해 다른 페이지로 사용자를 보내는 IIS 다시 쓰기 규칙을 설정하면이 작업을 수행 할 수 있습니다. 그러나 데이터베이스 유지 관리를 수행하는 것보다 그렇게하는 데 시간이 더 오래 걸립니다!
나는 세 가지를 시도했지만 그중 아무것도 효과가 없었습니다.
글로벌 IIS 다시 쓰기 규칙
나는 한 번에 모든 사이트에 규칙을 적용하는 간단한 방법을 찾고 있었고, 그 규칙을 똑같이 고통없이 한 단계에서 "취소"할 수있었습니다. 지금까지 내 시도는 효과가 없었습니다. 이 재 작성 규칙을 W : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config의 전역 web.config에 넣으려고했습니다.
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="redirect all requests" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
</conditions>
<action type="Redirect" url="http://www.somedomain.com/maintenance" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
이 작동하지 않았다. 우리는 IIS에서 .NET 4.0 64 비트를 실행하고 있지만 "경우에 따라"32 비트 및 2.0 글로벌 web.config 파일과 같은 것을 넣었지만 여전히 변경되지 않았습니다.
App_Offline.htm "특수 파일"
내가 본 또 다른 제안은 app_offline.htm "special"파일 이지만 실제로 유지 관리를 수행하는 것 보다이 파일을 모든 앱의 앱 루트에 배포하는 데 시간이 더 걸리는 것과 같은 문제가 있습니다.
IIS의 "오프라인"사이트
모든 사이트는 단일 IP로 IIS에서 설정됩니다. 이는 모든 앱이 단일 SSL 인증서 (UCC)를 공유하기 때문에 SNA 없이도 작동합니다. 나에게 일어난 한 가지 일은 아마도 사용중인 IP와 모든 트래픽을 일치 시키고 호스트 헤더 값을 지정 하지 않은 IIS에서 사이트를 설정할 수 있다는 것 입니다. 희망은 내가 더 높은 "우선 순위"를 부여 할 수 있고 시작될 때 다른 사이트가 일치 할 기회를 갖기 전에 모든 트래픽을 해당 IP로 일치시킬 수 있기를 희망했습니다. 요청 URL에 관계없이 모든 요청에 대해 동일한 페이지를 제공하도록 해당 사이트를 설정할 수 있습니다.
유지 보수를 수행 할 때 해당 사이트를 시작하고 완료되면 중지하십시오.
그러나 IIS가 덜 구체적인 사이트보다 먼저 특정 사이트에 대한 HTTP 요청을 일치시키는 것처럼 보이기 때문에이 작업을 수행 할 수 없었습니다. 따라서이 "오프라인 사용자에게 알리기"사이트에 대한 호스트 헤더 값을 생략하면 요청에 다른 사이트와 일치하는 호스트 헤더 값이 없으면 일치하지 않습니다. 그러면 각 웹앱으로 수동으로 이동하여 오프라인 상태로 전환 한 다음 유지 관리 작업이 완료되면 다시 온라인으로 전환해야하는 동일한 문제가 발생합니다.
이것을 달성하는 간단한 방법이 있습니까? 분명히 우리는이 문제를 처음 겪은 것은 아닙니다.
-조롱