2009-04-24 2 views
0

제 제작 상자 중 하나에서 매우 이상한 문제가 나타납니다. IIS 6에는 단일 컴퓨터에서 Apache 웹 서버가있는 응용 프로그램이 호스트됩니다. 내 응용 프로그램은 ASP.NET 멤버 자격을 사용하여 인증하고 세션 상태를 사용합니다. 세션 변수에 액세스하려고 시도 할 때 일부 서버 요청이 null 예외를 발생시키는 문제가 발생하지만 요청이 다시 시도되면 예외가 발생하지 않고 제대로 작동합니다.한 요청에 대해 ASP.NET 세션을 잃어 버리고 다음에 다시 가져옵니다.

나는 이것이 세션 ID 쿠키와 관련이 있다고 생각한다. 요청에 대해 손상되었거나 손실되었지만 그 원인을 알 수는 없다. 이유는 ASP.NET이 쿠키를 보지 않고 변수가 null 인 이유를 설명하는 새 세션을 만드는 것이 아니기 때문입니다. 예외가 발생하면 새 SessionID 쿠키를 클라이언트에 다시 쓸 수 없기 때문에 클라이언트는 여전히 원래 SessionID를 유지 관리합니다. 다음 요청이 전송되면 원래 SessionID 쿠키가 사용됩니다. 이제 ASP.NET은 세션 상태를 찾아서 검색 할 수 있습니다. 이것은 순수한 추측이지만, 증상에 맞는 것 같습니다.

또한이 사이트는 ASP.NET 멤버쉽과 ASP.NET 세션에 필요한 쿠키 이외의 다른 쿠키를 사용하지 않으므로 IE의 쿠키 제한을 잘 준수합니다. 이 사이트는 약 8 개월 동안 제대로 작동했으며 최근이 문제가 최근에 나타났습니다. IIS 재설정을 시도하고 실제로 시스템을 재부팅했지만 문제를 해결하는 데 도움이되지 않은 것으로 보입니다.

업데이트 :

다음은 몇 가지 설명입니다.

1) 1. Apache 서버는 인터넷에 노출 된 유일한 서버입니다. 모든 요청은이 상자에 HTTPS를 통해 발생합니다. Apache 상자는 HTTP를 통해 과거의 모든 요청을 애플리케이션 서버로 전달합니다. 보안상의 이유로이 작업이 진행 중입니다. 우리는 아파치가 문제 였는지 보려고했지만 아파치 로그에는 오류가없는 것으로 보인다.

2. 실제 세션 개체 자체에서 발생하는 예외 상황과 달리 응용 프로그램에서 세션에 저장된 개체에 액세스하려고하면 null 예외가 발생합니다.

+0

"보안"이유로 Apache 상자에서 IIS 상자로 요청을 전달하고 있습니까? 나는 당신의 네트워크 친구들이 그들이하는 일을 잘 알고 있다고 생각하지 않는다. – NotMe

+0

우리는 DMZ 구역을 가지고 있습니다.이 구역은 우리의 응용 프로그램 앞에 기본적으로 다른 레이어가있어서 그물에 노출되지 않습니다. 또한 IIS7로 업그레이드하지 않는 한 .NET 기술 스택으로는 할 수없는 URL 재 작성을 허용합니다. – Broc

+0

설정을 명확히 할 수 있습니까? IIS 6이 "앞에서 아파치 웹 서버를 가지고 있다는 것을 알았습니다." 실제로 웹에서 HTTP 요청을 처리하는 것은 무엇입니까? 또한, 실제 Session 객체에 대한 null 예외입니까? Session에있을 것으로 예상되는 객체가 없습니다. 그 중 하나가 ... 글쎄, 결코 일어나면 안된다! 세션 ID 쿠키가 손실 된 경우에도 ASP.NET은 새로운 유효한 Session 개체를 만들어야합니다. – Bryan

답변

0

우리는 문제의 근본을 발견했습니다. IIS 메타베이스가 앱 서버에서 손상된 것처럼 보입니다. 이 문제를 해결하는 가장 좋은 방법은 IIS를 새로 설치하는 것입니다. 그러나 비즈니스 제약 때문에이 옵션을 사용할 수 없습니다. 그래서 또 다른 해결책은 실제로 응용 프로그램이 실행될 새로운 응용 프로그램 풀을 만드는 것입니다. 나보다 IIS에 대한 전문 지식이있는 사람들은 단기간에 문제를 해결할 것이지만,이 앱 풀에도 똑같은 문제가 발생할 가능성이 높습니다. 따라서 다시 발생하기 시작하면 새로운 앱 풀을 만들어야합니다.

관련 문제