서버 설정 · 8 min read · Sep 13, 2025

완벽한 서버 - OpenSUSE 12.3 x86_64 (nginx, Dovecot, ISPConfig 3) - 페이지 4

10 Nginx, PHP5 (PHP-FPM) 및 Fcgiwrap 설치하기

Nginx는 OpenSUSE용 패키지로 제공되며, 다음과 같이 설치할 수 있습니다:

zypper install nginx

시스템에 Apache2가 이미 설치되어 있다면, 지금 중지하세요…

systemctl stop apache2.service

… 그리고 Apache의 시스템 시작 링크를 제거합니다:

systemctl disable apache2.service

그런 다음 nginx의 시스템 시작 링크를 생성하고 시작합니다:

systemctl enable nginx.service  
systemctl start nginx.service

(만약 Apache2와 nginx가 모두 설치되어 있다면, ISPConfig 3 설치 프로그램이 어떤 것을 사용할 것인지 물어볼 것입니다 - 이 경우 nginx라고 대답하세요. 이 둘 중 하나만 설치되어 있다면, ISPConfig가 필요한 구성을 자동으로 수행합니다.)

nginx vhosts에서 IPv6 주소를 사용하려면, ISPConfig에서 IPv6 vhosts를 생성하기 전에 다음을 수행하세요:

/etc/sysctl.conf를 엽니다…

vi /etc/sysctl.conf

… 그리고 net.ipv6.bindv6only = 1을 추가합니다:

| [...] net.ipv6.bindv6only = 1 |

변경 사항이 적용되도록 다음을 실행합니다.

sysctl -p

nginx에서 PHP5를 작동시키기 위해 PHP-FPM을 통해 설정할 수 있습니다 (PHP-FPM (FastCGI Process Manager)은 추가 기능이 있는 대체 PHP FastCGI 구현으로, 특히 바쁜 사이트에 유용합니다) 다음과 같이 설치합니다:

zypper install php5-fpm

PHP-FPM을 시작하기 전에 /etc/php5/fpm/php-fpm.conf.default의 이름을 /etc/php5/fpm/php-fpm.conf로 변경합니다:

mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

PHP의 세션 디렉토리의 권한을 변경합니다:

chmod 1733 /var/lib/php5

그런 다음 /etc/php5/fpm/php-fpm.conf를 엽니다…

vi /etc/php5/fpm/php-fpm.conf

… 그리고 error_log를 /var/log/php-fpm.log로 변경합니다:

| [...] error_log = /var/log/php-fpm.log [...] |

OpenSUSE 12.3에서는 PHP-FPM에 대한 php.ini 파일이 없으므로, CLI php.ini를 복사합니다:

cp /etc/php5/cli/php.ini /etc/php5/fpm/

다음으로 /etc/php5/fpm/php.ini를 엽니다…

vi /etc/php5/fpm/php.ini

… 그리고 cgi.fix_pathinfo를 0으로 설정합니다:

| [...] ; 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://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

그런 다음 php-fpm의 시스템 시작 링크를 생성하고 재시작합니다:

systemctl enable php-fpm.service  
systemctl restart php-fpm.service

PHP-FPM은 포트 9000에서 FastCGI 서버를 실행하는 데몬 프로세스입니다. 다음의 출력에서 확인할 수 있습니다.

