CentOS 7 Nginx, MySQL, PHP 웹서버 구축

2014.10.26 09:54

gooddew 조회:4821

안녕 하세요.


Linux + NGINX + MYSQL + PHP 환경에서 웹서버 설치 방법을 배워 보겠습니다.


이런 방식을 약자로 해서 인터넷에서는 LEMP 라고도 말을 합니다. 


기존 웹서버로 APACHE 를 많이 사용하고 있습니다. 최근 중,대규모 커뮤니티 들이 NGINX로 전향하는 경우가 있습니다.


네트워크가 정상 설치된 조건에서 강의를 시작 하겠습니다. 네트워크 설정은 이전에 강좌한 AMP 설치나 네트워크 수동설치에서


중복된 부분이기 때문에 이전 강좌를 참고 하시기 바랍니다.




필수 프로그램을 설치합니다.


# yum -y install nano net-tools unzip lynx


아래의 의존 패키지를 설치합니다.


# yum -y install yum -y install libjpeg* libpng* freetype* gd gd-* gcc g++ cpp gcc-c++ pcre-devel openssl openssl-devel zlib*




SELINUX 보안 사용중지 합니다.


# nano /etc/sysconfig/selinux


SELINUX=enforcing 을 SELINUX=disabled 로 변경후 저장한다.


# reboot  // 리부팅을 하세요


# sestatus   // SELINUX 설정상태를 확인하는 명령어입니다.


SELinux status  disabled 이렇게 나오면 됩니다.




웹포트를 열어 주기 위해서 방화벽 설정을 합니다. (기타 추가적인 포트를 열어도 됩니다.)


웹포트를 81번으로 기준으로 해서 구성해보겠습니다.


# firewall-cmd --permanent --zone=public --add-port=81/tcp ( 80번 포트가 막혀서 웹포트를 81번으로 변경함)


# firewall-cmd --permanent --zone=public --add-port=2121/tcp ( 임의 ftp 포트 )


# firewall-cmd --reload   // 수정 했으면 방화벽 재 시작


방화벽 설정 파일은 /etc/firewalld/zones/public.xml 설정 파일을 직접 수정하고 방화벽 재 시작해도 됩니다.




MYSQL 설치를 하겠습니다.


# yum -y install mariadb mariadb-server


MYSQL 가동한후에 설정을 해야 됩니다.


# systemctl start mariadb    // MARIADB 시작


# systemctl enable mariadb  // MARIADB 부팅시 자동 시작



DB 최초 설정


# mysql_secure_installation


Enter current password for root (enter for none) : 이 부분은 현재 루트 비번이 없기 때문에 엔터치시면 됩니다.


Set root password ? [Y/n]  : y를 누르고 root 패스워드를 설정합니다. 두번 비번을 입력하게 됩니다.


New password:   ; root 패스워드 입력
Re-enter new password:   ; root 패스워드 입력


Remove anonymous users? [Y/n] ; 익명 접근을 막을것이냐? 라고 묻습니다. 보안상 y 누르고 엔터치세요.


Disallow root login remotely? [Y/n] ; root 계정으로 원격 접속을 막을 것인가? 보안상 y 누르고 엔터 치세요


Remove test database and access to it? [Y/n] ; test 용으로 사용된 데이타 베이스를 삭제할것이냐? y 엔터 치시면 됩니다.


Reload privilege tables now? [Y/n] ; 지금까지 설정한 값을 적용할것이냐? y 엔터 치시면 됩니다.



DB 생성 및 사용자 추가 


# mysql -uroot -p 접속합니다.


MariaDB> create database home;  홈페이지에서 사용할 home 라는 새로운 데이타베이스 생성
 
MariaDB> create user gooddew@localhost identified by "1234"; gooddew 라는 사용자와 1234라는 비번으로 새로운 사용자 생성
 
MariaDB> grant all on home.* to gooddew@localhost; 필요한 권한 설정
 
MariaDB> flush privileges; 권한 설정 적용


MariaDB> show databases;


위에서 만든 데이타 베이스 hoem 출력되면 정상 생성된 겁니다.


MariaDB> \q  // 종료하세요



NGINX 설치하겠습니다.


/etc/yum.repo.d/ 안에 nginx.repo 파일을 추가를 합니다.


# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm



