1. 외부 YUM 리포지토리 추가 및 업데이트
기본 리포지토리에는 Nginx가 포함되어 있지 않으므로, 추가 리포지토리를 설치합니다.
[root@localhost ~]# yum install -y wget
[root@localhost ~]# wget http://www.atomicorp.com/installers/atomic
[root@localhost ~]# sh ./atomic
[root@localhost ~]# yum check-update
2. 개발 도구 및 라이브러리 설치
컴파일 및 실행에 필요한 패키지를 일괄 설치합니다.
[root@localhost ~]# yum -y install ntp make openssl openssl-devel pcre pcre-devel \
libpng libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel \
gd gd-devel zlib zlib-devel gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel \
libmcrypt libmcrypt-devel libxml2 libxml2-devel imake autoconf automake screen \
sysstat compat-libstdc++-33 curl curl-devel
3. 기존 웹 서버 및 데이터베이스 제거
기존의 Apache, MySQL, PHP를 제거하여 충돌을 방지합니다.
[root@localhost ~]# yum remove -y httpd
[root@localhost ~]# yum remove -y mysql
[root@localhost ~]# yum remove -y php
4. Nginx 설치 및 시작
Nginx를 설치하고 시스템 부팅 시 자동 시작하도록 설정합니다.
[root@localhost ~]# yum install -y nginx
[root@localhost ~]# service nginx start
[root@localhost ~]# chkconfig --levels 235 nginx on
5. MySQL 설치 및 보안 설정
MySQL 서버와 클라이언트 도구를 설치하고 초기화합니다.
[root@localhost ~]# yum install -y mysql mysql-server mysql-devel
[root@localhost ~]# service mysqld start
[root@localhost ~]# chkconfig --levels 235 mysqld on
# MySQL 보안 설정
[root@localhost ~]# mysql_secure_installation
설치 프로세스에서 다음과 같은 항목을 선택합니다:
- Root 암호 설정: Y
- 익명 사용자 삭제: Y
- 원격 로그인 차단: Y
- 테스트 데이터베이스 삭제: Y
- 권한 테이블 재로드: Y
6. PHP 설치 및 FastCGI 지원 구성
PHP 및 관련 확장 모듈을 설치하고, PHP-FPM를 활성화합니다.
[root@localhost ~]# yum install -y php php-cli php-mysql php-gd php-imap \
php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt \
php-mssql php-snmp php-soap php-common php-devel php-fpm
[root@localhost ~]# service php-fpm start
[root@localhost ~]# chkconfig --levels 235 php-fpm on
7. Nginx에서 PHP 처리 설정
Nginx 구성 파일을 수정하여 PHP 스크립트를 처리할 수 있도록 합니다.
[root@localhost ~]# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
[root@localhost ~]# vim /etc/nginx/nginx.conf
다음과 같이 사용자 계정을 변경합니다:
user nginx nginx;
또한, 기본 사이트 설정 파일을 수정합니다:
[root@localhost ~]# cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
다음 내용을 추가합니다:
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html;
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;
}
8. PHP 설정 최적화
PHP 정보 노출을 비활성화하여 보안을 강화합니다.
[root@localhost ~]# cp /etc/php.ini /etc/php.ini.bak
[root@localhost ~]# vim /etc/php.ini
다음 줄을 수정합니다:
expose_php = Off
9. 서비스 재시작
변경 사항을 반영하기 위해 서버를 재시작합니다.
[root@localhost ~]# service nginx restart
[root@localhost ~]# service php-fpm restart
10. 동작 테스트
간단한 PHP 페이지를 생성하여 작동 여부를 확인합니다.
[root@localhost ~]# cd /usr/share/nginx/html/
[root@localhost html]# vim index.php
<?php
phpinfo();
?>
# 파일 소유자 설정
[root@localhost html]# chown -R nginx.nginx /usr/share/nginx/html/
# 방화벽 설정 (80 및 3306 포트 열기)
[root@localhost ~]# vim /etc/sysconfig/iptables
아래 규칙을 추가합니다:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
이 규칙은 기존의 22번 포트 규칙 아래에 위치해야 하며, 방화벽 재시작 후 적용됩니다:
[root@localhost ~]# /etc/init.d/iptables restart
웹 브라우저에서 서버의 IP 주소를 입력하면 PHP 정보 페이지가 표시됩니다.
참고 정보
- Nginx 기본 문서 루트:
/usr/share/nginx/html/ - 권한 설정:
chown -R nginx.nginx /usr/share/nginx/html/ - MySQL 데이터 디렉터리:
/var/lib/mysql - 권한 설정:
chown -R mysql.mysql /var/lib/mysql