netstat -tapn
server1:~ # netstat -tapn  
 Active Internet connections (servers and established)  
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
 tcp        0      0 127.0.0.1:3310          0.0.0.0:*               LISTEN      10357/clamd  
 tcp        0      0 0.0.0.0:143              0.0.0.0:*               LISTEN      9869/dovecot  
 tcp        0      0 0.0.0.0:80               0.0.0.0:*               LISTEN      10521/nginx  
 tcp        0      0 0.0.0.0:22               0.0.0.0:*               LISTEN      1275/sshd  
 tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      9816/master  
 tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      10695/php-fpm.conf)  
 tcp        0      0 127.0.0.1:10024         0.0.0.0:*               LISTEN      10337/amavisd (mast  
 tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      9694/mysqld  
 tcp        0      0 192.168.0.100:22        192.168.0.199:4630      ESTABLISHED 1332/0  
 tcp        0      0 :::22                     :::*                    LISTEN      1275/sshd  
 tcp        0      0 ::1:25                   :::*                    LISTEN      9816/master  
 server1:~ #

PHP에서 MySQL 지원을 받으려면 php5-mysql 패키지를 설치할 수 있습니다. 애플리케이션에 필요할 수 있는 다른 PHP5 모듈도 설치하는 것이 좋습니다:

zypper install php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshm

이제 PHP-FPM을 재시작합니다:

systemctl restart php-fpm.service

nginx에서 CGI 지원을 받기 위해 Fcgiwrap을 설치합니다.

Fcgiwrap은 복잡한 CGI 스크립트에도 작동해야 하는 CGI 래퍼로, 각 vhost가 자신의 cgi-bin 디렉토리를 사용할 수 있게 해주기 때문에 공유 호스팅 환경에서 사용할 수 있습니다.

OpenSUSE에는 fcgiwrap 패키지가 없으므로, 직접 빌드해야 합니다. 먼저 몇 가지 필수 패키지를 설치합니다:

zypper install git patch automake glibc-devel gcc flex compat-readline4 db-devel wget gcc-c++ make vim libtool FastCGI-devel

다음 심볼릭 링크를 생성합니다:

ln -s /usr/include/fastcgi/fastcgi.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_config.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_stdio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgiapp.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgimisc.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgios.h /usr/local/include/

이제 다음과 같이 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 패키지를 설치합니다:

zypper install spawn-fcgi

이제 다음과 같이 fcgiwrap을 시작할 수 있습니다:

spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap

이제 /var/run/fcgiwrap.socket에서 fcgiwrap 소켓을 찾을 수 있으며, 이는 wwwrun 사용자와 www 그룹에 의해 소유됩니다. 이제 nginx 사용자를 www 그룹에 추가해야 합니다:

usermod -a -G www nginx

그 후 nginx를 다시 로드합니다:

systemctl reload nginx.service

시스템 부팅 시마다 fcgiwrap을 수동으로 시작하고 싶지 않다면, /etc/init.d/boot.local을 엽니다…

vi /etc/init.d/boot.local

… 그리고 파일 끝에 spawn-fcgi 명령을 추가합니다 - 이렇게 하면 부팅 과정의 마지막에 fcgiwrap이 자동으로 시작됩니다:

| [...] /usr/bin/spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap |

이제 끝났습니다! nginx vhost를 생성할 때 ISPConfig가 올바른 vhost 구성을 처리합니다.

10.1 phpMyAdmin 설치하기

다음으로 phpMyAdmin을 설치합니다:

zypper install phpMyAdmin

이것은 Apache를 종속성으로 설치하므로, Apache의 시스템 시작 링크를 제거합니다:

systemctl disable apache2.service

phpMyAdmin은 이제 /srv/www/htdocs/phpMyAdmin 디렉토리에 위치하지만, 우리는 /usr/share/phpmyadmin/ 디렉토리에 두고 싶으므로 심볼릭 링크를 생성합니다:

ln -s /srv/www/htdocs/phpMyAdmin /usr/share/phpmyadmin

ISPConfig 3를 설치한 후, 다음과 같이 phpMyAdmin에 접근할 수 있습니다:

nginx의 포트 8081에서 ISPConfig 앱 vhost는 phpMyAdmin 구성을 포함하고 있으므로, http://server1.example.com:8081/phpmyadmin 또는 http://server1.example.com:8081/phpMyAdmin을 사용하여 phpMyAdmin에 접근할 수 있습니다.

웹사이트에서 사용할 수 있는 /phpmyadmin 또는 /phpMyAdmin 별칭을 사용하려면, Apache보다 약간 더 복잡합니다. nginx는 전역 별칭(즉, 모든 vhost에 대해 정의할 수 있는 별칭)을 지원하지 않기 때문입니다. 따라서 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 $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; 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 $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; 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를 다시 로드하는 것을 잊지 마세요:

systemctl reload nginx.service

그런 다음 nginx 지시문 필드로 다시 가서 fastcgi_param HTTPS on; 대신 fastcgi_param HTTPS $fastcgi_https;라는 줄을 추가하여 http와 https 요청 모두에 대해 phpMyAdmin을 사용할 수 있게 합니다:

| 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 $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; 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; } |

11 PureFTPd 설치하기

pure-ftpd FTP 데몬을 설치합니다. 실행:

zypper install pure-ftpd
systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

이제 PureFTPd를 구성하여 FTP 및 TLS 세션을 허용합니다. FTP는 모든 비밀번호와 모든 데이터가 평문으로 전송되기 때문에 매우 안전하지 않은 프로토콜입니다. TLS를 사용하면 전체 통신을 암호화할 수 있어 FTP를 훨씬 더 안전하게 만듭니다.

