Tag Archives: centos

CentOS PHP에서 원격 연결 안될때

CentOS 5.x에서 웹서버나 PHP에서 원격서버에 연결할때 기본적으로 SELinux 보안 모듈에서
막나보네요. PHP에서 원격 DB에 연결이 안되서, iptables도 열심히 만지고 PHP소스도 컴파일 다시 하고, tcpdump로 패킷 보고 –; 하여간 삽질하다가 겨우 해결했습니다.

웹서버는 lighttpd, mod_fastcgi 모듈로 PHP 사용중입니다.

아래처럼 웹서버에서 외부로 연결가능하도록 설정가능합니다.

# /usr/sbin/setsebool httpd_can_network_connect=1

원격 DB 연결, PHP에서 get_file_content() 함수로 외부의 데이터를 받을 때, 웹서버에서 mod_proxy 사용등을 할때 아마도 이 설정을 풀어줘야할듯 하네요.

재부팅할때도 적용되게 하려면,

# /usr/sbin/setsebool -P httpd_can_network_connect=1

출처:

https://bugzilla.redhat.com/show_bug.cgi?id=164867

CentOS 4에서 PHP 5와 XCache 소스로 설치

lighttpd와 병행하여 쓰고 있는데, CentOS 4 버전에서는 SRPM이 PHP4 버전이 디폴트로 되어 있어서, PHP5는 소스를 받아서 설치했습니다. ./configure할때 인자주는게 생각처럼 되지 않아서 좀 헤맸습니다. 오랜만에 PHP 소스를 직접 받아서 설치해봤습니다.

./configure –enable-fastcgi –enable-discard-path
–enable-force-cgi-redirect –with-mysql=/usr/bin/ –with-libdir=lib64  …기타 라이브러리 설정

앞에 –enable-fastcgi enable-discard-path
–enable-force-cgi-redirect 부분은 lighttpd와 fastcgi와 연동하기 위해서 필요한 부분입니다.

–with-mysql=/usr/bin/ –with-libdir=lib64는 mysql 모듈을 사용하도록 한것인데, 64bit MySQL 라이브러리가 깔려있어서 –with-mysql 옵션만 주면 mysql 라이브러리를 못찾더군요.

예전에 SRPM을 설치하면서 필요한 devel 패키지들은 모두 설치되어있어서 따로 yum을 통한 패키지 설치는 없었습니다 ^^

설치는 간단히 sapi/cgi/php-cgi를 /usr/local/bin 쪽에 복사하고, /usr/local/lib/php.ini를 적당히 만들어주고, lighttpd.conf에서 새로운 php-cgi 참조하도록 변경했습니다.

웹서버 재시작하여 정상동작하는거 확인하고 make install하고, 전에 사용하던 PHP관련 RPM들을 삭제했습니다. 컴파일할때 RPM도 같이 설치되어 있으면 문제가 생기더군요.

XCache 소스 받아서 압축풀고 아래대로 했습니다.

$ phpize
$ ./configure --enable-xcache
$ make
$ sudo -s
# make install
# cat xcache.ini >> /usr/local/etc/php.ini
# vi /usr/local/etc/php.ini


php.ini 파일에서 zend_externsion에서 xcache.so 참조하는 부분이 있는데 경로에서 버전정보를 수동으로 고쳐야합니다.

zend_extension = /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so
   →
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xcache.so


웹서버 재시작하고 phpinfo() 호출해서 출력하면 xcache 정상 동작하는거 확인할수 있습니다.

CentOS에서 최신버전 lighttpd rpm 만들기

CentOS나 RHEL에서 최신 버전 lighttpd rpm 만드는 방법입니다.
이전 버전의 src rpm을 받아서 아래와 같이 src rpm 최신버전으로 제작할수 있습니다.

# wget http://www.lighttpd.net/download/lighttpd-1.4.13-1.src.rpm
# rpm -i http://www.lighttpd.net/download/lighttpd-1.4.13-1.src.rpm
# cd /usr/src/redhat/SPECS
# sed -i ‘s/1\.4\.13/1\.4\.22/g’ lighttpd.spec

sed로 lighttpd.spec 파일에서 1.4.13을 찾아서 1.4.22(현재 최신 버전)으로 변경합니다. 일반 에디터로 편집하셔도 됩니다. 파일 내용도 한번 확인해보시면 도움이 될듯하네요.