저 같은 경우는 lynx로 해서 직접 다운을 받았습니다.  lynx 해서 다운 받는 방법입니다.


lynx nginx.org 접속하면 방향키로 이동해서 download 라는 항목으로 들어가세요


하단쯤에 Linux packages for stables version 이라는 부분이 이어요. 방향키로 stables version 들가세요


상단에 CentosOS 7 항목을 클릭하면 하단에 D 누르면 다운로드 된다고 나옵니다.


방향키로 Save to disk 가서 엔터 누르면 하단에 nginx-release-centos-7-0.el7.ngx.noarch.rpm 파일명이 나옵니다.


이때 다시 엔터 누르시면 내 pc로 저장이 됩니다. q 두번 눌러서 나오시면 됩니다.


다운 받았으면 # rpm -Uvh nginx-release-centos-7-0.el7.ngx.noarch.rpm 실행을 해주세요



제가 lynx 로 직접 찾아가서 다운 받는 이유는


위에서 rpm 으로 다운을 받을때 절대 경로가 틀려지면 받을수가 없습니다. 이런경우 초보자들이 강의가 중간에서


끊기게 되서 진행을 못하게 됩니다. 운영체제 버전에 따라서 다운 경로가 달라질수가 있지만


이렇게 lynx 로 해서 본인이 경로를 확인하면서 찾아 간다면 버전이 틀리거나 나중에 경로나 바꿔어도 


그 파일명과 버전을 알고 있다면 원하시면 파일을 정확하게 다운을 받을수 있습니다.




그러면 다운받은 파일이 repo 에 적용이 됬나 확인해 보겠습니다.


# ls /etc/yum.repos.d


nginx.repo 파일이 생성되있다는 것을 알수가 있습니다.


위에서 rpm 명령어로 업데이트를 작업한것은 nginx.repo 파일을 생성하는 작업일 뿐입니다.



이렇게 다운 받지 않고 간단하게 직접 에디터로 파일을 만들어서 해도 됩니다.


/etc/yum.repos.d/ 이 경로에 nginx.repo 파일을 생성하면 됩니다.


내용은 아래 내용으로 넣으시면 됩니다.


 [nginx]
     name=nginx repo
     baseurl=http://nginx.org/packages/centos/7/$basearch/
     gpgcheck=0
     enabled=1


이렇게 해서 다운받지 않고 에디터로 생성하셔도 됩니다.


이렇게 해서 nginx 설치 준비 하나가 끝났습니다..




우선은 php 설치합니다.


# yum- y install php-fpm php-mysql


nginx 에서는 php 는 php-fpm 으로 설치하시면 됩니다. php와 mysql 연동하기 위해서 php-mysql 설치해 줍니다.



nano /etc/php.ini -c


파일 열으세요. 763 라인쯤에 보시면


cgi.fix_pathinfo=1 아라는 옵션이 있어요. 기본값은 1로 되있는데 0으로 변경하고 제일 앞에 ; 삭제하세요


보안상 cgi 관련 경로나 노출되지 않도록 하기 위함입니다.


Ctrl + X 저장하고 나오세요




nano /etc/php-fpm.d/www.conf -c


파일을 열으세요


12 줄 정도에


listen = 127.0.0.1:9000 이 부분이 있습니다. 이것은 php 서버를 분리할때 사용하는것입니다.


대규모 커뮤니티 서버 같은 경우에는 트래픽 분산을 위해서 한사이트가 여러개의 기능을 다수의 서버로 이루어지는 경우가 있습니다.


여기서 php 만 처리하는 서버만 분리가 가능합니다. 그 설정을 넣는곳이 ip와 포트를 넣는 부분입니다.


하지만 대규모 트래픽이 발생하지 경우는 서버에서는 분리할 필요 없습니다. 그래서 동일한 서버의 폴더를 설정 하시면 됩니다. 


listen = /var/run/php-fpm/php-fpm.sock 이렇게 수정 하세요. php 처리를 /var/run/php-fpm/php-fpm.sock 여기서 한다는 


의미입니다. 저장하고 나오세요. 서비스 가동은 지금 실행하면 오류가 날수 있기 때문에 nginx 까지 다 설치하고 실행하면 됩니다.


세션 폴더를 생성하고 권한을 설정합니다.


# mkdir /var/lib/php/session 


# chmod 777 /var/lib/php/session



nginx 설치합니다.


