티스토리 뷰

NAS 보다는 성능이 못하지만, 간단한 기능이라면 uptime이 보다 안정적인 공유기에서 웹서버를 돌리는 것이 낫다는 것이 개인적인 판단이다.


참고삼아 지금까지 N56U에 올라간 기능을 보면,

wget를 이용한 DNSEVER DDNS 서비스

nginx

rsync backup 올리려다가 실패

shell script backup

이 있다.


두 가지 문서를 참고하여 진행된다.

https://www.hqt.ro/nginx-web-server-with-php-support-through-entware/

https://wiki.openwrt.org/doc/howto/http.nginx#fastcgi_params


당연히 custom firmware의 entware가 올라가 있다고 가정하고 진행한다. 그나저나 padavan의 google project page가 옮겨지면서 wiki가 다 날아가는 바람에 나중에 다시 entware를 올려야 할 때는 꽤 고생할 듯.


패키지를 업데이트하고,

opkg update

opkg upgrade


php5-fastcgi와 nginx를 설치한다.

opkg install php5-fastcgi nginx

dependency가 있는 패키지 두어개가 같이 설치 된다.


nginx의 configuration 파일(/opt/etc/nginx/nginx.conf)을 아래와 같이 수정한다.

user nobody;
worker_processes 1;
events {
    worker_connections 64;
}

http {
    include mime.types;
    default_type application/octet-stream;
   
    server {
        listen 80;
        server_name localhost;
   
    location / {
        root /opt/share/nginx/html;
        index index.html index.htm index.php;
    }

    error_page 500 502 503 504 /50x.html;
   
    location = /opt/share/nginx/50x.html {
        root html;
    }

    location ~ \.php$ {
        root /opt/share/nginx/html;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        }
    }
}

첫번째 링크의 내용을 가져왔는데, 사실 기본으로 설치되는 설정 파일과 크게 다를바가 없다. 나 같은 경우는 첫 줄의 user nobody를 주석처리해 주고, listen 포트 번호, root를 알맞게 설정해 주었다. 포트의 경우에는 공유기 설정 페이지로 동작하는 httpd와 충돌할 수 있으니 중복이 되면 안된다. 그리고 fastcgi_param 부분도 정확히 입력해 주어야 한다.


/opt/etc/php.ini 파일 중 document root 부분을 nginx.conf의 root와 같게 수정한다.

doc_root = "YOUR/DOCUMENT/ROOT"


그런데 여러 개의 server block으로 virtual host를 구성할 생각이라면 이 부분을 빈칸으로 두어야 한다. 참고 그냥 해당 라인을 세미콜론으로 주석처리 해버리면 된다. 그리고 nginx.conf에서 각각의 서버 블록에 맞게 아래와 같이 설정한다.

fastcgi_param SCRIPT_FILENAME /opt/share/nginx/html/site1/$fastcgi_script_name;


/opt/etc/init.d/S80php5-cgi 위치에 실행 스크립트를 생성한다.

#!/bin/sh


ENABLED=yes
PROCS=php5-cgi
ARGS=""
PREARGS=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:


. /opt/etc/init.d/rc.func

start() {
    php-cgi -b 127.0.0.1:9000 &
    logger -st php-cgi "\$0" "started"
    exit 0
}

stop() {
    killall -9 php-cgi
}

restart() {
    stop
    sleep 2
    start
}

status() {
    ps | grep -i php-cgi
}

case "\$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status) status
;;
*)
echo "Usage: (start|stop|restart|status)"
exit 1
;;
esac
echo Done.
exit 0


실행 권한을 부여하고,

chmod +x /opt/etc/init.d/S80php5-cgi

/opt/etc/init.d/rc.func에 실행 권한이 없어서 permission error가 날 수도 있는데 그러면 얘도 실행 권한을 줘버린다. (이러면 보안 문제가 생길 수도?)


서버를 실행해 본다.

/opt/etc/init.d/S80nginx start
/opt/etc/init.d/S80php5-cgi start


check에서 alive가 아니면 nginx 설정 파일에 문제가 있는 것이다.

/opt/etc/init.d/S80nginx check


적당한 php 파일을 만들어서 테스트 해 본다.

<?php
phpinfo();
?>

참고로 php 확장자 파일만 동작한다. html 파일안에서는 동작하지 않는 것을 뒤늦게 알았다.



끝났다. 사실 첫번째 링크가 거의 대부분이다. 해놓고 보면 별 것 아닌데 삽질 할때는 너무 시간이 빨리간다.






댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함