2010-07-21 3 views
1

동일한 웹 서버를 가리키는 도메인이 여러 개 있고 들어오는 모든 트래픽을 하나의 일관된 도메인 아래 다시 작성하도록 설정하려고합니다. 요청이 www가 있는지 확인하기 전에이 작업을 수행했습니다. 그것에서, 그러나 나는 사이트가되기 위해 아래 스크립트를 추가했을 때 얼어 붙기 시작했다.HTTP_HOST의 RewriteCond가 사이트를 정지 시켰습니까?

RewriteCond %{HTTP_HOST} !^www\.domain\.com(.*) [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,NC,L] 

내가 (내 다른 재 작성 위) 내 htaccess로이를 추가하고 서버에 파일을 저장 한 후, 사이트는 약 10 초 동안 정상적으로 작동하고 그것에 요청 후 동결이 시작됩니다. 나는 이것이 매우 이상하다는 것을 안다. 이것은 파일이 서버에 저장된 후에 발생한다. 위의 행을 제거하면 즉시 작업이 시작됩니다.

이 이상한 문제의 원인이 될 수있는 것에 대해 조금 분실했습니다.

업데이트 : 변경 전과 변경 전의 내 재 작성 로그를 비교했습니다.

127.0.0.1 - - [21/Jul/2010:12:57:35 -0400] "OPTIONS * HTTP/1.0" 301 333 "-" "Apache/2.2.3 (Red Hat) (internal dummy connection)" 

을 나는 킵 얼라이브이 켜져 있습니까 : 나는 이러한 오류

127.0.0.1 - - [21/Jul/2010:12:57:35 --0400] [280082-web1.dummy.com/sid#2b4899b49d30][rid#2b489a396148/initial] (2) [perdir /var/www/html/] rewrite '*' -> 'http://www.dummy.com/*' 
127.0.0.1 - - [21/Jul/2010:12:57:35 --0400] [280082-web1.dummy.com/sid#2b4899b49d30][rid#2b489a396148/initial] (2) [perdir /var/www/html/] explicitly forcing redirect with http://www.dummy.com/* 

이 많이 나는 또한 같은 타임 스탬프 내 액세스 로그를 확인하고이를 참조하십시오. 이것이 문제의 원인이 될 수 있습니까? 난 ( 한다 RewriteCond % {REMOTE_ADDR} 127.0.0.1

+0

이상한. RewriteLog를 활성화 했습니까? 아마도 오래된 mod_vhost_limit 설정일까요? (메인) 가상 호스트의 구성도 중요 할 수 있습니다. – Wrikken

+0

왜 .htaccess에 로깅을 추가 할 때 오류 500이 발생하는지 (이전에는 로깅을 시도한 적이 없다) 생각해보십시오.코드 : RewriteEngine on RewriteLog "/var/www/rewrite.log" RewriteLogLevel 4 (규칙) –

+0

로깅 지시문은 서버 또는 가상 서버 컨텍스트에만 적용 할 수 있으므로'.htaccess' 파일에 정의 할 수 없습니다. 파일. 또한, 당신의'error_log' 파일에 동결이 시작될 때 어떤 항목이 있었습니까? 그리고 사이트가 상당한 양의 트래픽을 얻었습니까? –

답변

1

나는 이것이 나의 부분에 대한 추측이라고 말함으로써 시작됩니다 :

또한 내 재 작성이 콘드를 추가했는데, 그것은 여전히 ​​오류! 아파치의 처리 측면에 지나치게 친숙하지는 않다.).하지만 주석에 대해서는 약간 길었고, 조금 더 자세히 조사해 보는 것이 도움이 될 것이다.

prefork과 같은 MPM을 실행하고 있기 때문에 아파치의 자식 프로세스 관리 방법에는 깨우기 요청이 전송됩니다. 나는 이것이 GET 요청 이었지만, 실제 자원을 요청하면 서버에이 목적을 위해 불필요한 부담을 줄 수 있다고 생각하면 이제는 OPTION 요청을 보내는 것 같습니다.

또한 KeepAliveOn으로 설정되어 있다고하셨습니다. 요청에 상당한 시간이 걸리면 (일반적인 요청이 진행되는 한), 추가 프로세스를 처리하기 위해 새 프로세스를 생성해야하는 시점까지 하위 프로세스가 연결될 수 있습니다. 따라서 MaxSpareServers 값을 충분히 낮게 설정하면 프로세스가 비워지면 Apache에서 많은 자식을 삭제할 수 있습니다.

그들을 죽이려면 로그에 깨어 났는지 확인하기 위해 OPTION 요청을 설정해야합니다. 이것은 mod_rewrite 규칙에 의해 처리됩니다. 다른 규칙과 함께 사용하면 발생하는 극단적 인 속도 저하를 유발할 수 있습니다.

RewriteCond이 리디렉션을 막지 못하는 이유가 확실하지 않습니다. 시도해 볼 수는 있지만 왜 다른지는 모르겠다.

RewriteCond %{REQUEST_METHOD} =OPTIONS [NC] 
RewriteRule ^.*$ - [R=200,L]  

RewriteCond %{HTTP_HOST} !=www.example.com [NC] 
RewriteRule ^.*$ http://www.example.com/$0 [R=301,L] 
+0

크랩은 여전히 ​​사이트를 얼려 버립니다. 와일드 카드 대신 각 도메인에 RewriteCond를 추가해야한다고 생각합니다. –

+0

젠장. 흠, 나는 완전히 따르지 않는다. 당신이 의미하는 바를 정교하게 해석 할 수 있습니까? –

+0

마찬가지로 : RewriteCond % {HTTP_HOST} = www.foo.com [NC] RewriteCond % {HTTP_HOST} = www.bar.com [OR, NC] RewriteRule ^. * $ http : //www.domain. co.kr/$ 0 [R = 301, L] –