실서버에서 직접 가동해 봤네요... php7은 비교가 안되는군요..
스크립트 출처 : http://php_benchmark.onlinephpfunctions.com/
########################################
| PHP BENCHMARK |
########################################
Start : 11/27/2019 14:42:00 pm
Server : @
PHP version : 4.4.8
Platform : FreeBSD
########################################
Math : 0.760 sec.
String Manipulation : 1.198 sec.
Loops : 1.335 sec.
If/Else : 1.975 sec.
########################################
Total: : 5.267 sec.
########################################
| PHP BENCHMARK |
########################################
Start : 11/27/2019 14:56:12 pm
Server : @
PHP version : 5.2.17
Platform : FreeBSD
########################################
Math : 1.384 sec.
String Manipulation : 1.762 sec.
Loops : 0.705 sec.
If/Else : 1.412 sec.
########################################
Total: : 5.262 sec.
########################################
| PHP BENCHMARK |
########################################
Start : 11/27/2019 14:43:19 pm
Server : @
PHP version : 5.3.29
Platform : FreeBSD
########################################
Math : 1.543 sec.
String Manipulation : 1.899 sec.
Loops : 0.522 sec.
If/Else : 0.672 sec.
########################################
Total: : 4.636 sec
########################################
| PHP BENCHMARK |
########################################
Start : 11/27/2019 14:43:13 pm
Server : @
PHP version : 5.5.38
Platform : FreeBSD
########################################
Math : 1.046 sec.
String Manipulation : 1.325 sec.
Loops : 0.252 sec.
If/Else : 0.314 sec.
########################################
Total: : 2.937 sec
########################################
| PHP BENCHMARK |
########################################
Start : 11/27/2019 14:44:47 pm
Server : @
PHP version : 7.1.7
Platform : FreeBSD
########################################
Math : 0.292 sec.
String Manipulation : 0.563 sec.
Loops : 0.174 sec.
If/Else : 0.287 sec.
########################################
Total: : 1.315 sec
요즘은 DDOS공격같은 방법보다는 웹쉘이나 XSS삽입공격등으로 사이트를 위협하고 있습니다.
특히 XSS관련 공격은 가장 빈번한 방법으로
대부분의 사이트들의 인증은 쿠키(세션)를 통한 방식으로 하기때문에 "쿠키 하이제킹 방지" 코드만
넣어도 어느정도 방어가 됩니다.
거의 모든 브라우져에서 지원되므로, 아래와 같은 방식으로 코드를 넣으면 도움이 됩니다.
PHP 5.x 이상
SetCookie("auth_xxx",$user,0,"/",".makeshop.co.kr",false, true);
PHP 4.x
SetCookie("auth_xxx",$user,0,"/",".makeshop.co.kr; httponly");
세션을 사용예) ( php5.2 이상)
php.ini 에서
session.cookie_httponly = true;
설정후 php 재가동
서버에서 보내는 쿠키 헤더값은 아래와 같네요.
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 07 Apr 2015 05:06:07 GMT
Content-Type: text/html
Connection: keep-alive
Set-Cookie: test=123; path=/; domain=test.co.kr; httponly
브라우져를 재가동후 사이트접속(로그인)후
주소창에
javascript:document.cookie
입력하여 확인해보면, 설정한 쿠키(세션) 이 보이지 않은것을 확인할 수 있습니다. :)
아파치도 비슷하지만, NGINX에서 PHP프레임웍을 사용하려면,
보통 아래와 같이 기술하게 된다.
rewrite ^/(.*)$ /index.php?/$1 last;
}
# 파일이 존재하지 않으면, 프레임웍의 index.php 로 rewrite
이런경우 없는 이미지파일 호출이나 css, js 파일을 호출하더라도.
파일이 없는경우 무조건 index.php 로 가게 되니 서버의 부담이 많아진다. (악의적인호출포함?)
아래와 같이 수정
set $framework 'NO';
if (!-e $request_filename) {
set $framework 'OK';
}
if ($uri ~ '(\.css|\.js|\.ico|\.gif|\.jpg|\.png|\.swf)')
set $framework 'NO';
}
if ($framework = 'OK') {
rewrite ^/(.*)$ /index.php?/$1 last;
break;
}
위와 같이 하여 확장자가 이미지파일이거나 css/js 등일 경우 파일이 존재하지 않으면, 프레임웍을 안타게 설정한다.
확장자는 알아서 추가..ㅎㅎ
2014년 부터 도로명 주소 사용 의무화로 개발자들 사이에선
도로명 주소가 화두네요..
기존 우편번호가 5만건 데이터에서 데이터가 600만건으로 늘어나면서,
작은 호스팅 사용하시는분들이 구축하기에는 기술적/시간적/용량/관리적
여러가지 어려운면이 있는거 같습니다.
PHP개발자 커뮤티니 PHPSCHOOL.COM 에서
무료로 도로명 주소 우편번호 오픈API를 제공하네요.
테스트 예제 페이지 http://post.phpschool.com/post.html
신청 페이지 http://post.phpschool.com/join.html
PHPSCHOOL 기술팁텍란 http://www.phpschool.com/link/tipntech/77844
간단한 정보입력과 메일인증으로 바로 사용할수 있네요.
PHP예제 소스 제공하고 있고, PHP 시리얼라이즈 형식과 JSON형식으로 리턴해주니
자바사용자분은 JSON으로 사용하시면 되겠네요~
DB인덱스 사용하지 않고, 검색엔진을 사용해서 검색속도가 빠른게 장점이며,
통합검색을 지원하네요.
"가산동 371-50" "에이스하이엔드 3차" 등 여러단어 조합검색도 되고,
좋은거 같습니다.
기존 지번주소인 구주소로도 도로명주소를 쉽게 찾을 수 있게도 되어 있네요.
급하게 붙이시려는분 참고하세요~!
FreeBSD9.x / php5.3.x
--enable-fpm 설치시 아래와 같은 에러가 난다! ㅎ
/usr/local/php-5.3.9/sapi/fpm/fpm/fpm_sockets.c: In function 'fpm_socket_get_listening_queue':
/usr/local/php-5.3.9/sapi/fpm/fpm/fpm_sockets.c:400: error: 'struct tcp_info' has no member named 'tcpi_sacked'
/usr/local/php-5.3.9/sapi/fpm/fpm/fpm_sockets.c:405: error: 'struct tcp_info' has no member named 'tcpi_unacked'
/usr/local/php-5.3.9/sapi/fpm/fpm/fpm_sockets.c:409: error: 'struct tcp_info' has no member named 'tcpi_sacked'
*** [sapi/fpm/fpm/fpm_sockets.lo] Error code 1
아래와 같이 소스를 수정..
/usr/local/php-5.3.9]$ find . -name "fpm_sockets.c"
./sapi/fpm/fpm/fpm_sockets.c
vi ./sapi/fpm/fpm/fpm_sockets.c
tcpi_sacked -> __tcpi_sacked
tcpi_unacked -> __ tcpi_unacked
if (info.tcpi_sacked == 0) {
return -1;
}
if (cur_lq) {
*cur_lq = info.tcpi_unacked;
}
if (max_lq) {
*max_lq = info.tcpi_sacked;
}
아래와 같이 수정
if (info.__tcpi_sacked == 0) {
return -1;
}
if (cur_lq) {
*cur_lq = info.__tcpi_unacked;
}
if (max_lq) {
*max_lq = info.__tcpi_sacked;
}
재컴파일... 잘된다..ㅎㅎ
요즘 성능이슈로 세션이나 캐싱을 memcached로 많이 구현되어 있는거 같다.
memcached 모니터링 툴을 찾다가 괜찮은 툴이 있어서 소개~
http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/
memcache.php 소스다운은 위의 블로그 방문에도 있고 직접 받으려면,
http://livebookmark.net/memcachephp/memcachephp.zip
memcache.php 파일을 원하는 서버폴더에 넣고,
아래의 소스상에서 수정만 하면 된다. (접근할 사용자ID/비번/memcached 서버설정만 하면 끝)
define('ADMIN_USERNAME','사용자ID'); // Admin Username
define('ADMIN_PASSWORD','비밀번호'); // Admin Password
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);
$MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array
//$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
소스에서처럼 서버들을 array로 여러개 지정이 가능하다.
아래는 구동화면~
<? phpinfo() ?> 로 저장후 test.jpg를 올리게 되면
nginx는 uri 뒤에 확장자만 .php면 넘기게 되어 있기때문에 보안에 주의해야합니다.
위의 경로로 test.jpg가 구동되는것을 방지하려면,
if (!-f $request_filename) { return 403; }
혹은
if (!-e $request_filename) { rewrite ^.*$ /index.php last; }
이렇게 구성해주면 됩니다.
통상적인 프레임워크를 쓰기위한 rewite 가 아래와 같이 구성되어 있으면
rewrite ^.*$ /index.php last;
}
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
nginx 쓰면서 가장 보안에 주의해야할 부분입니다.
/usr/local/sbin/php-fpm start
아래와 같은 에러가 나면서 start 스트립트가 멈추지 않는 현상이 나타난다.
vi /usr/local/sbin/php-fpm 의 상단에
php_fpm_CONF=/usr/local/etc/php-fpm.conf
과 같이 pid의 경로를 제대로된 경로로 수정해주니 잘되었따아.. 1시간삽질;;;
리눅스에서 php설치시
/usr/local/lib/libz.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1
에러시
zlib 설치를
php를 재설치한다.
잘된다.;;
vi /boot/loader.conf 에
커널옵션에
최신 아파치(현재는 2.2.8) 을 가져와서 소스를 푼다.
PHP를 동적으로 컴파일해야 하기때문에 --enable-so는 반드시 있어야한다.
그외 옵션추가는 ./configure --help 로 참조한다.
설치디렉토리는 --prefix 의 경로로 변경이 가능하다.
위의 과정으로 아파치 컴파일은 완료!
FreeBSD 6.x 의 경우 기본적으로 perl이 설치안되어 있으므로 perl을 설치하는것이 좋겠다.
make install
최신의 PHP 소스롤 가져다가 푼다.
아파치 설치된 경로로 apxs 를 지정한다.
그외 gd를 설치하거나 기타 옵션을 주려면, 마찬가지로 ./configure --help를 참고한다.
인스톨후
PHP 5.2.5 (cli) (built: Nov 5 2007 16:11:19)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
아파치 설치 디렉토리에서
vi /usr/local/apache2/conf/httpd.conf
후에 아래를 추가한다.
AddType application/x-httpd-php .php
그외 아파치 설정파일은 아파치 문서를 참고한다.
.php 외의 확장자나 다른확장자로 php 스크립트를 만드려면 뒤에 추가해도 된다.
ex) AddType application/x-httpd-php .php .html .phps
아파치를 구동한다.