서버 설정 · 7 min read · Nov 11, 2025
완벽한 서버 - CentOS 6.1 x86_64와 nginx [ISPConfig 3] - 페이지 5
15 Nginx, PHP5 (PHP-FPM) 및 Fcgiwrap 설치
Nginx는 CentOS 6.1 (EPEL에서) 패키지로 제공되며, 다음과 같이 설치할 수 있습니다:
yum install nginx시스템에 Apache2가 이미 설치되어 있다면, 지금 중지하세요…
/etc/init.d/httpd stop… 그리고 Apache의 시스템 시작 링크를 제거합니다:
chkconfig --del httpd그런 다음 nginx의 시스템 시작 링크를 생성하고 시작합니다:
chkconfig –levels 235 nginx on
/etc/init.d/nginx start
(만약 Apache2와 nginx가 모두 설치되어 있다면, ISPConfig 3 설치 프로그램이 어떤 것을 사용할지 물어볼 것입니다 - 이 경우 nginx라고 대답하세요. 이 둘 중 하나만 설치되어 있다면, ISPConfig가 필요한 구성을 자동으로 수행합니다.)
PHP5를 nginx에서 PHP-FPM을 통해 작동하게 할 수 있습니다 (PHP-FPM (FastCGI 프로세스 관리자)은 사이트의 크기와 관계없이 유용한 몇 가지 추가 기능을 가진 대체 PHP FastCGI 구현입니다. 특히 바쁜 사이트에 유용합니다). 다음과 같이 php-cli 및 MySQL을 PHP 스크립트에서 사용하려면 필요한 php-mysql과 같은 몇 가지 PHP5 모듈과 함께 php-fpm을 설치할 수 있습니다:
yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy다음으로 /etc/php.ini를 엽니다…
vi /etc/php.ini… 그리고 오류 보고를 변경합니다 (더 이상 공지가 표시되지 않도록) 및 cgi.fix_pathinfo=1의 주석을 제거합니다:
| [...] ;error_reporting = E_ALL & ~E_DEPRECATED error_reporting = E_ALL & ~E_NOTICE [...] |
또한 cgi.fix_pathinfo=0으로 설정합니다:
vi /etc/php.ini| [...] ; cgi.fix_pathinfo는 CGI에 대한 *실제* PATH_INFO/PATH_TRANSLATED 지원을 제공합니다. PHP의 ; 이전 동작은 PATH_TRANSLATED를 SCRIPT_FILENAME으로 설정하고 PATH_INFO가 무엇인지 이해하지 못했습니다. ; PATH_INFO에 대한 자세한 내용은 cgi 사양을 참조하십시오. 이를 1로 설정하면 PHP CGI가 사양에 맞게 경로를 수정합니다. 0으로 설정하면 PHP가 이전과 같이 동작합니다. 기본값은 1입니다. 스크립트를 수정하여 PATH_TRANSLATED 대신 SCRIPT_FILENAME을 사용해야 합니다. ; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |
(이렇게 해야 하는 이유를 알아보려면 http://wiki.nginx.org/Pitfalls를 읽어보세요.)
또한 다음과 같은 오류를 피하기 위해
[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): 시스템의 시간대 설정에 의존하는 것은 안전하지 않습니다. date.timezone 설정 또는 date_default_timezone_set() 함수를 사용해야 합니다. 이러한 방법 중 하나를 사용했지만 여전히 이 경고가 표시된다면, 시간대 식별자를 잘못 입력했을 가능성이 높습니다. /usr/share/nginx/html/info.php의 2번째 줄에서 'CEST/2.0/DST'에 대해 'Europe/Berlin'을 선택했습니다.… 브라우저에서 PHP 스크립트를 호출할 때 /var/log/php-fpm/www-error.log에서, /etc/php.ini에서 date.timezone을 설정해야 합니다:
| [...] [Date] ; 날짜 함수에서 사용하는 기본 시간대를 정의합니다 ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone date.timezone = "Europe/Berlin" [...] |
시스템에 대한 올바른 시간대를 확인하려면 다음을 실행하십시오:
cat /etc/sysconfig/clock[root@server1 tmp]# cat /etc/sysconfig/clock
ZONE=”Europe/Berlin”
[root@server1 tmp]#
다음으로 php-fpm의 시스템 시작 링크를 생성하고 시작합니다:
chkconfig –levels 235 php-fpm on
/etc/init.d/php-fpm start
PHP-FPM은 포트 9000에서 FastCGI 서버를 실행하는 데몬 프로세스입니다 (/etc/init.d/php-fpm).
nginx에서 CGI 지원을 받기 위해 Fcgiwrap을 설치합니다.
Fcgiwrap은 복잡한 CGI 스크립트에도 작동해야 하는 CGI 래퍼로, 각 vhost가 자체 cgi-bin 디렉토리를 사용할 수 있도록 하여 공유 호스팅 환경에서 사용할 수 있습니다.
CentOS 6.1에 대한 fcgiwrap 패키지가 없으므로, 직접 빌드해야 합니다. 먼저 몇 가지 필수 패키지를 설치합니다:
yum install fcgi-devel이제 다음과 같이 fcgiwrap을 빌드할 수 있습니다:
cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install
이렇게 하면 fcgiwrap이 /usr/local/sbin/fcgiwrap에 설치됩니다.
다음으로 fcgiwrap을 데몬으로 실행할 수 있도록 spawn-fcgi 패키지를 설치합니다:
yum install spawn-fcgi/etc/sysconfig/spawn-fcgi를 엽니다…
vi /etc/sysconfig/spawn-fcgi… 그리고 파일을 다음과 같이 수정합니다:
| # "spawn-fcgi" 서비스가 작동하기 전에 몇 가지 작업 옵션을 설정해야 합니다. # SOCKET이 파일을 가리키면, 이 파일은 init 스크립트에 의해 정리됩니다. # # spawn-fcgi(1)를 참조하여 가능한 모든 옵션을 확인하십시오. # # 예: #SOCKET=/var/run/php-fcgi.sock #OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi" FCGI_SOCKET=/var/run/fcgiwrap.socket FCGI_PROGRAM=/usr/local/sbin/fcgiwrap FCGI_USER=apache FCGI_GROUP=apache FCGI_EXTRA_OPTIONS="-M 0770" OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM" |
이제 nginx 사용자를 apache 그룹에 추가합니다:
usermod -a -G apache nginxspawn-fcgi의 시스템 시작 링크를 생성합니다…
chkconfig --levels 235 spawn-fcgi on… 그리고 다음과 같이 시작합니다:
/etc/init.d/spawn-fcgi start이제 /var/run/fcgiwrap.socket에서 fcgiwrap 소켓을 찾을 수 있으며, 이는 apache 사용자 및 그룹에 의해 소유됩니다 (일부 스크립트, 예: Mailman은 apache 사용자/그룹에 의해 실행되기를 기대하므로, nginx 사용자/그룹으로 spawn-fcgi를 실행하지 않고 nginx를 apache 그룹에 추가합니다).
16 phpMyAdmin 설치
다음으로 phpMyAdmin을 설치합니다:
yum install phpmyadmin다음으로 phpMyAdmin의 인증을 쿠키에서 http로 변경합니다:
vi /usr/share/phpmyadmin/config.inc.php| [...] /* 인증 유형 */ $cfg['Servers'][$i]['auth_type'] = 'http'; [...] |
이제 /usr/share/phpmyadmin/ 디렉토리에서 phpMyAdmin을 찾을 수 있습니다.
ISPConfig 3을 설치한 후, 다음과 같이 phpMyAdmin에 접근할 수 있습니다: ISPConfig 앱 vhost가 포트 8081에서 nginx에 대해 phpMyAdmin 구성을 제공하므로, http://server1.example.com:8081/phpmyadmin 또는 http://server1.example.com:8081/phpMyAdmin을 사용하여 phpMyAdmin에 접근할 수 있습니다.
웹사이트에서 사용할 수 있는 /phpmyadmin 또는 /phpMyAdmin 별칭을 사용하려면, Apache보다 약간 더 복잡합니다. nginx는 전역 별칭(즉, 모든 vhosts에 대해 정의할 수 있는 별칭)이 없기 때문입니다. 따라서 phpMyAdmin에 접근하고자 하는 각 vhost에 대해 이러한 별칭을 정의해야 합니다.
이를 위해 ISPConfig의 웹사이트 옵션 탭의 nginx 지시어 필드에 다음을 붙여넣습니다:
| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |
vhost에 대해 http s를 사용하는 경우, phpMyAdmin 구성에 fastcgi_param HTTPS on; 줄을 다음과 같이 추가해야 합니다:
| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS on; # <-- 이 줄을 추가하세요 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |
vhost에 대해 http와 https를 모두 사용하는 경우, /etc/nginx/nginx.conf의 http {} 섹션에 다음 섹션을 추가해야 합니다 (모든 include 줄 전에) 이는 방문자가 http 또는 https를 사용하는지 확인하고 $fastcgi_https 변수를 설정합니다 (이 변수는 phpMyAdmin 구성에서 사용할 것입니다):
vi /etc/nginx/nginx.conf| [...] http { [...] ## HTTPS 사용 여부 감지 map $scheme $fastcgi_https { default off; https on; } [...] } [...] |
그 후 nginx를 다시 로드하는 것을 잊지 마세요:
/etc/init.d/nginx reload 그런 다음 nginx 지시어 필드로 다시 가서 fastcgi_param HTTPS on; 대신 fastcgi_param HTTPS $fastcgi_https; 줄을 추가하여 phpMyAdmin을 http 및 https 요청 모두에 사용할 수 있도록 합니다:
| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS $fastcgi_https; # <-- 이 줄을 추가하세요 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |
17 Mailman 설치
버전 3.0.4부터 ISPConfig는 Mailman 메일링 리스트를 관리(생성/수정/삭제)할 수 있도록 허용합니다. 이 기능을 사용하려면 다음과 같이 Mailman을 설치합니다:
yum install mailmanMailman을 시작하기 전에 mailman이라는 첫 번째 메일링 리스트를 생성해야 합니다:
/usr/lib/mailman/bin/newlist mailman[root@server1 tmp]# /usr/lib/mailman/bin/newlist mailman
메일링 리스트를 운영하는 사람의 이메일을 입력하세요: <– 관리자 이메일 주소, 예: [email protected]
초기 mailman 비밀번호: <– mailman 리스트의 관리자 비밀번호
메일링 리스트 생성을 완료하려면, 다음 줄을 추가하여 /etc/aliases (또는 동등한) 파일을 편집해야 하며, newaliases 프로그램을 실행해야 할 수도 있습니다:
mailman 메일링 리스트
mailman: “|/usr/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/usr/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/usr/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/usr/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/usr/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/usr/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/usr/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/usr/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/usr/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/usr/lib/mailman/mail/mailman unsubscribe mailman”
메일맨 소유자에게 알리려면 Enter를 누르세요… <– ENTER
[root@server1 tmp]#
그 후 /etc/aliases를 엽니다…
vi /etc/aliases… 그리고 다음 줄을 추가합니다:
| [...] mailman: "|/usr/lib/mailman/mail/mailman post mailman" mailman-admin: "|/usr/lib/mailman/mail/mailman admin mailman" mailman-bounces: "|/usr/lib/mailman/mail/mailman bounces mailman" mailman-confirm: "|/usr/lib/mailman/mail/mailman confirm mailman" mailman-join: "|/usr/lib/mailman/mail/mailman join mailman" mailman-leave: "|/usr/lib/mailman/mail/mailman leave mailman" mailman-owner: "|/usr/lib/mailman/mail/mailman owner mailman" mailman-request: "|/usr/lib/mailman/mail/mailman request mailman" mailman-subscribe: "|/usr/lib/mailman/mail/mailman subscribe mailman" mailman-unsubscribe: "|/usr/lib/mailman/mail/mailman unsubscribe mailman" |
그 후
newaliases를 실행하고 Postfix를 재시작합니다:
/etc/init.d/postfix restartMailman의 시스템 시작 링크를 생성하고 시작합니다:
chkconfig –levels 235 mailman on
/etc/init.d/mailman start
이제 ISPConfig와 함께 Mailman이 작동하도록 이 심볼릭 링크를 생성해야 합니다:
cd /usr/lib/mailman/cgi-bin/
ln -s ./ mailman
ISPConfig를 통해 생성된 웹사이트에서 Mailman을 사용하려면, Apache보다 약간 더 복잡합니다. nginx는 전역 별칭(즉, 모든 vhosts에 대해 정의할 수 있는 별칭)이 없기 때문입니다. 따라서 Mailman에 접근하고자 하는 각 vhost에 대해 이러한 별칭을 정의해야 합니다.
이를 위해 ISPConfig의 웹사이트 옵션 탭의 nginx 지시어 필드에 다음을 붙여넣습니다:
| location /cgi-bin/mailman { alias /usr/lib/mailman/cgi-bin; fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/lib/mailman$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED /usr/lib/mailman$fastcgi_path_info; fastcgi_intercept_errors on; fastcgi_pass unix:/var/run/fcgiwrap.socket; } location /images/mailman { alias /usr/lib/mailman/icons; } location /pipermail { alias /var/lib/mailman/archives/public; autoindex on; } |
이렇게 하면 vhost에 대해 /cgi-bin/mailman/ 별칭이 정의되어, http://
http://
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.