무료 SSL 인증서로 letsencrypt는 정말 유용합니다.

다만 3개월마다 갱신해줘야한다는게 불편하긴하지만, 이것도 cron걸어두면 괜찮죠..

 

cron에서 걸어둘 인증서 자동 관리기인 certbot에서 renew가 명령어가 안될때..

 

다음과 같이 conf파일에 사용할 수없는 문자가 입력되어 오류가 날 수 있습니다. (다른 이유가 있을 수도 있으니, 오류 메시지를 잘 확인하도록 합니다.)

grep -r -P '[^\x00-\x7f]' /etc/nginx /etc/letsencrypt/ 해서 어느파일에서 00 ~7f 문자가 사용되었는지 확인합니다.

 

nginx에서 gzip 으로 압축하여 전달하지 않을 user-agent문자열 셋팅 부분에 불용문자열이 있네요.

gzip_disable "MSIE [1-6].(?!.*SV1)" 으로 변경하였습니다.

 

이제 SSL 갱신이 잘됩니다.

카카오챗봇기능을 통해 간단하게 챗에 응답하는 챗봇을 제작할 수 있습니다.





기본적인 구성방법은 아래 링크를 참조하시면됩니다.

http://kjcoder.tistory.com/505


위 링크는 서버가 C#기준으로 되어있기 때문에 PHP로 구성하는 방법을 알려드립니다.


 운영 환경 

PHP 5.6 / NGINX 12.2 

 디렉토리

 [웹루트]/index.php





NGINX와 PHP-FPM 구성은 생략합니다. 

https://launchdog.wordpress.com/2016/04/22/centos7-nginx-php7-mariadb-%EC%84%A4%EC%B9%98-1/


위 링크에 설명을 잘해 놓았으니 참고하도록합니다. 

위 링크는 PHP7기준입니다. 참고로 저는 호환성을 위해 PHP5.6을 선택하였습니다.



kakao 챗봇 서비스를 위한 nginx 서버 설정

콘피그파일에 아래와 같이 구성합니다. (/etc/nginx/conf.d/default.conf 수정)


   location ~ /kakao   {

        try_files $uri $uri/ /index.php?/$request_uri;

    }



카카오에서 요청되는 주소는 http://[도메인]/kakao/keyboard 형식으로 호출되도록하기위해 위와 같이 구성합니다.

실제 실행파일은 웹루트/index.php 입니다. 

route를 rewrite시키는 효과를 냅니다.





참고로 PHP 스크립트 설정은 아래와 같이 하였습니다.(php-fpm/nginx 설정시 미리 하기도 합니다.)



  location ~ \.php$ {

        root           /var/www/html;

        fastcgi_pass   127.0.0.1:9000;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        include        fastcgi_params;

    }





    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    #

    location ~ \.php/([a-zA-Z0-9_]+)/([0-9]+)$ {

        root           /var/www/html;

        fastcgi_pass   127.0.0.1:9000;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        include        fastcgi_params;

    }



static 파일 서비스는 아래와 같구요..

    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
        expires 12M;
        access_log off;
        add_header Cache-Control "public";
    }

    location ~* \.(?:css|js)$ {
        expires 1y;
        access_log off;
        add_header Cache-Control "public";
    }



그 다음 index.php 파일 내용입니다.

단촐합니다.



<?php

header('Content-Type: application/json');

$uri = $_SERVER["REQUEST_URI"];


if($uri=='/kakao/keyboard') {

//if(!is_kakao_server()) return; #호출 서버가 카카오서버가 아니면 실행안되도록 함.

$data = array();

$data['type'] = 'text';

echo json_encode($data);

return;

}


if($uri=='/kakao/message') {

//if(!is_kakao_server()) return;  #호출 서버가 카카오서버가 아니면 실행안되도록 함.

$postdata = file_get_contents("php://input");

$message = json_decode($postdata);

//$message->content

//$message->user_key

//$message->type  

// 위 변수로 접근 가능하다. 적절하게 처리.


###  적절한 처리..


$data = array('message'=>array('text'=>'잘 처리되었어요.~등등등'));   //메시지 응답을 한다.

echo json_encode($data);

return;

}



#끝~

아 참고로 is_kakao_server()는 카카오서버의 요청만 처리하도록 확인하는 함수입니다.

function is_kakao_server()
{
$kakao_server = array('110.76.143.234','110.76.143.235','110.76.143.236');
return in_array($_SERVER['REMOTE_ADDR'], $kakao_server);
}

요렇게 구성하시면 됩니다.




+ Recent posts