# yum- y install nginx



nginx 설정을 하겠습니다.


# nano /etc/nginx/conf.d/default  //  설정 파일을 열으세요


아래는 파란색 부분이 수정된 상태 설정 파일입니다.


----------------------------------------------------------------------------------------------

server {
    listen       80;
    server_name  server_domain_name_or_IP;

    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
   error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}


-----------------------------------------------------------------------------------------



중요한 항목을 알아 보겠습니다.


listen       80;                                    


기본적으로 웹포느는 80번입니다. 근데 포트번호 변경시에는 번호를 수정하면 됩니다.



server_name  123.123.123.123; 


서버 ip 또는 도메인 입력하세요



root   /var/www/html;


웹서버의 루트 경로입니다. 외부에서 접속하면 이 경로의 페이지가 열리게 됩니다. 기본값은 /usr/share/nginx/html 이렇게


되있습니다. 웹서버 경로는 다른 폴더로 변경 할수도 있습니다. 모든 계정의 공통의 경로를 지정하려면  


location / { } 이 안에 root 를 설정 하면 안됩니다. 처음 설치하면 기본적으로는 location / { } 이 안에 root 가 설정 되있지만


이 부분의 root 경로는 # 을 앞에 추가 하고 server_name 밑으로 해서 root 옵션을 추가 입력 하세요.



#       root   /usr/share/nginx/html; 앞에 # 처리

location / { } 안에 있는 root 경로는 # 을 추가하세요




index  index.php index.html index.htm;    

앞쪽에 index.php 추가 하세요




location ~ \.php$ {  

앞에 # 제거하시고


#   root           html;

이줄은 그대로 두고


try_files $uri =404; 이부분을 보안상 추가 합니다. 


fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock; 

# 앞에 제거하고 unix:입력하고 php-fpm 에서 listen 에 입력한 경로와 같게 입력하세요



fastcgi_index  index.php;

# 앞에 제거 하세요


fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 

#앞에 제거 하고 뒤 옵션 /scripts$ 부분을 $document_root$ 로 수정하세요


include        fastcgi_params;

# 제거


}

#제거 하세요


이렇게 해서 설정이 끝났습니다.


nginx 서비스와 php-fpm 서비스를 가동합니다.


# systemctl start nginx  // nginx 시작합니다.

# systemctl enable nginx  // 부팅후에도 자동으로 실행하게 합니다.



php-fpm 서비스를 가동합니다.


# systemctl start php-fpm  // php-fpm 서비스 시작 

# systemctl enable php-fpm  // 부팅해도 php-fpm 가 자동 시작되게 합니다.



번호 제목 글쓴이 조회
[공지] 연재 강좌를 진행합니다. gooddew -
105 CentOS 7| SSH 서버 구축 gooddew 1052
104 CentOS 7| telnet 서버 구축 gooddew 708
103 CentOS 7| Let's Encrypt SSL 설치 gooddew 964
102 CentOS 7| SAMBA 서버 구축 및 윈도우 네트워크 설치 [1] gooddew 4311
101 CentOS 7| proftpd 서버 구축 gooddew 519
100 CentOS 7| VSFTPD 서버 구축 gooddew 3566
99 CentOS 7| Apache 최신버전 설치하기 gooddew 3130
» CentOS 7| Nginx, MySQL, PHP 웹서버 구축 gooddew 4821
97 CentOS 7| DNS 서버 설치 gooddew 7509
96 CentOS 7| APM 설치하기 [1] gooddew 7964
95 CentOS 7| 리눅스 설치후 초기 설정해야 할 것들 gooddew 5122
94 CentOS 7| CentOS 기본 강좌 gooddew 4885
93 CentOS 7| CentOS-7.0 Minimal 설치 [1] gooddew 4445
92 네트웍 활용| 케이블 모뎀 설치 gooddew 2609
91 네트웍 활용| Netstat 명령어를 이용한 라우팅 테이블 확인 gooddew 3177
90 네트웍 활용| Tracert 명령어를 이용한 장애확인 gooddew 2462
89 네트웍 활용| Ping 명령어를 이용한 장애확인 gooddew 4768
88 네트웍 활용| Lanbird Router 설정 gooddew 1166
87 네트웍 활용| Teltrend Router 설정 gooddew 1079
86 네트웍 활용| 3COM Router 설정 gooddew 1715