Apache는 localhost보다 LAN(Local Area Network)의 다른 컴퓨터에서 더 느립니다.

Apache는 localhost보다 LAN(Local Area Network)의 다른 컴퓨터에서 더 느립니다.

네트워크에 연결된 컴퓨터가 거의 없습니다. 해당 네트워크 내부에는 WAMP(Windows + Apache + PHP + MySQL)를 호스팅하는 서버가 있습니다. Windows 7 x32 Pro가 설치되어 있습니다. 무선으로 연결된 서버에서 해당 서버에 ping을 보낼 수 있으며 모든 ping은 1ms입니다. 흥미로운 점은 서버 자체에서 웹 애플리케이션을 검색할 때 눈 깜짝할 사이에 로드된다는 것입니다. 방금 전환한 이미지인 것처럼 하위 페이지를 검색할 수 있습니다.

그러나 다른 컴퓨터에서는 느리게 작동합니다. 비극적이지는 않지만 눈에 띄게 느려집니다. 어떤 경우에는 브라우저에 1~2초 정도 걸리는 "Waiting on..."이 표시되는데, 이것이 가장 고통스럽습니다.

다른 컴퓨터에서보다 원격 데스크톱을 통해 연결되어 있는 동안 서버에서 애플리케이션을 사용하는 것이 훨씬 빠르다는 것을 알았습니다. 내가 그들에게 동일한 효과를 얻을 수 있다면 정말 좋을 것입니다.

Chrome에서 개발자 콘솔을 살펴보면 DOMContentLoaded가 서버에서는 400-600ms이고 다른 모든 컴퓨터에서는 1400ms라는 것을 알 수 있습니다.

그 상황에서 나는 무엇을 할 수 있습니까?

답변1

OffApache에서 HostnameLookups가 로 설정되어 있는지 확인하세요 .

서버가 WAMP(LAMP와 동등한 Windows 버전) 설정을 통해 Apache를 실행하고 있다고 말씀하셨죠? 그렇다면 열려 있거나 httpd.conf( apache2.conf모두 설정에 설치된 방법에 따라 다릅니다. 두 파일은 기본적으로 동일합니다) HostnameLookups그 안에 있는 구성 줄을 찾으십시오. 기본적으로 해당 파일의 설정 바로 위에 있는 주석에 설명된 대로 로 HostnameLookups설정됩니다 . 대담한 강조는 내 것입니다:OffHostnameLookups

HostnameLookups: 클라이언트 이름 또는 IP 주소만 기록합니다(예: www.apache.org(on) 또는 204.62.129.132(off)).기본값은 꺼져 있습니다. 왜냐하면 사람들이 고의로 이 기능을 켜야 한다면 네트워크에 전반적으로 더 좋을 것입니다. 왜냐하면 이 기능을 활성화하면 각 클라이언트 요청이 네임서버에 대해 최소한 하나의 조회 요청을 초래한다는 것을 의미하기 때문입니다.

그리고공식 아파치 문서더 자세히 설명합니다. 다시 한 번 대담하게 강조하겠습니다.

역방향 조회가 실제로 필요하지 않은 사이트에 대한 네트워크 트래픽을 저장하기 위해 기본값은 꺼짐입니다.또한 조회에 따른 추가 대기 시간을 겪을 필요가 없기 때문에 최종 사용자에게도 더 좋습니다.로드가 많은 사이트에서는 DNS 조회에 상당한 시간이 걸릴 수 있으므로 이 지시어를 Off로 두어야 합니다.

Allow from/ 지시어 에 호스트 이름을 사용하지 마세요 Deny from.

또한 Apache Basic Auth를 사용하는 디렉터리나 지시어가 있습니까? Apache에서 설정할 수 있는 간단한 비밀번호 보호는 무엇입니까? 어떤 경우 Allow from에는 Allow from localhost. 주석을 달거나 Allow from localhost설정한 Allow from 127.0.0.1 ::1다음 Apache를 다시 시작하면 문제가 해결됩니다.

설명된 대로공식 아파치 문서/ 지시문 에서 전체 호스트 이름을 사용 HostnameLookups하도록 설정 하더라도 액세스 속도를 늦출 수 있는 전체 DNS 조회 체인이 트리거됩니다. 대담한 강조는 내 것입니다:OffAllow fromDeny from