OpenSSL은 TLS에 필요합니다. OpenSSL을 설치하려면 다음을 실행합니다:

zypper install openssl

/etc/pure-ftpd/pure-ftpd.conf를 엽니다…

vi /etc/pure-ftpd/pure-ftpd.conf

FTP TLS 세션을 허용하려면 TLS를 1로 설정합니다:

| [...] # 이 옵션은 세 가지 값을 허용합니다: # 0 : SSL/TLS 암호화 레이어 비활성화 (기본값). # 1 : 전통적인 세션과 암호화된 세션 모두 허용. # 2 : SSL/TLS 보안 메커니즘을 사용하지 않는 연결을 거부, # 익명 세션 포함. # 이 옵션을 맹목적으로 주석 해제하지 마세요. 다음을 확인하세요: # 1) 서버가 SSL/TLS 지원으로 컴파일되었는지 (--with-tls), # 2) 유효한 인증서가 있는지, # 3) 호환 가능한 클라이언트만 로그인할 수 있는지. TLS 1 [...] |

TLS 세션만 허용하려면 (FTP 없음), TLS를 2로 설정합니다:

| [...] # 이 옵션은 세 가지 값을 허용합니다: # 0 : SSL/TLS 암호화 레이어 비활성화 (기본값). # 1 : 전통적인 세션과 암호화된 세션 모두 허용. # 2 : SSL/TLS 보안 메커니즘을 사용하지 않는 연결을 거부, # 익명 세션 포함. # 이 옵션을 맹목적으로 주석 해제하지 마세요. 다음을 확인하세요: # 1) 서버가 SSL/TLS 지원으로 컴파일되었는지 (--with-tls), # 2) 유효한 인증서가 있는지, # 3) 호환 가능한 클라이언트만 로그인할 수 있는지. TLS 2 [...] |

TLS를 전혀 허용하지 않으려면 (오직 FTP만), TLS를 0으로 설정합니다:

| [...] # 이 옵션은 세 가지 값을 허용합니다: # 0 : SSL/TLS 암호화 레이어 비활성화 (기본값). # 1 : 전통적인 세션과 암호화된 세션 모두 허용. # 2 : SSL/TLS 보안 메커니즘을 사용하지 않는 연결을 거부, # 익명 세션 포함. # 이 옵션을 맹목적으로 주석 해제하지 마세요. 다음을 확인하세요: # 1) 서버가 SSL/TLS 지원으로 컴파일되었는지 (--with-tls), # 2) 유효한 인증서가 있는지, # 3) 호환 가능한 클라이언트만 로그인할 수 있는지. TLS 0 [...] |

TLS를 사용하기 위해 SSL 인증서를 생성해야 합니다. 나는 /etc/ssl/private/에 생성하므로, 먼저 해당 디렉토리를 생성합니다:

mkdir -p /etc/ssl/private/

그 후, 다음과 같이 SSL 인증서를 생성할 수 있습니다:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

국가 이름 (2자리 코드) [AU]: <– 귀하의 국가 이름을 입력하세요 (예: “DE”).
주 또는 지방 이름 (전체 이름) [Some-State]: <– 귀하의 주 또는 지방 이름을 입력하세요.
지역 이름 (예: 도시) []: <– 귀하의 도시를 입력하세요.
조직 이름 (예: 회사) [Internet Widgits Pty Ltd]: <– 귀하의 조직 이름을 입력하세요 (예: 귀하의 회사 이름).
조직 단위 이름 (예: 섹션) []: <– 귀하의 조직 단위 이름을 입력하세요 (예: “IT 부서”).
공통 이름 (예: 귀하의 이름) []: <– 시스템의 완전한 도메인 이름을 입력하세요 (예: “server1.example.com”).
이메일 주소 []: <– 귀하의 이메일 주소를 입력하세요.

SSL 인증서의 권한을 변경합니다:

chmod 600 /etc/ssl/private/pure-ftpd.pem

마지막으로 PureFTPd를 재시작합니다:

systemctl restart pure-ftpd.service

이제 끝났습니다. FTP 클라이언트를 사용하여 연결을 시도할 수 있습니다. 그러나 FTP 클라이언트를 TLS를 사용하도록 구성해야 합니다 - 다음 장에서 FileZilla로 이를 수행하는 방법을 확인하세요.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.