EC2로 php 환경 구축 ① Nginx + php56 + php56-fpm + virtualhost

개요



서버 구축 경험이 별로 없기 때문에 이번에 해본 흐름을 정리해 보았다.

목차


  • nginx 설치
  • php 및 php-fpm 설치
  • 가상 환경 구축

  • # EC2 IP Adress (임시)
    52.111.111.111
    

    nginx 설치



    EC2에 로그인


    [hoge@local ~]$ ssh -i "XXX.pem" [email protected]
    

    1. nginx 정보 확인


    [ec2-user@ip-172-31-4-XXX ~]$ yum info nginx
    

    2. nginx 설치


    [ec2-user@ip-172-31-4-XXX ~]$ sudo yum install nginx -y
    

    3. 설치 확인


    [ec2-user@ip-172-31-4-XXX ~]$ which nginx
    /usr/sbin/nginx
    

    4. nginx 가동


    [ec2-user@ip-172-31-4-XXX ~]$ sudo service nginx start
    Starting nginx:                                            [  OK  ]
    
    [ec2-user@ip-172-31-4-XXX ~]$ ps -ef | grep nginx
    root      1563     1  0 09:06 ?        00:00:00 nginx: master process nginx
    nginx     1564  1563  0 09:06 ?        00:00:00 nginx: worker process
    ec2-user   1566  1385  0 09:06 pts/0    00:00:00 grep nginx
    

    5. 브라우저에 대한 액세스 확인



    브라우저에서 htp://52.111.111.111 로 이동합니다.
    아래와 같은 화면이 표시되면 OK.


    6. 서비스 자동 가동으로 설정


    [ec2-user@ip-172-31-4-XXX ~]$ sudo chkconfig nginx on
    

    7. nginx 로그 디렉토리에 대한 액세스 확인


    [ec2-user@ip-172-31-4-XXX ~]$ tail -f /var/log/nginx/access.log
    tail: `/var/log/nginx/access.log' を 読み込み用に開くことが出来ません: 許可がありません
    [ec2-user@ip-172-31-4-XXX ~]$ ls -ald /var/log/nginx
    drwx------ 2 nginx nginx 4096  9月 20 08:26 /var/log/nginx
    

    8. 로그 디렉토리에 대한 액세스 권한 변경


    [ec2-user@ip-172-31-4-XXX ~]$ sudo chmod 755 /var/log/nginx/
    [ec2-user@ip-172-31-4-XXX ~]$ ls -ald /var/log/nginx
    drwxr-xr-x 2 nginx nginx 4096  9月 20 08:26 /var/log/nginx
    [ec2-user@ip-172-31-4-XXX ~]$ tail -f /var/log/nginx/access.log
    XXX.XXX.XX.XXX - - [20/Sep/2015:08:29:09 +0000] ...
    XXX.XXX.XX.XXX - - [20/Sep/2015:08:30:01 +0000] ...
    

    php-fpm 설치



    1. php5.6 및 php-fpm 설치


    [ec2-user@ip-172-31-4-XXX ~]$ sudo yum install php56 php56-fpm -y
    

    2. 확인용 PHP 파일 작성



    /usr/share/nginx/html/phpinfo.php
    <?php
        phpinfo();
    

    3. php-fpm 설정 변경



    사용자와 그룹을 apache에서 nginx로 변경

    /etc/php-fpm-5.6.d/www.conf
    - user = apache
    + user = nginx
    
    - group = apache
    + group = nginx
    

    4. nginx 설정 변경



    /etc/nginx/nginx.conf
      http {
    -   index index.html index.htm;
    +   index index.php index.html index.htm;
          server {
           root /usr/share/nginx/html;
    
    -       #location ~ \.php$ {
    -       #    root           html;
    -       #    fastcgi_pass   127.0.0.1:9000;
    -       #    fastcgi_index  index.php;
    -       #    fastcgi_param  SCRIPT_FILENAME/scripts$fastcgi_script_name;
    -       #    include        fastcgi_params;
    -       #}
    +       location ~ \.php$ {
    +       root           html;
    +       fastcgi_pass   127.0.0.1:9000;
    +       fastcgi_index  index.php;
    +       fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    +       include        fastcgi_params;
    +     }
    

    5. php-fpm 가동 및 자동 가동 설정


    [ec2-user@ip-172-31-4-XXX ~]$ sudo service php-fpm start
    [ec2-user@ip-172-31-4-XXX ~]$ sudo chkconfig php-fpm on
    

    6. nginx 재부팅


    [ec2-user@ip-172-31-4-XXX ~]$ sudo service nginx restart
    

    7. 설정 변경 확인


    [ec2-user@ip-172-31-4-XXX ~]$ curl -s http://localhost/phpinfo.php |grep "PHP Version"
    <tr><td class="e">PHP Version </td><td class="v">5.6.8 </td></tr>
    

    8. nginx와 php-fpm의 연결을 소켓으로 만듭니다.



    php-fpm 설정 변경



    /etc/php-fpm-5.6.d/www.conf
    -   listen = 127.0.0.1:9000
    +   listen =  /var/run/php-fpm/php-fpm.sock
    
    -   ;listen.owner = nobody
    -   ;listen.group = nobody
    +   listen.owner = nginx  
    +   listen.group = nginx
    

    nginx 설정 변경



    /etc/nginx/nginx.conf
    -   fastcgi_pass   127.0.0.1:9000;
    +   fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    

    서비스 재시작


    [ec2-user@ip-172-31-4-XXX ~]$ sudo service php-fpm restart
    [ec2-user@ip-172-31-4-XXX ~]$ sudo service nginx restart 
    

    php 실행에 문제가 있는지 확인


    [ec2-user@ip-172-31-4-XXX ~]$ curl -s http://localhost/phpinfo.php |grep "PHP Version"
    

    가상 환경 생성 (feature1-develop.com)



    1. php-fpm 설정



    /etc/php-fpm-5.6.d/php-fpm-feature1-develop.conf
    [feature1-develop]
    user = nginx
    group = nginx
    listen = /var/run/php-fpm/php-fpm-feature1-develop.sock
    listen.owner = nginx
    listen.group = nginx
    php_admin_value[disable_functions] = exec,passthru,shell_exec,system
    php_admin_flag[allow_url_fopen] = off
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chdir = /
    

    2. nginx의 virtual.conf 설정



    /etc/nginx/conf.d/virtual.conf
    server {
        listen        80;
        server_name   feature1-develop.com;
        access_log    /var/log/nginx/feature1-develop.access.log main;
        error_log    /var/log/nginx/feature1-develop.error.log;
        root /var/www/feature1;
        index index.php;
        location ~ \.php$ {
            root           /var/www/feature1;
            fastcgi_pass   unix:/var/run/php-fpm/php-fpm-feature1-develop.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
    

    3. 문서 루트 디렉토리 작성


    [ec2-user@ip-172-31-4-XXX ~]$ sudo mkdir -p /var/www/feature1
    

    4. index.php 파일 만들기



    /var/www/feature1/index.php
    <?php
        phpinfo();
    

    5. php-fpm 및 nginx 재부팅


    [ec2-user@ip-172-31-4-XXX ~]$ sudo service php-fpm restart
    [ec2-user@ip-172-31-4-XXX ~]$ sudo service nginx restart
    

    6. sock 파일 추가 확인


    [ec2-user@ip-172-31-4-XXX ~]$ ls -al /var/run/php-fpm/php-fpm-feature1-develop.sock
    srw-rw---- 1 nginx nginx 0  9月 20 08:54 /var/run/php-fpm/php-fpm-feature1-develop.sock
    

    7. 자신의 PC에 가상 호스트에 대한 액세스 설정


    [hoge@local ~]$ sudo -- sh -c "echo 52.111.111.111 feature1-develop.com >> /etc/hosts"
    

    8. 액세스 확인



    쉘에서 확인


    # アクセス確認
    [hoge@local ~]$ curl -s http://feature1-develop.com/phpinfo.php | grep "PHP Version"
    <tr><td class="e">PHP Version </td><td class="v">5.6.12 </td></tr>
    
    # 「DOCUMENT_ROOT」確認
    [hoge@local ~]$ curl -s http://feature1-develop.com/phpinfo.php | grep "DOCUMENT_ROOT"
    <tr><td class="e">_SERVER["DOCUMENT_ROOT"]</td><td class="v">/var/www/feature1</td></tr>
    

    브라우저에서 확인



    ht tp // // 훗아트레 1-로 ゔぇぉp. 이 m/ph 핑후. php
    'DOCUMENT_ROOT'이 '/var/www/feature1'인지 확인


    다음에 한 일



    EC2로 php 환경 구축 ② git 서버 구축 + altax 도입 + 배포 명령 작성

    좋은 웹페이지 즐겨찾기