lighttpd 소스를 받습니다.

# cd /usr/src/redhat/SOURCES
# wget http://www.lighttpd.net/download/lighttpd-1.4.22.tar.gz

이제 rpm만 만들면 됩니다. src rpm은 아래처럼 만듭니다.

# cd /usr/src/redhat/SPECS
# rpmbuild -bs lighttpd.spec

이렇게 하면 /usr/src/redhat/SRPMS 에 src rpm이 만들어집니다.

아래처럼 바이너리 rpm을 제작할수 있습니다. ssl을 사용할 수 있도록 옵션을 추가적으로 전달했습니다. spec 파일 보면 어떤 옵션이 있는지 확인할수 있습니다.

# cd /usr/src/redhat/SPECS

# rpmbuild -bb lighttpd.spec -with ssl

이렇게하면 시스템에 따라 /usr/src/redhat/RPMS/{x86_64, i386} 에 바이너리 rpm 파일이 생성됩니다.

rpmbuild 할때 오류나면 yum으로 필요한 패키지 설치하면 됩니다. (yum update openssl-devel …)

이제 필요한곳에 rpm을 설치하고 재시작 하면 됩니다~

# rpm -e lighttpd      (이전 버전 제거)
# cd /usr/src/redhat/RPMS/x86_64
# rpm -i lighttpd-1.4.22-1.x86_64.rpm
# /etc/init.d/lighttpd start

CentOS 5.2에서 lighttpd 설치

전에 CentOS 4에서 lighttpd 설치하는 방법에 대한 글을 썼었는데 5에서는 설치가 많이 편해졌네요 🙂

저는 CentOS 5.2 x86_64 버전에서 설치하였습니다.

lighttpd는 http://dag.wieers.com/rpm/packages/lighttpd/ 에서 바이너리를 구해서 설치했습니다. 32 비트 버전에서는 i386.rpm을 받아서 설치하세요~

# wget http://dag.wieers.com/rpm/packages/lighttpd/lighttpd-1.4.18-1.el5.rf.x86_64.rpm
# wget http://dag.wieers.com/rpm/packages/lighttpd/lighttpd-fastcgi-1.4.18-1.el5.rf.x86_64.rpm
# rpm -i lighttpd-1.4.18-1.el5.rf.x86_64.rpm lighttpd-fastcgi-1.4.18-1.el5.rf.x86_64.rpm

php는 따로 컴파일하지 않고 php-cli 패키지에 포함된 /usr/bin/php-cgi 를 이용하면 되더군요. xcache는 소스를 받아서 설치했습니다.

lighttpd와 php(php-cli) 설치하시고 /etc/lighttpd/lighttpd.conf를 편집합니다. php fastcgi설정과 sys epoll 사용하도록 설정하는건 필수죠~

fastcgi.server              = ( “.php” =>
                               ( “localhost” =>
                                 (
                                  “socket” => “/tmp/php-fastcgi.socket”,
                                  “bin-path” => “/usr/bin/php-cgi”,
                                  “min-procs” => 1,
                                  “max-procs” => 2,
                                  “max-load-per-proc” => 4,
                                  “idle-timeout” => 10,
                                  “bin-environment” => ( “PHP_FCGI_CHILDREN” => “16”,
                                                         “PHP_FCGI_MAX_REQUESTS” => “2000” )
                                 )
                              )
                             )

server.event-handler = “linux-sysepoll”

xcache는 http://www.howtoforge.com/xcache-php5-apache2-fedora8-centos5.1 를 참고해서 설치했습니다. 과정이 다 필요한지는 모르겠지만 그냥 그대로 따라했습니다.

# yum install php-devel
# yum groupinstall ‘Development Tools’
# yum groupinstall ‘Development Libraries’
# wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
# tar xzvf xcache-1.2.2.tar.gz
# cd xcache-1.2.2
# phpize
# ./configure –enable-xcache
# make
# make install
# cp xcache.ini /etc/php.d
# vi /etc/php.d/xcache.ini

마지막 ini 파일 편집시 zend_extension은 모두 주석처리하고 extension = xcache.so만 주석을 풀었습니다.

마지막으로 시스템 시작할때 lighttpd 실행할수 있도록, 아파치 대신 lighttpd를 실행되도록 했습니다.

