서버 설치 · 5 min read · Jan 25, 2026

페도라 15에서 PHP5(및 PHP-FPM) 및 MySQL 지원으로 Nginx 설치하기

페도라 15에서 PHP5(및 PHP-FPM) 및 MySQL 지원으로 Nginx 설치하기

버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요

Nginx(발음: “엔진 엑스”)는 무료, 오픈 소스, 고성능 HTTP 서버입니다. Nginx는 안정성, 풍부한 기능 세트, 간단한 구성 및 낮은 자원 소비로 유명합니다. 이 튜토리얼에서는 PHP5 지원( PHP-FPM을 통해) 및 MySQL 지원으로 페도라 15 서버에 Nginx를 설치하는 방법을 보여줍니다.

이것이 당신에게 작동할 것이라는 보장은 하지 않습니다!

1 사전 참고

이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.0.100을 사용합니다. 이러한 설정은 귀하의 경우 다를 수 있으므로 적절한 곳에서 교체해야 합니다.

2 MySQL 5 설치하기

먼저 다음과 같이 MySQL 5를 설치합니다:

yum install mysql mysql-server

그런 다음 MySQL의 시스템 시작 링크를 생성하고(MySQL이 시스템 부팅 시 자동으로 시작되도록) MySQL 서버를 시작합니다:

chkconfig --levels 235 mysqld on  
/etc/init.d/mysqld start

이제 네트워킹이 활성화되었는지 확인합니다. 다음을 실행하세요:

netstat -tap | grep mysql

다음과 같은 결과가 표시되어야 합니다:

[root@server1 ~]# netstat -tap | grep mysql  
tcp        0      0 *:mysql                     *:*                         LISTEN      1517/mysqld  
[root@server1 ~]#

만약 그렇지 않다면 /etc/my.cnf를 편집하고 skip-networking 옵션을 주석 처리합니다:

vi /etc/my.cnf

| [...] #skip-networking [...] |

그리고 MySQL 서버를 재시작합니다:

/etc/init.d/mysqld restart

다음 명령을 실행하여

mysql_secure_installation

root 사용자에 대한 비밀번호를 설정합니다(그렇지 않으면 누구나 MySQL 데이터베이스에 접근할 수 있습니다!):

[root@server1 ~]# mysql_secure_installation

NOTE: 이 스크립트의 모든 부분을 실행하는 것이 모든 MySQL
생산 환경에서 권장됩니다! 각 단계를 주의 깊게 읽어주세요!

MySQL에 로그인하여 보안을 설정하려면 현재
root 사용자에 대한 비밀번호가 필요합니다. MySQL을 방금 설치했으며
root 비밀번호를 아직 설정하지 않았다면 비밀번호는 비어 있으므로
여기에서 그냥 Enter를 누르세요.

현재 root 비밀번호 입력(없으면 Enter): <– ENTER
OK, 비밀번호가 성공적으로 사용되었습니다. 계속 진행합니다…

root 비밀번호를 설정하면 아무도 적절한
인증 없이 MySQL root 사용자로 로그인할 수 없게 됩니다.

root 비밀번호를 설정하시겠습니까? [Y/n] <– ENTER
새 비밀번호: <– yourrootsqlpassword
새 비밀번호를 다시 입력하세요: <– yourrootsqlpassword
비밀번호가 성공적으로 업데이트되었습니다!
권한 테이블을 다시 로드하는 중..
… 성공!

기본적으로 MySQL 설치에는 익명 사용자가 있어
누구나 사용자 계정을 생성하지 않고도 MySQL에 로그인할 수 있습니다.
이는 테스트 용도로만 사용되며 설치를 조금 더 원활하게 하기 위한 것입니다.
생산 환경으로 이동하기 전에 이를 제거해야 합니다.

익명 사용자를 제거하시겠습니까? [Y/n] <– ENTER
… 성공!

일반적으로 root는 ‘localhost’에서만 연결할 수 있어야 합니다.
이는 누군가가 네트워크에서 root 비밀번호를 추측할 수 없도록 보장합니다.

원격으로 root 로그인을 금지하시겠습니까? [Y/n] <– ENTER
… 성공!

기본적으로 MySQL에는 누구나 접근할 수 있는 ‘test’라는 데이터베이스가 있습니다.
이는 테스트 용도로만 사용되며 생산 환경으로 이동하기 전에 제거해야 합니다.

테스트 데이터베이스 및 접근 권한을 제거하시겠습니까? [Y/n] <– ENTER

  • 테스트 데이터베이스 삭제 중…
    … 성공!
  • 테스트 데이터베이스에 대한 권한 제거 중…
    … 성공!

권한 테이블을 다시 로드하면 지금까지 수행된 모든 변경 사항이
즉시 적용됩니다.

지금 권한 테이블을 다시 로드하시겠습니까? [Y/n] <– ENTER
… 성공!

정리 중…

