서버 설치 · 13 min read · Nov 05, 2025
Ubuntu Lucid x86_64에 ISPCP 설치 및 Apache2에서 가상 호스트별 Chroot 구현
Ubuntu Lucid x86_64에 ISPCP 설치 및 Apache2에서 가상 호스트별 Chroot 구현
서버 설치
기본 Ubuntu Lucid x86_64 서버를 설치하려면 The Perfect Server - Ubuntu Lucid Lynx (Ubuntu 10.04) [ISPConfig 2] 가이드를 따르십시오.
ISPCP 설치
공식 다운로드 페이지에서 ISPCP 소스를 다운로드합니다. 이 가이드는 1.0.6을 기준으로 합니다. 압축을 풀고, 추출된 디렉토리로 이동합니다.
tar xf iscp-omega-1.0.6.tar.gzcd ispcp-omega-1.0.6cp docs/Ubuntu/ubuntu-packages-karmic docs/Ubuntu/ubuntu-packages-luciddocs/Ubuntu/ubuntu-packages-lucid 파일을 편집하고, 다음 항목을 교체합니다:
libmd5-perl
libmysqlclient15off다음으로:
libdigestmd5-perl
libmysqlclient16docs/Ubuntu/INSTALL에 자세히 설명된 설치 단계를 따르십시오. ispcp-setup을 실행할 때 FastCGI를 선택해야 합니다. 이 시점에서 기본 ISPCP 시스템이 작동해야 하며, ps auxf 출력은 다음과 매우 유사해야 합니다:
root 25761 0.0 1.7 138304 36360 ? Ss 10:56 0:00 /usr/sbin/apache2 -k start
root 25762 0.0 0.0 4096 580 ? S 10:56 0:00 \_ /bin/sh -c /var/www/ispcp/engine/ispcp-apache-logger -e
root 25764 0.0 0.7 62624 15416 ? S 10:56 0:00 | \_ /usr/bin/perl /var/www/ispcp/engine/ispcp-apache-logger -e
root 25763 0.0 0.0 4096 576 ? S 10:56 0:00 \_ /bin/sh -c /var/www/ispcp/engine/ispcp-apache-logger
root 25765 0.0 0.7 62624 15416 ? S 10:56 0:00 | \_ /usr/bin/perl /var/www/ispcp/engine/ispcp-apache-logger
www-data 25766 0.0 1.6 138004 34416 ? S 10:56 0:00 \_ /usr/sbin/apache2 -k start
www-data 25767 0.0 1.6 138004 34372 ? S 10:56 0:00 \_ /usr/sbin/fcgi-pm -k start
vu2000 25768 0.0 0.4 147120 8936 ? Ss 10:56 0:00 | \_ /usr/bin/php5-cgi
vu2000 25826 0.0 0.7 155448 15156 ? S 10:56 0:00 | \_ /usr/bin/php5-cgi
vu2000 25827 0.0 0.1 147120 3788 ? S 10:56 0:00 | \_ /usr/bin/php5-cgi
www-data 25769 0.0 1.8 427808 37468 ? Sl 10:56 0:00 \_ /usr/sbin/apache2 -k start
www-data 25778 0.0 1.7 427688 36796 ? Sl 10:56 0:00 \_ /usr/sbin/apache2 -k start사용자 정의 Suexec 래퍼 컴파일
이 섹션의 대부분은 metaclarity의 훌륭한 게시물을 기반으로 합니다. 공식 다운로드 페이지에서 Apache HTTPd 소스를 다운로드합니다. 이 가이드는 2.2.16을 기준으로 합니다.
tar xf httpd-2.2.16.tar.bz2cd httpd-2.2.16/support패치를 적용합니다.
--- Makefile.in.old 2009-04-21 09:59:33.000000000 -0400
+++ Makefile.in 2009-04-21 10:04:11.000000000 -0400
@@ -59,9 +59,13 @@
$(LINK) $(checkgid_LTFLAGS) $(checkgid_OBJECTS) $(PROGRAM_LDADD)
suexec_OBJECTS = suexec.lo
-suexec: $(suexec_OBJECTS)
+suexec: $(suexec_OBJECTS) suexec-phpfcgi
$(LINK) $(suexec_OBJECTS)
+suexec-phpfcgi_OBJECTS = suexec-phpfcgi.lo
+suexec-phpfcgi: $(suexec-phpfcgi_OBJECTS)
+ $(LINK) $(suexec-phpfcgi_OBJECTS)
+
htcacheclean_OBJECTS = htcacheclean.lo
htcacheclean: $(htcacheclean_OBJECTS)
$(LINK) $(htcacheclean_LTFLAGS) $(htcacheclean_OBJECTS) $(PROGRAM_LDADD) --- suexec.c 2010-07-12 11:26:29.000000000 +0200
+++ suexec-phpfcgi.c 2010-09-14 10:07:36.581742585 +0200
@@ -259,6 +259,7 @@
char *cmd; /* command to be executed */
char cwd[AP_MAXPATH]; /* current working directory */
char dwd[AP_MAXPATH]; /* docroot working directory */
+ char nwd[AP_MAXPATH]; /* after-chroot working dir */
struct passwd *pw; /* password entry holder */
struct group *gr; /* group entry holder */
struct stat dir_info; /* directory info holder */
@@ -456,7 +457,6 @@
log_err("cannot run as forbidden uid (%d/%s)\n", uid, cmd);
exit(107);
}
-
/*
* Error out if attempt is made to execute as root group
* or as a GID less than AP_GID_MIN. Tsk tsk.
@@ -466,6 +466,42 @@
exit(108);
}
+
+ int striplen = strlen (target_homedir);
+
+ char* tlen = strchr(target_homedir, '/');
+ char* hlen = strchr(tlen+1, '/');
+ char* ulen = strchr(hlen+1, '/');
+ char* chroot_dir = strndup(target_homedir, striplen);
+ char* pt = getenv("PATH_TRANSLATED");
+ if (pt != 0) {
+ setenv("PATH_TRANSLATED", pt + (ulen - target_homedir), 1);
+ }
+
+ setenv("DOCUMENT_ROOT", "/", 1);
+
+ if (getcwd(nwd, AP_MAXPATH) == NULL) {
+ log_err("cannot get current working directory (prechroot)\n");
+ exit(111);
+ }
+
+ char* trunc_nwd = strndup("/fcgi", 5);
+
+ if (chdir(chroot_dir)) {
+ log_err("crit: can't chdir to chroot dir (%s)",chroot_dir);
+ exit(121);
+ }
+
+ if (chroot(chroot_dir) != 0) {
+ log_err("emerg: failed to chroot (%s, %s)\n", chroot_dir, cmd);
+ exit(122);
+ }
+
+ if (chdir (trunc_nwd)) {
+ log_err("crit: can't chdir to %s inside chroot %s\n", trunc_nwd, chroot_dir);
+ exit(42);
+ }
+
/*
* Change UID/GID here so that the following tests work over NFS.
*
@@ -498,22 +534,11 @@
exit(111);
}
-
if (userdir) {
- if (((chdir(target_homedir)) != 0) ||
- ((chdir(AP_USERDIR_SUFFIX)) != 0) ||
- ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
- ((chdir(cwd)) != 0)) {
- log_err("cannot get docroot information (%s)\n", target_homedir);
- exit(112);
- }
- }
- else {
- if (((chdir(AP_DOC_ROOT)) != 0) ||
- ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
- ((chdir(cwd)) != 0)) {
- log_err("cannot get docroot information (%s)\n", AP_DOC_ROOT);
- exit(113);
- }
+ if (((chdir(getenv("DOCUMENT_ROOT"))) != 0) ||
+ ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
+ ((chdir(cwd)) != 0)) {
+ log_err("cannot get docroot information (%s)\n", AP_DOC_ROOT);
+ exit(113);
}
if ((strncmp(cwd, dwd, strlen(dwd))) != 0) {
@@ -565,7 +590,7 @@
* Error out if the target name/group is different from
* the name/group of the cwd or the program.
*/
- if ((uid != dir_info.st_uid) ||
+/* if ((uid != dir_info.st_uid) ||
(gid != dir_info.st_gid) ||
(uid != prg_info.st_uid) ||
(gid != prg_info.st_gid)) {
@@ -575,7 +600,7 @@
dir_info.st_uid, dir_info.st_gid,
prg_info.st_uid, prg_info.st_gid);
exit(120);
- }
+ }*/
/*
* Error out if the program is not executable for the user.
* Otherwise, she won't find any error in the logs except for patch -p0 < ../../makefile.diffpatch -p0 -o suexec-phpfcgi.c < ../../suexec-phpfcgi.diffsuexec.h 파일을 편집합니다:
AP_HTTPD_USER www-data
AP_UID_MIN 2000
AP_GID_MIN 2000
AP_LOG_EXEC "/tmp/suexec.log"
AP_DOC_ROOT "/"cd ..configure --prefix=/usr/lib/apache2 --enable-suexec --enable-mods-shared=most --enable-so --with-mpm=worker --with-included-aprcd supportmake suexec새로운 suexec 래퍼를 설치합니다.
cp suexec-phpfcgi /usr/lib/apache2chown .www-data /usr/lib/apache2/suexec-phpfcgichmod 4751 /usr/lib/apache2/suexec-phpfcgi/etc/apache2/modules-enables/fastcgi_ispcp.conf를 업데이트하여 새로운 래퍼를 사용합니다:
FastCgiWrapper /usr/lib/apache2/suexec-phpfcgi가상 호스트를 위한 Chroot 생성
다음은 충분한 chroot입니다. 나는 내 것을 /usr/local/skel에 두었습니다. 더 많은/다른 시간대를 추가할 수 있습니다.
.
\__ bin -> chroot/bin
\__ chroot
| \__ bin
| | \__ dash
| | \__ sh -> dash
| \__ dev
| | \__ null
| | \__ urandom
| | \__ zero
| \__ etc
| | \__ group
| | \__ host.conf
| | \__ hosts
| | \__ locale.alias
| | \__ localtime
| | \__ nsswitch.conf
| | \__ passwd
| | \__ php5
| | | \__ cgi
| | | | \__ conf.d -> ../conf.d
| | | | \__ php.ini
| | | \__ conf.d
| | | | \__ adodb.ini
| | | | \__ gd.ini
| | | | \__ mcrypt.ini
| | | | \__ mysqli.ini
| | | | \__ mysql.ini
| | | | \__ pdo.ini
| | | | \__ pdo_mysql.ini
| | | \__ php.ini
| | \__ protocols
| | \__ resolv.conf
| | \__ services
| \__ lib
| | \__ ld-2.11.1.so
| | \__ ld-linux-x86-64.so.2 -> ld-2.11.1.so
| | \__ libbz2.so.1 -> libbz2.so.1.0.4
| | \__ libbz2.so.1.0 -> libbz2.so.1.0.4
| | \__ libbz2.so.1.0.4
| | \__ libc-2.11.1.so
| | \__ libcom_err.so.2 -> libcom_err.so.2.1
| | \__ libcom_err.so.2.1
| | \__ libcrypt-2.11.1.so
| | \__ libcrypto.so.0.9.8
| | \__ libcrypt.so.1 -> libcrypt-2.11.1.so
| | \__ libc.so.6 -> libc-2.11.1.so
| | \__ libdl-2.11.1.so
| | \__ libdl.so.2 -> libdl-2.11.1.so
| | \__ libexpat.so.1 -> libexpat.so.1.5.2
| | \__ libexpat.so.1.5.2
| | \__ libgcc_s.so.1
| | \__ libkeyutils-1.2.so
| | \__ libkeyutils.so.1 -> libkeyutils-1.2.so
| | \__ libm-2.11.1.so
| | \__ libm.so.6 -> libm-2.11.1.so
| | \__ libncurses.so.5 -> libncurses.so.5.7
| | \__ libncurses.so.5.7
| | \__ libnsl-2.11.1.so
| | \__ libnsl.so.1 -> libnsl-2.11.1.so
| | \__ libnss_dns-2.11.1.so
| | \__ libnss_dns.so.2 -> libnss_dns-2.11.1.so
| | \__ libnss_files-2.11.1.so
| | \__ libnss_files.so.2 -> libnss_files-2.11.1.so
| | \__ libnss_nis-2.11.1.so
| | \__ libnss_nis.so.2 -> libnss_nis-2.11.1.so
| | \__ libpam.so.0 -> libpam.so.0.82.2
| | \__ libpam.so.0.82.2
| | \__ libpcre.so.3 -> libpcre.so.3.12.1
| | \__ libpcre.so.3.12.1
| | \__ libpng12.so.0 -> libpng12.so.0.42.0
| | \__ libpng12.so.0.42.0
| | \__ libpthread-2.11.1.so
| | \__ libpthread.so.0 -> libpthread-2.11.1.so
| | \__ libresolv-2.11.1.so
| | \__ libresolv.so.2 -> libresolv-2.11.1.so
| | \__ librt-2.11.1.so
| | \__ librt.so.1 -> librt-2.11.1.so
| | \__ libselinux.so.1
| | \__ libssl.so.0.9.8
| | \__ libz.so.1 -> libz.so.1.2.3.3
| | \__ libz.so.1.2.3.3
| \__ lib64 -> lib
| \__ usr
| \__ bin
| | \__ php5-cgi
| \__ lib
| | \__ apache2
| | | \__ logs -> /var/log/apache2
| | \__ gconv
| | | \__ gconv-modules
| | | \__ gconv-modules.cache
| | \__ libdb-4.8.so
| | \__ libfontconfig.so.1 -> libfontconfig.so.1.4.4
| | \__ libfontconfig.so.1.4.4
| | \__ libfreetype.so.6 -> libfreetype.so.6.3.22
| | \__ libfreetype.so.6.3.22
| | \__ libgd.so.2 -> libgd.so.2.0.0
| | \__ libgd.so.2.0.0
| | \__ libgssapi_krb5.so.2 -> libgssapi_krb5.so.2.2
| | \__ libgssapi_krb5.so.2.2
| | \__ libjpeg.so.62 -> libjpeg.so.62.0.0
| | \__ libjpeg.so.62.0.0
| | \__ libk5crypto.so.3 -> libk5crypto.so.3.1
| | \__ libk5crypto.so.3.1
| | \__ libkrb5.so.3 -> libkrb5.so.3.3
| | \__ libkrb5.so.3.3
| | \__ libkrb5support.so.0 -> libkrb5support.so.0.1
| | \__ libkrb5support.so.0.1
| | \__ libmcrypt.so.4 -> libmcrypt.so.4.4.8
| | \__ libmcrypt.so.4.4.8
| | \__ libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0
| | \__ libmysqlclient_r.so.16.0.0
| | \__ libt1.so.5 -> libt1.so.5.1.2
| | \__ libt1.so.5.1.2
| | \__ libX11.so.6 -> libX11.so.6.3.0
| | \__ libX11.so.6.3.0
| | \__ libXau.so.6 -> libXau.so.6.0.0
| | \__ libXau.so.6.0.0
| | \__ libxcb.so.1 -> libxcb.so.1.1.0
| | \__ libxcb.so.1.1.0
| | \__ libXdmcp.so.6 -> libXdmcp.so.6.0.0
| | \__ libXdmcp.so.6.0.0
| | \__ libxml2.so.2 -> libxml2.so.2.7.6
| | \__ libxml2.so.2.7.6
| | \__ libXpm.so.4 -> libXpm.so.4.11.0
| | \__ libXpm.so.4.11.0
| | \__ locale
| | | \__ en_ZA.utf8
| | | \__ LC_ADDRESS
| | | \__ LC_COLLATE
| | | \__ LC_CTYPE
| | | \__ LC_IDENTIFICATION
| | | \__ LC_MEASUREMENT
| | | \__ LC_MESSAGES
| | | | \__ SYS_LC_MESSAGES
| | | \__ LC_MONETARY
| | | \__ LC_NAME
| | | \__ LC_NUMERIC
| | | \__ LC_PAPER
| | | \__ LC_TELEPHONE
| | | \__ LC_TIME
| | \__ php5
| | | \__ 20090626
| | | \__ adodb.so
| | | \__ gd.so
| | | \__ mcrypt.so
| | | \__ mysqli.so
| | | \__ mysql.so
| | | \__ pdo_mysql.so
| | | \__ pdo.so
| | \__ sendmail -> ../sbin/mini_sendmail
| \__ lib64 -> lib
| \__ sbin
| | \__ mini_sendmail
| | \__ sendmail -> mini_sendmail
| \__ share
| \__ locale
| | \__ locale.alias -> /etc/locale.alias
| \__ zoneinfo
| \__ Africa
| \__ Johannesburg
\__ dev -> chroot/dev
\__ etc -> chroot/etc
\__ fcgi
| \__ php5-fcgi-starter
\__ lib -> chroot/lib
\__ lib64 -> chroot/lib64
\__ logs
\__ tmp
\__ usr -> chroot/usr
\__ var
\__ lib
| \__ apache2
| \__ php5
\__ log
| \__ apache2 -> /logs
\__ www
\__ virtualChroot 완료
생성된 각 가상 호스트에 대해 위에서 정의한 chroot를 가상 호스트의 홈 디렉토리에 복사해야 합니다. 예를 들어, vu2009 사용자로 실행되는 가상 호스트 example.org의 경우 다음이 적용됩니다:
cp -a /usr/local/skel/* ~vu2009/또한 다음이 필요합니다:
mkdir -p ~vu2009/var/www/virtual/example.orgcd ~vu2009/var/www/virtual/example.org && ln -s /htdocs htdocs각 서브도메인에 대한 링크도 생성합니다. 서브도메인 one.example.org와 two.example.org가 있는 경우, 다음도 수행합니다:
cd ~vu2009/var/www/virtual/example.org && ln -s /one onecd ~vu2009/var/www/virtual/example.org && ln -s /two two이 심볼릭 링크는 깨진 것처럼 보입니다. 그러나 ~vu2009가 chroot된 파일 시스템의 루트라는 점을 고려하면 작동합니다.
ispcp.conf 업데이트
데이터베이스가 소켓(로컬호스트)이 아닌 TCP(127.0.0.1)를 사용하고 있는지 확인하십시오. chroot된 vhost는 /var/run/mysqld/mysqld.sock에 있는 MySQL 소켓을 볼 수 없습니다.
DATABASE_HOST = 127.0.0.1마스터 가상 호스트 업데이트
조금 더 심볼릭 링크 마법이 필요합니다.
cd /var/www/fcgi/master && ln -s / fcgicp -a /var/www/fcgi/master /var/www/ispcp/gui/var/www/fgci/master/etc/passwd를 업데이트하고, vu2000(마스터 사용자)의 홈 디렉토리를 /var/www/ispcp/gui로 변경합니다. 제어판이 기본 구성을 읽을 수 있어야 합니다. 이 파일은 변경되지 않으므로 직접 복사하는 것이 좋습니다.
cp /etc/ispcp/ispcp.conf /var/www/ispcp/gui/etc/ispcp/cd /var/www/ispcp/gui/var/www/ispcp/ && ln -s / guiApache2 Chroot
mkdir /var/www-jail/etc/apache2/httpd.conf를 업데이트합니다:
ChRootDir /var/www-jailmkdir -p /var/www-jail/var/wwwmount -o bind /var/www /var/www-jail/var/wwwchroot된 후, FastCGI 소켓은 vhosts에서 사용할 수 있어야 합니다.
mount -o bind /var/lib/apache2/fastcgi /var/www-jail/var/lib/apache2/fastcgi이 마운트를 영구적으로 만들려면 /etc/fstab에 추가합니다:
/var/www /var/www-jail/var/www none bind
/var/lib/apache2/fastcgi /var/www-jail/var/lib/apache2/fastcgi none bindSendmail Mini
Postfix는 많은 종속성이 있으므로, vhosts의 chroot에 포함하지 않는 것이 좋습니다. 대신, 여기에서 mini_sendmail을 다운로드하고 컴파일합니다. 정적으로 링크되면 작동하지 않지만, 이미 chroot에 있는 라이브러리보다 더 많은 라이브러리를 요구하지 않으므로 괜찮습니다. Makefile을 편집합니다:
CFLAGS = -g
#LDFLAGS = -s -static
LDFLAG = -g래퍼가 행복할 만큼 충분한 정보를 제공하지 않으므로, 약간 변경합니다:
--- mini_sendmail-1.3.6/mini_sendmail.c 2005-06-29 19:37:15.000000000 +0200
+++ mini_sendmail-1.3.6-mine/mini_sendmail.c 2010-10-01 15:12:40.947187053 +0200
@@ -30,7 +30,7 @@
don't want the features you can undef the symbols; some of them mean
a significant savings in executable size.
*/
-#define DO_RECEIVED /* whether to add a "Received:" header */
+#undef DO_RECEIVED /* whether to add a "Received:" header */
#define DO_GETPWUID /* whether to try a getpwuid() if getlogin() fails */
#define DO_MINUS_SP /* whether to implement the -s and -p flags */
#define DO_DNS /* whether to do a name lookup on -s, or just IP# */
@@ -122,6 +122,8 @@
{
if ( strncmp( argv[argn], "-f", 2 ) == 0 && argv[argn][2] != '\0' )
fake_from = &(argv[argn][2]);
+ else if ( strncmp( argv[argn], "-f", 2) == 0)
+ fake_from = &(argv[++argn][0]);
else if ( strcmp( argv[argn], "-t" ) == 0 )
parse_message = 1;
#ifdef DO_MINUS_SP
@@ -145,33 +147,32 @@
++argn;
}
- username = getlogin();
- if ( username == (char*) 0 )
- {
+ if ( fake_from == (char*) 0 ) {
+ username = getlogin();
+ if ( username == (char*) 0 ) {
#ifdef DO_GETPWUID
- struct passwd* pw = getpwuid( getuid() );
- if ( pw == (struct passwd*) 0 )
- {
- (void) fprintf( stderr, "%s: can't determine username\n", argv0 );
- exit( 1 );
+ struct passwd* pw = getpwuid( getuid() );
+ if ( pw == (struct passwd*) 0 ) {
+ (void) fprintf( stderr, "%s: can't determine username\n", argv0 );
+ exit( 1 );
}
- username = pw->pw_name;
+ username = pw->pw_name;
#else /* DO_GETPWUID */
- (void) fprintf( stderr, "%s: can't determine username\n", argv0 );
- exit( 1 );
+ (void) fprintf( stderr, "%s: can't determine username\n", argv0 );
+ exit( 1 );
#endif /* DO_GETPWUID */
}
-
- if ( gethostname( hostname, sizeof(hostname) - 1 ) < 0 )
- show_error( "gethostname" );
-
- if ( fake_from == (char*) 0 )
(void) snprintf( from, sizeof(from), "%s@%s", username, hostname );
- else
+ } else {
if ( strchr( fake_from, '@' ) == (char*) 0 )
(void) snprintf( from, sizeof(from), "%s@%s", fake_from, hostname );
else
(void) snprintf( from, sizeof(from), "%s", fake_from );
+ }
+
+ if ( gethostname( hostname, sizeof(hostname) - 1 ) < 0 )
+ show_error( "gethostname" );
+
/* Strip off any angle brackets in the from address. */
while ( from[0] == '<' makemkdir -p /usr/local/skel/usr/sbin/cp mini_sendmail /usr/local/skel/usr/sbin/cd /usr/local/skel/usr/sbin/ln -s mini_sendmail sendmail테스트
가상 호스트를 몇 개 생성하고 PHP가 실행되는지 확인합니다. 모든 것이 잘 되면 ps auxf 출력은 다음과 매우 유사해야 합니다:
root 25761 0.0 1.7 138304 36360 ? Ss 10:56 0:00 /usr/sbin/apache2 -k start
root 25762 0.0 0.0 4096 580 ? S 10:56 0:00 \_ /bin/sh -c /var/www/ispcp/engine/ispcp-apache-logger -e
root 25764 0.0 0.7 62624 15424 ? S 10:56 0:00 | \_ /usr/bin/perl /var/www/ispcp/engine/ispcp-apache-logger -e
root 25763 0.0 0.0 4096 576 ? S 10:56 0:00 \_ /bin/sh -c /var/www/ispcp/engine/ispcp-apache-logger
root 25765 0.0 0.7 62624 15452 ? S 10:56 0:00 | \_ /usr/bin/perl /var/www/ispcp/engine/ispcp-apache-logger
www-data 25766 0.0 1.6 138004 34416 ? S 10:56 0:00 \_ /usr/sbin/apache2 -k start
www-data 25767 0.0 1.6 138004 34440 ? S 10:56 0:00 \_ /usr/sbin/fcgi-pm -k start
vu2000 25768 0.0 0.4 147120 8936 ? Ss 10:56 0:00 | \_ /usr/bin/php5-cgi
vu2000 25826 0.0 0.7 155448 15332 ? S 10:56 0:00 | | \_ /usr/bin/php5-cgi
vu2000 25827 0.0 0.7 155192 14984 ? S 10:56 0:00 | | \_ /usr/bin/php5-cgi
vu2007 11282 0.0 0.3 124356 7968 ? Ss 15:16 0:00 | \_ /usr/bin/php5-cgi
vu2007 11284 0.1 0.5 129676 11560 ? S 15:16 0:00 | | \_ /usr/bin/php5-cgi
vu2007 11285 0.1 0.5 131340 11756 ? S 15:16 0:00 | | \_ /usr/bin/php5-cgi
vu2058 11292 1.0 0.3 124356 7972 ? Ss 15:17 0:00 | \_ /usr/bin/php5-cgi
vu2058 11294 13.0 1.3 145292 27836 ? S 15:17 0:00 | \_ /usr/bin/php5-cgi
vu2058 11295 0.0 0.1 124356 3512 ? S 15:17 0:00 | \_ /usr/bin/php5-cgi
www-data 25769 0.0 1.8 428520 38416 ? Sl 10:56 0:00 \_ /usr/sbin/apache2 -k start
www-data 25778 0.0 1.8 428356 38008 ? Sl 10:56 0:00 \_ /usr/sbin/apache2 -k start유용한 디버깅 도구로는 FastCGI 프로세스 관리자(PID 25767)에서 strace를 사용하는 것이 있습니다. vhost가 시작되지 않는 경우:
strace -ff -p 25767또한 /tmp/suexec.log의 출력을 확인하십시오. vhost의 자체 프로세스에서 strace를 사용하는 것은 시작되지만 원하는 출력을 생성하지 않는 경우 유용합니다(예: 위 출력의 vu2058에 대해):
strace -ff -p 11292 -p 11294 -p 11295새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.