이름이 이 문자열과 일치하거나 이 문자열로 끝나는 호스트는 액세스가 허용됩니다. 완전한 구성 요소만 일치하므로 위의 예에서는 foo.apache.org와 일치하지만 fooapache.org와 일치하지 않습니다.이 구성을 사용하면 Apache는 HostnameLookups 지시문의 설정에 관계없이 클라이언트 IP 주소에 대해 이중 역방향 DNS 조회를 수행합니다. IP 주소에 대해 역방향 DNS 조회를 수행하여 연결된 호스트 이름을 찾은 다음 호스트 이름에 대해 정방향 조회를 수행하여 원래 IP 주소와 일치하는지 확인합니다. 정방향 및 역방향 DNS가 일관되고 호스트 이름이 일치하는 경우에만 액세스가 허용됩니다.

이것블로그 게시물도 잘 설명되어 있습니다.원시 IP 주소 대신 호스트 이름이 있는 항목이 다중 DNS 조회로 인해 Apache 액세스 속도를 늦출 수 있는 Allow from방법 에 대한 자세한 내용을 읽으려면 다음을 수행하십시오 .Deny from

그러나 최근 HostnameLookups를 명시적으로 활성화하지 않고 의도치 않게 동일한 작업을 수행하는 상황을 발견했습니다. 어떻게? 원격 호스트 이름을 기반으로 액세스를 제한합니다! "A(부분) 도메인 이름" 섹션 아래의 Allow 지시문에 대한 설명서를 읽어보세요.

이 구성을 사용하면 Apache는 HostnameLookups 지시문의 설정에 관계없이 클라이언트 IP 주소에 대해 이중 역방향 DNS 조회를 수행합니다. IP 주소에 대해 역방향 DNS 조회를 수행하여 연결된 호스트 이름을 찾은 다음 호스트 이름에 대해 정방향 조회를 수행하여 원래 IP 주소와 일치하는지 확인합니다. 정방향 및 역방향 DNS가 일관되고 호스트 이름이 일치하는 경우에만 액세스가 허용됩니다. 이것은 완벽하게 이해되지만 다음과 같은 것을 사용하면 예상치 못한 부작용이 발생할 수 있습니다.

Allow from .example.com

우리의 경우 호스트 이름을 전혀 생각하지 못하게 만드는 훨씬 덜 분명한 경우였습니다.

Allow from localhost

여기서는 127.0.0.1(IPv4) 및 ::1(IPv6)을 작성하는 것에 비해 약간의 노력을 덜거나 명확성을 높이기 위해 localhost가 작성되었습니다. 정신적으로 "localhost"는 127.0.0.1 및 ::1의 직접적인 별칭이므로 "localhost"라는 이름은 단지 관례일 뿐이며 다른 이름과 마찬가지로 조회가 필요하다는 점을 잊어버릴 수 있습니다. MySQL 데이터베이스에 익숙한 사람들은 실제로 127.0.0.1 또는 시스템에 정의된 "localhost"에 대한 TCP 연결 대신 UNIX 소켓 연결을 만들기 위해 "localhost"라는 단어에 특별한 혼란스러운 의미를 할당한다는 것을 알고 있을 것입니다.

127.0.0.1을 찾는 것이 일반적으로 /etc/hosts의 "localhost"에 매핑되기 때문에 빠르다고 생각할 수도 있습니다. 사실입니다. 하지만 /etc/hosts에 없는 다른 모든 방문자는 대신 느린 DNS PTR 조회를 받게 됩니다! 운영 체제에 따라 /etc/hosts에 "ip6-localhost" 또는 "ip6-loopback"(Debian 7, Ubuntu 12.04), "localhost6"(RHEL 5/6, Fedora 19) 등이 표시될 수 있습니다. . 따라서 주소를 정확히 기재하는 것이 중요합니다.

Allow from 127.0.0.1
Allow from ::1

이렇게 하면 암시적 HostnameLookups 동작이 즉시 중지되고 웹 사이트 속도가 빨라집니다. 이 경우에는 문제가 되지 않았습니다. 왜냐하면 방화벽을 통해 처음에 허용되지 않은 사람은 전혀 방문할 수 없는 비공개 내부 웹사이트였기 때문에 트래픽 수준이 상대적으로 낮았기 때문입니다. 이러한 액세스 제어는 처음에 localhost를 허용해야 했던 이유의 일부입니다. 그러나 서비스 트래픽 둔화로 인해 공공 생산 시스템에서는 매우 나빴을 것입니다.

관련 정보