CentOS 6.8에서 LNMP 환경 구성 방법

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

태그: nginx PHP-FPM MySQL CentOS 6.8 web server

7월 6일 17:59에 게시됨