htaccess가 엄청나게 편하긴 한데 그만큼 성능을 꽤 깍아먹죠...

두가지 측면에서 깍아먹는데 첫번째는 htaccess 파일이 존재하는지 아닌지

모든 중간 경로에서 찾아야 한다는 점.

다만 첫번째 문제는 디스크 캐쉬에 의해 상쇄될 수 있습니다.

그럼에도 불구하고 영향은 있습니다. 대략 2~3% 정도의 성능 하락.

또한 이것은 단순한 반복테스트에 의한 측정결과이므로 실제 서버에서는

보다 큰 성능하락이 있을 수 있습니다.

그리고 둘째는 htaccess 파일을 로드해서 파싱하는데 걸리는 시간입니다.

이건 옛날에 PHP에 opcache가 없던 시절을 생각하시면 될겁니다...

벤치마크에 의하면 htaccess 파일 100라인당 대략 1ms 정도 지연이

발생한다고 생각하면 되는 것 같습니다.

(1500라인 htaccess로 12ms 지연 발생, 3000라인 htaccess로 25~35ms 지연 발생)

이걸 해결하는 방법은 AllowOverride none으로 htaccess를 disable하고

그 설정을 그냥 conf 파일의 VirtualHost 안쪽에다가 넣는겁니다.

뭐 htaccess 파일이 한두개면 별로 어렵지 않은데.. htaccess 파일 갯수가 많으면

이것도 꽤 귀찮은 일이죠...

그래서 아래와 같은 간단한 스크립트를 하나 짰습니다.

이걸 도큐먼트 루트에 combine_htaccess.php 이름으로 저장하고서 컴맨드 라인에서

 

php combine_htaccess.php > htaccess.txt

 

이렇게 하시면 예쁘게 htaccess 설정들을 파일 하나로 모아줍니다.

htaccess.txt 파일을 여신 다음에 복사해서 아파치 conf파일에 붙여넣기 하시면 됩니다.

<?php

echo "AllowOverride none\n\n";
recursive(__DIR__);

function recursive($path)
{
  if (is_dir($path)) {
    if (file_exists($path . '/.htaccess')) {
      echo "#-------------------------------------------------------------\n<Directory $path>\n";
      readfile($path . '/.htaccess');
      echo "\n</Directory>\n\n";
    }

    array_map(__FUNCTION__, glob($path . '/*'));
  }
}

 

 

  • ?
    이 표현이 적절할지는 모르겠지만.

    게시글 내용도 그렇고
    단비아빠님이 쓰시는 글들도 그렇고.

    참 신비롭습니다. ㅎㅎ

    매번 글 잘보고 있습니다.

    저는 Nginx라서 패스 ㅠ.ㅠ
  • ? profile
    위의 방법은 아파치 설정파일을 직접 편집할 권한이 있어야 사용할 수 있는 건데,
    그럴 권한이 있다면 아파치를 nginx로 바꿔버릴 수도 있지요 ㅎㅎㅎ
  • profile ?

    단비아빠님 글도 그렇고
    기진곰님도 그렇고.
    XETOWN에 계신 몇몇 분들의 글을 보면...(뭐 거의 다겠지만요 ㅎㅎ)

    참 신비롭습니다.

    어찌 저런 생각을 할까...
    기술적으로 설정을 할수 있다 못한다가 아니고..

    생각 자체를 저렇게 하신다는게 참 신비롭습니다.
    넘사벽.. 아니 넘오벽 같으신 분들이세요 ㅎㅎ

  • profile ?
    전 nginx에 대해서 회의적이에요. 일단 벤치마크에 의하면 php 성능으로는 아파치가 nginx보다 7% 정도 빠르기도 하고 nginx의 장점이라고 할 수 있는 정적파일 서비스 능력은 필요하면 nginx로 리버스 프록시 구성하면 그만이구요. 메인으로 nginx를 쓰기엔 좀 아쉽다고나 할까요.
  • ? profile

    몇 년 전에 제가 직접 XE 벤치마크를 돌려봤을 때는 nginx가 더 빨랐습니다. 물론 아파치도 많이 바뀌었고 nginx도 계속 버전업을 해왔으니 이제는 어떤지 모르겠지만, 크게 달라졌을 것 같지는 않네요.
    https://xe1.xpressengine.com/forum/23008337

    무엇보다도 아파치는 PHP와 연동하는 방식이 너무 마음에 안 들어서 피하게 됩니다. mpm_prefork + mod_php 조합은 정적파일 서비스 효율이 너무 떨어지고, mod_fastcgi/fcgid + PHP-FPM 조합은 설정 문법이 개판이라 꼴도 보기 싫고, 최근 유행하는 mod_proxy_fcgi + PHP-FPM 조합은 동접수가 늘어나면 커넥션 관리를 제대로 하지 못해서 종종 오류를 뿜더군요. 오히려 정적파일 서비스에 더 적합한 웹서버인 것 같다는... ㅋㅋ

    반면, nginx를 사용하면 안정적인 PHP 연동과 정적파일 서비스 능력이라는 두 마리 토끼를 모두 잡을 수 있습니다. 서버 1대당 동접수 1만 명이 넘어가도 nginx + PHP-FPM 조합은 안정성이 떨어지지 않습니다. 애당초 PHP-FPM이라는 것이 nginx와 연동하기 위해 만든 것이니 찰떡궁합일 수밖에요. 99%의 사이트는 nginx 하나만으로도 딱히 아쉬운 기능이 없으니, 복잡하게 리버스 프록시를 구성하느니 그냥 단독으로 씁니다.

  • profile
    오~ 신박합니다.....^^

    저도 아파치를 좋아하는 1인 입니다.....ㅋㅋ