# /usr/sbin/apachectl stop
# /sbin/chkconfig httpd off
# /sbin/chkconfig –add lighttpd
# /sbin/chkconfig lighttpd on
# /etc/init.d/lighttpd start

방화벽(iptables)은 설치할때 22와 80번 포트는 풀어줬었습니다. 혹시 방화벽이 안 풀려있다면… /etc/sysconfig/iptables 파일을 편집해서 다음 라인을 적당한 곳(REJECT 이전)에 넣고…

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

iptables를 다시 시작하고 설정을 저장~ (저장 안하면 리부팅하면 설정 날라가요)

# /etc/init.d/iptables restart
# /etc/init.d/iptables save

그리고 selinux 기능을 사용중이고 일반 사용자 계정에서 웹페이지가 서비스 되게 하려면…

# su – webuser
$ chmod og+x ~
$ chcon -R -t httpd_user_content_t public_html

CentOS (Redhat Enterprise)에서 lighttpd 설치

이번에 회사에서 새 서버들을 구매해서 IDC에 들어왔습니다. Dell PowerEdge SC1435로 AMD기반 옵테론 CPU라서 FreeBSD보다는 Linux가 좋을거 같더군요. 전에도 델서버 들어왔었는데 FreeBSD에서 네트워크 디바이스가 정상적으로 동작을 안하더군요. 델서비스에 연락했더니 Redhat Enterprise Linux(RHEL)구해서 설치하라고 해서 설치했었는데 네트워크 드라이버를 따로 구해서 설치해야되더군요. 서버에는 원래 엑스를 설치를 잘 안해서 고생했습니다. 일단 이미 설치된 다른 서버에 X 설치하고 웹에서 다운로드하는데 문서가 exe 파일이더군요! 황당 –; 집으로 VNC로 연결하여 실행하여 풀어보니 별거 없더군요 –; 설치했던 서버는 PE2950이었습니다. 다행히 USB 메모리가 있어서 네트워크를 잡을수 있었습니다…  그때 RHEL4를 받아서 설치했었는데 유료사용자가 아니면 업그레이드가 안되더군요. 그래서 이번에는 RHEL 소스를 이용하여 바이너리 호환이 되는 CentOS (Community Enterprise OS) AMD64 버전을 받아서 설치했습니다.

