Extra Form
PHP PHP 7.0
CMS XpressEngine

단독 웹호스팅 사용하고있습니다

까페24에서 연락이왔네요.

세션파일이 엄청 쌓이고있다고,

그래서 저희서버의 root 의 temp 디랙을 만들어 임시로 그기에 쌓이도록 해 두었답니다.

 

확인해보니 지워도지워도 1초에 한개정도씩 순식간에 계속해서 쌓이고있는데 어디를 손봐야할까요?

 

까페24에서는 아마 세션close 가 되지않는거 같다고 합니다.

 

근래, 특별히 수정하거나 애드온 등 추가설치한것도 없습니다.

로그파일을 보내왔는데 용량이 약 200메가정도라서 여기 올리기도 그렇네요

 

그쪽 말로는 특정디렉토리(사진폴더)에 동일 아이피에서 집중적으로 호출을 하고있는데

혹시 크롤링하는거 있냐고 물었습니다.

그쪽은 내용을 잘 몰라서 특별한건 없다고 얘기했습니다.

 

혹시 cron 으로 삭제 스크립트를 돌려도 될까요?

 

11.png

  • ?

    어떤 세션인지 정확하게 잘 모르겠지만요...

    XE라면

    관리자화면들어가셔서

    일반 - 고급에 보시면 "인증세션 DB 사용"이라고 있을껍니다.

     

    체크하시면 됩니다.

    세션을 DB쪽에 하면 아마도 파일이 쌓이지 않을듯 합니다.

    맞는지 모르겠네요 ㅎㅎ

  • ? profile
    db를 사용하면 부하가 엄청 걸립니다. 방문자가 많은 곳은 사용하면 좋지 않은 방식입니다.
  • profile ?
    XE 도움말(?)에보면

    인증 세션 DB 사용: 인증 시 사용되는 PHP 세션을 DB로 사용하는 기능입니다. 웹서버의 사용률이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다. 단, 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.

    이렇게 나오네요.

    웹서버의 사용율이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향샹된다고 되어 있는데...

    사용율이 높은곳은 DB 세션을 활성화 하라는 뜻 아닌가요?

    잘은 모르겠지만...

    세션이 많아질때는 파일로 관리하는것 보다는 DB에 넣는게 더 빠르지 않을까요?

    그리고 아무리 리눅스라도 한 디렉토리당 파일 갯수가 5000개를 넘지 않는것이 좋다고 알고 있습니다.

    제가 잘못 생각하는건지도 모르겠네요 ㅎㅎㅎ
  • ? profile

    현재접속자의 명단을 구하기 위해서는 인증세션db 를 사용해야 하지만 그로 인해 db에 기록하고 조회하는 작업때문에 상당한 부하를 발생시킵니다. 이러한 기능이 필수적으로 꼭 해야 하는 사이트가 아니라면 사용하지 않는게 좋습니다.

     

    사용율이 낮다는 표현이 정확히 무엇을 표현하려고 했는지 모르겠지만 실제 상황과 맞추려면..

    사양이 낮은 서버에서는 사용하면 느려진다고 표현하는게 맞습니다.

  • profile ?
    음.. 저는 이렇게 생각을 했습니다.

    파일세션 : 그냥 그래
    DB 세션 : 그냥 그래 + 접속자 명단 구하는 보너스

    이정도로요. ㅎㅎ

    속도 부분은 당연히 DB가 더 빠를꺼라 생각했습니다.

    기본적으로는 파일베이스가 빠르지만 양이 많아지면 데이터베이스가 빠른건 일반적인 중론인데요.

    엄청나게 많은 세션을 파일로 만들어서 같은 디렉토리에 저런식으로 쌓으면 가뿐하게 5천~1만개 이상의 파일이 생길꺼 같은데.. 그럼 파일 로딩시에 문제가 될꺼 같은데...
    아닌가 보군요. ㅎㅎ
  • ? profile
    이 기능 사용은 이미 많은 피드백이 있던 것이라 지금 알고 계신 내용은 잘못 알고 계십니다.
    특별히 db에 기록되어야 구현이 가능한 기능을 사이트에서 필요치 않으면(현재 접속자 명단 표시 등) 절대적으로 꺼야 하는 기능입니다.
  • ? profile

    서버 사양의 문제가 아닙니다. 웹호스팅에서 흔히 쓰는 MyISAM 방식의 DB라면 세션을 열었다 닫을 때마다 xe_session 테이블에 락이 걸려서 모든 사용자가 피해를 봅니다.

    단독서버에서 InnoDB를 사용한다면 문제가 그렇게 심하지는 않습니다만, 애당초 비효율적인 방식으로 구현되어 있기 때문에 파일보다 빠르기는 힘들 겁니다. 단독서버라면 차라리 Memcached나 Redis를 쓰지요.

     

    파일 갯수에 따른 성능 저하는 서버에서 사용하는 파일시스템(ext3, ext4, xfs 등)에 따라 다릅니다. 최근 버전의 리눅스라면 수만 개 정도까지는 아무 문제도 없습니다. 물론 해당 폴더의 파일 목록을 불러오려고 하면 한참 걸리겠지만, 세션은 파일 목록을 불러오는 게 아니라 특정 파일만 콕 찝어서 사용하는 방식이니까요.

     

  • profile ?
    넵 설명 감사합니다.
  • profile ?
    음.. 정확하게 이해 했습니다.

    어파치 세션 파일을 생성할때 캐시되었으므로 큰 문제는 없다.

    그리고 요즘 리눅스는 수만개 정도 파일도 문제는 없다.

    파일 목록 부를때는 디렉토리당 파일 갯수의 영향을 받지만... 특정파일명으로 바로 읽을때는 디렉토리 파일수의 영향을 받지 않는다.!!!

    명쾌한 답변 감사합니다.

    설정 바로 바꾸어놔야 겠네요 ㅎㅎㅎ
  • profile

    접속자가 많지 않은데도 1분에 수십 개씩 세션이 계속 쌓인다면 누군가가 크롤링(파싱)을 시도하고 있을 가능성이 높습니다. 정상적인 접속자라면 1명이 1개의 세션만 사용하지만, 파싱은 수백~수천 개의 세션을 생성할 수도 있거든요. 이런 상황에서 모든 세션을 DB에 저장하도록 하면 눈에 보이는 파일 수는 줄어들지 몰라도 DB 부하가 심하게 올라갈 수 있습니다.

    세션 close는 XE에서 당연히 해주고 있습니다. PHP는 원래 세션을 close하더라도 세션 파일이 그대로 남는다는 것을 카페24 담당자가 모르는군요. 그 부분은 그냥 한 귀로 듣고 한 귀로 흘리시면 되고요...

    그러나 동일 IP에서 과도한 요청을 하고 있다면 위에서 말씀드린 것처럼 크롤링(파싱)일 가능성이 높으니, 넘겨받으신 로그파일에서 해당 IP를 찾아 차단해 버리면 문제가 해결될 것 같습니다.

  • profile

    모두 감사합니다.
    인증DB 사용중이고, 지금 로그파일열어서 해당 아이피를 스팸필터에 추가해주고있는데
    아이피가 너무 많군요.
    하루치 로그파일이 76만 라인
    이걸 언제 다 등록할지 깜깜합니다.

     

    로그파일 첨부해보려하니 용량초과로 첨부도 안되네요 ㅠ

  • profile profile

    스팸필터는 차단하는게 아닙니다. 글 작성,댓글 작성을 못하게 할뿐입니다. 아이피는 서버단에서 차단하셔야 합니다.

  • profile profile

    아, 그런가요? 엑셀에 넣었다가 텍스트로 공백제거후 변환하고 노가다하고있는데 여기가 아니었군요 ㅠ
    한두개가 아니라 1,800여개가 되는데 어떻게 차단해야할지 막막합니다.

    중국이나 외국이었다면 국가단위로 차단하려고했는데 아이피가 대부분 한국 망이네요

  • profile

    일단 index.php 파일에서 아래처럼 세션 start 를 주석처리하였습니다

    이렇게하니 세션파일은 쌓이지않는군요.

     

    /**세션유지시간연장**/
    ini_set('session.gc_maxlifetime',60*60*24*12);
    //session_start();
    /**세션유지시간연장**/

     

    이럴경우 어떤문제가 생기게 될까요?

    또 60*60*24*12 을 하루나 이틀정도로만 설정해도 문제가 없을까요?

     

  • profile
    저 코드가 원래있던게 아니군요.
    아마 로그인풀림현상때문에 어딘가에서 코드를 가져와 붙였던거같은데 원 출처를 모르겠네요 ㅎ
  • profile
    특정디렉토리(사진폴더)에 동일 아이피에서 집중적으로 호출을 하고있는데

    ---> 이 동일 아이피가 어떤 아이피인지 파악하신 후 정상적인 접근이 아닌 경우 이 아이피만 차단하면 될 텐데요..

    나머지 시도하시는건 정상적인 서버운영에서 불필요한 것 같아 보입니다.
  • profile profile
    의심가는 아이피가 1800여개나 되어서 차단은 힘들것같아서 일단 index 파일에 원래없던 코드를 삭제하는 것으로 해결했습니다.

    /**세션유지시간연장**/
    ini_set('session.gc_maxlifetime',60*60*24*12);
    //session_start();
    /**세션유지시간연장**/

    이 코드를 삭제하면 로그인 유지에 또 문제가 안생기려나 모르겠네요 ㅎ
  • profile profile
    1800여개 아이피를 동일한 아이피라고 표현하지는 않겠죠...
  • profile profile

    제가 알고 있는 주소가 맞다면

     

    loading.png

     

     

    사이트 접속시 이런 화면이 뜨네요. 아마 호스팅사에서 어떤 룰에 의하여 이런 화면으로 전환되고 있나 봅니다.

     

     

    확인해보니 www 를 빼고 주소를 입력하면 위 화면이 뜨네요.

  • profile profile

    그긴 어디일까요? 문제의 사이트는 d******e.com 입니다. 감사합니다

  • profile profile

    서버에서 www가 포함된 도메인만 서버의 루트를 지정해줬고 아닌 도메인은 빼버렸으니 그랬겠죠.
    거기다가 추가로 www가 빠진 도메인은 이상한 곳으로 리디렉트나 포워딩 처리 한 것 같습니다.

     

    dic****e.com 입니다.

  • profile profile

    어? 사이트 맞는거같은데요?
    제겐 ie 나 크롬에서 www 를 뺀 도메인으로 접속해도 정상으로 나옵니다.

    자동으로 www를 붙여주는 애드온을 설치했거든요.
    혹시 어떤 환경이신가요? (불안불안 ㅡ.)

  • profile profile

    윈도우 8 / 크롬 / IE10 동일합니다. KT 입니다.

     

    보여주는 이미지 주소가 

    http://hostinfo.cafe24.com/serviceInfo/img_loading.gif

     

    이므로 KT에서 관여한 것 같진 않은데 말이죠.

  • profile

    지금 www 없이 사이트가 접속이 안되는 문제는 근본적으로 서버 구성에 문제가 있습니다.
    www 가 없이 주소가 입력되어도 일단은 사이트가 접속이 되어야 합니다. 왜냐면 지금 리디렉트를 xe 애드온에 의존하시기 때문에 더욱 그렇습니다.

    일단 XE가 돌아야 www 로 이동을 시키던 합니다. 애드온이기 때문에..

    그런데 지금 www를 붙이지 않고 접속하면 서버에서 설정이 잘못되었는지 카페24에서 이상한곳으로 이동됩니다.

    이부분 고치신다음 그다음 www 붙은 주소로 리디렉트 잘 되는지는 검토하시면 됩니다.

     

     

    * www 붙지 않은 도메인은 아예 사용을 금지하려고 의도하신 거라면 서버에서 www로 이동되게 리디렉트를 처리하시면 될 것 같구요.

  • profile profile
    감사합니다.
    까페24에 문의 해 두었습니다.
    여태껏 다른회원들에게서는 이런신고가 없었는데 희안합니다 ㅜ
  • profile profile

    제가 보기엔 오늘이나 최근 서버에서 www 없는 도메인을 www 있는 주소로 리디렉트 하는 부분이 지워진 듯 합니다.

    메인 페이지 이외 서브페이지는 아마 애드온에 의해 이동이 잘 될 것 입니다.
    - 지금 애드온에 의해 www 로 이동하고 계시기 때문에

    도메인.com 의 경우 서버에서 또는 .htaccess 에서 처리하지 않으면 지금 과 같은 현상이 벌어질 것 입니다.

    www.도메인.com 만 서버의 루트디렉토리로 이동되도록 해 놓으신 것 같습니다. 구성 자체가 좀 이상하긴 합니다.

  • profile

    혹시나 저랑 비슷한 경험을 하실수 있는 분들을 위하여,

     

    세션로그파일은 로그인풀림방지를 위해 index.php 파일에 넣어두었던 별도의 세션구문이 있어서 삭제하였습니다.

    그 구문은 아래와 같습니다.

     

    /**세션유지시간연장**/
    ini_set('session.gc_maxlifetime',60*60*24*12);
    //session_start();
    /**세션유지시간연장**/

     

    그리고 웹지기님께서 지적하신 www 를 뗀상태에서 로딩이 되질 않는 문제는 역시나 로그인풀림방지를위해 자동으로 www 를 붙여주는 애드온을 설치했으나

    이 애드온이 제대로 작동하지 않은것 같다(제 환경에서의 추측입니다)고 해서 삭제한 후 .htaccess 파일에 직접 www 가 없을때 자동으로 www 를 붙여서 리다이렉트되도록 코드를 수정하였습니다.

    .htaccess 파일에 넣은 코드는 아래와 같습니다

     

    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

     

    이렇게 해서 해결이 된듯 합니다.

    조언주신 여러분들께 다시 감사드립니다