모든 작업이 완료되었습니다! 위의 모든 단계를 완료했다면
MySQL 설치가 이제 안전해야 합니다.

MySQL을 사용해 주셔서 감사합니다!

[root@server1 ~]#

3 Nginx 설치하기

Nginx는 페도라 15의 패키지로 제공되며 다음과 같이 설치할 수 있습니다:

yum install nginx

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

chkconfig --levels 235 nginx on  
/etc/init.d/nginx start

웹 서버의 IP 주소 또는 호스트 이름을 브라우저에 입력하세요(예: http://192.168.0.100), 그러면 nginx 환영 페이지가 표시됩니다:

4 PHP5 설치하기

PHP5를 nginx에서 PHP-FPM을 통해 작동하게 할 수 있습니다(PHP-FPM(FastCGI Process Manager)은 추가 기능이 있는 대체 PHP FastCGI 구현으로, 모든 규모의 사이트, 특히 바쁜 사이트에 유용합니다). 공식 페도라 15 저장소에 php-fpm 패키지가 있으므로 php-fpm과 php-cli 및 MySQL을 PHP 스크립트에서 사용하려면 필요한 php-mysql과 같은 몇 가지 PHP5 모듈을 함께 설치할 수 있습니다:

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를 열고 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를 읽어보세요.)

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

chkconfig --levels 235 php-fpm on  
/etc/init.d/php-fpm start

PHP-FPM은 포트 9000에서 FastCGI 서버를 실행하는 데몬 프로세스입니다(초기 스크립트는 /etc/init.d/php-fpm입니다).

5 Nginx 구성하기

Nginx 구성은 /etc/nginx/nginx.conf에 있으며 지금 열어보겠습니다:

vi /etc/nginx/nginx.conf

구성은 이해하기 쉽습니다(여기에서 더 많은 내용을 배울 수 있습니다: http://wiki.codemongers.com/NginxFullExamplehttp://wiki.codemongers.com/NginxFullExample2)

먼저(선택 사항) 작업자 프로세스 수를 늘리고 keepalive_timeout을 합리적인 값으로 설정할 수 있습니다:

| [...] worker_processes 5; [...] keepalive_timeout 2; [...] |

가상 호스트는 server {} 컨테이너에서 정의됩니다. 기본 vhost는 /etc/nginx/conf.d/default.conf 파일에 정의되어 있습니다. 이를 다음과 같이 수정해 보겠습니다:

vi /etc/nginx/conf.d/default.conf

| [...] server { listen 80; server_name _; #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } # 서버 오류 페이지를 정적 페이지 /50x.html로 리디렉션 # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # 127.0.0.1:80에서 수신 대기하는 Apache로 PHP 스크립트를 프록시 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # 127.0.0.1:9000에서 수신 대기하는 FastCGI 서버로 PHP 스크립스를 전달 # location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; include fastcgi_params; } # Apache의 문서 루트와 nginx의 문서 루트가 일치하는 경우 .htaccess 파일에 대한 접근 거부 # location ~ /\.ht { deny all; } } [...] |

servername ;는 이를 기본 catchall vhost로 만듭니다(물론 www.example.com과 같은 호스트 이름을 지정할 수도 있습니다).

location / 부분에서 index.php를 인덱스 라인에 추가했습니다. root /usr/share/nginx/html;는 문서 루트가 /usr/share/nginx/html 디렉토리임을 의미합니다.

PHP에 중요한 부분은 location ~ .php$ {} 구문입니다. 이를 활성화하려면 주석을 제거하세요. root 라인을 웹 사이트의 문서 루트로 변경하세요(예: root /usr/share/nginx/html;). fastcgi_param 라인을 fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;로 변경해야 합니다. 그렇지 않으면 PHP 인터프리터가 브라우저에서 호출하는 PHP 스크립트를 찾지 못합니다.

이제 파일을 저장하고 nginx를 재시작합니다:

/etc/init.d/nginx restart

이제 문서 루트 /usr/share/nginx/html에 다음 PHP 파일을 생성합니다…

vi /usr/share/nginx/html/info.php

| |

이제 브라우저에서 해당 파일을 호출합니다(예: http://192.168.0.100/info.php):

보시다시피 PHP5가 작동하고 있으며, FPM/FastCGI를 통해 작동하고 있습니다. 서버 API 라인에서 확인할 수 있습니다. 아래로 스크롤하면 MySQL 모듈을 포함하여 PHP5에서 이미 활성화된 모든 모듈을 볼 수 있습니다:

6 링크

저자 소개

Falko Timme는 Timme Hosting(초고속 nginx 웹 호스팅)의 소유자입니다. 그는 HowtoForge의 수석 유지 관리자(2005년부터)이며 ISPConfig의 핵심 개발자 중 한 명(2000년부터)입니다. 그는 또한 O’Reilly의 “Linux System Administration” 책에 기여했습니다.

Share: X/Twitter LinkedIn

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

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