서버 여러대 설치하느라 시간이 좀 남아서(DVD 한장만 궈서갔음) FreeBSD 6.2(AMD64)도 설치해봤는데 별 이상없이 깔리더군요. 근데 SC1435에 PS/2 포트가 없어서 USB포트로 키보드와 마우스를 연결(Y케이블 이용해서 PS/2 키보드와 마우스연결)했는데 뺐다가 끼면 키보드와 마우스가 인식이 안되더군요.. 관리편의상 동시에 들어오는 서버는 같은 OS를 설치하는게 편하기 때문에 다시 밀고 CentOS를 설치하고, 업데이트까지 무사히 마치고 왔습니다. 업데이트는 정말 편하더군요. (#yum update) 그리고 네트워크 드라이버도 추가 설치없이 바로 잡히더군요.

이제 CentOS(AMD64)에서 lighttpd와 친구들 설치 방법에 대해서 설명드릴께요^^

AMD64의 php는 fastcgi가 컴파일안되어 있어서 lighttpd와 php를 fastcgi와 연결하기 위해서 php를 컴파일했습니다.

# cd /opt
# wget http://isoredirect.centos.org/centos/4/os/SRPMS/php-4.3.9-3.15.src.rpm
# rpm -i php-4.3.9-3.15.src.rpm
# vi /usr/src/redhat/SPECS/php.spec

       –enable-force-cgi-redirect \
      앞줄에
       –enable-fastcgi \
      를 넣어줍니다.

# rpmbuild -bb php.spec

이때 필요한 패키지를 설치하고 해야할수도 있습니다. 오류에 뭐가 필요하다고 나옵니다.
  ( # yum update aspell-devel httpd-devel pcre-devel …)
컴파일 완료되면 /usr/src/redhat/RPMS/x86_64 (또는 i386)에 바이너리 rpm이 생깁니다.

컴파일후 원하는 패키지를 업데이트 합니다. 버전번호 때문에 업그레이드가 안되면 –force를 이용해서 강제로 업데이트하면 됩니다.

lighttpd는 src rpm을 받아서 컴파일 합니다.

# wget http://www.lighttpd.net/download/lighttpd-1.4.13-1.src.rpm
# rpmbuild –rebuild lighttpd-1.3.15-1.src.rpm

xcache 역시 src rpm을 받아서 설치합니다.

# wget http://www.jasonlitka.com/media/files/SRPMS/php-xcache-1.2.0_0.2.src.rpm
# rpmbuild –rebuild php-xcache-1.2.0_0.2.src.rpm

rpm 바이너리 파일은 /usr/src/redhat/RPMS/x86_64 나 i386 등에 생깁니다. 적당히 원하는 패키지를 설치해주면 됩니다. 5대 서버에 설치하느라 한곳에서 컴파일하고 다음 스크립트를 이용하여 여러서버에 설치하였습니다.

#!/bin/sh
# install_lighttpd.sh

/usr/sbin/apachectl stop

rpm -ivh lighttpd-1.4.13-1.x86_64.rpm
rpm -Uvh –force php-4.3.9-3.15.x86_64.rpm php-devel-4.3.9-3.15.x86_64.rpm  php-pear-4.3.9-3.15.x86_64.rpm php-ldap-4.3.9-3.15.x86_64.rpm  php-mysql-4.3.9-3.15.x86_64.rpm
rpm -ivh php-xcache-4.3.9_1.2.0-0.2.x86_64.rpm

mkdir -p /etc/lighttpd
cp ./lighttpd.conf /etc/lighttpd
adduser -s /sbin/nologin www
/sbin/chkconfig httpd off
/sbin/chkconfig –add lighttpd
/sbin/chkconfig lighttpd on

touch /var/log/lighttpd.access.log
touch /var/log/lighttpd.error.log

chown www:www /var/log/lighttpd.access.log
chown www:www /var/log/lighttpd.error.log

/etc/init.d/lighttpd start

lighttpd.conf는 freebsd에서 사용하던걸 그대로 가져와서 server.event-handler 등 몇가지만 바꿨습니다. 주석등의 라인은 삭제했습니다.

# lighttpd.conf
server.modules              = (
                               “mod_redirect”,
                               “mod_alias”,
                               “mod_access”,
                              “mod_status”,
                              “mod_fastcgi”,
                              “mod_userdir”,
                               “mod_accesslog” )
server.document-root = “/var/www/html/”
accesslog.filename          = “/var/log/lighttpd.access.log”
server.errorlog             = “/var/log/lighttpd.error.log”
index-file.names            = ( “index.php”, “index.html”,
                               “index.htm”, “default.htm” )
server.event-handler = “linux-sysepoll”
mimetype.assign             = (
  생략…
)

userdir.path = “public_html”
url.access-deny             = ( “~”, “.inc” )
static-file.exclude-extensions = ( “.php”, “.pl”, “.fcgi” )
server.pid-file            = “/var/run/lighttpd.pid”
server.username            = “www”
server.groupname           = “www”
fastcgi.server              = ( “.php” =>
                               ( “localhost” =>
                                 (
                                  “socket” => “/tmp/php-fastcgi.socket”,
                                  “bin-path” => “/usr/bin/php”,
                                  “min-procs” => 1,
                                  “max-procs” => 2,
                                  “max-load-per-proc” => 4,
                                  “idle-timeout” => 10,
                                  “bin-environment” => ( “PHP_FCGI_CHILDREN” => “16”,
                                                         “PHP_FCGI_MAX_REQUESTS” => “2000” )
                                 )
                              )
                             )

server.max-fds = 4096

그리고 로그가 계속 쌓이지 않도록 /etc/logrotate.d/lighttpd 파일을 만들었습니다.

/var/log/lighttpd.*.log {
  rotate 30
  daily
  missingok
  notifempty
  compress
  sharedscripts
  postrotate
       touch /var/log/lighttpd.access.log
       touch /var/log/lighttpd.error.log
       chown www:www /var/log/lighttpd.access.log
       chown www:www /var/log/lighttpd.error.log
       /bin/kill -HUP `cat /var/run/lighttpd.pid 2>/dev/null` 2> /dev/null || true
  endscript
}

참고 URL:
http://www.cyberciti.biz/tips/redhat-enterprise-linux-lighttpd-fastcgi-php.html
http://www.jasonlitka.com/2006/12/20/php-caching-and-acceleration-with-xcache/