웹사이트 검색

Ubuntu 16.04에서 Apache와 함께 PHP-FPM 사용


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 우분투 16.04(Xenial Xerus)
  • 우분투 11.10(Oneiric Ocelot)

이 페이지에서

  1. 1 서문
  2. 2 MySQL 또는 MariaDB 설치
    1. 2.1 MySQL 5.7 설치
    2. 2.2 MariaDB 설치

    이 튜토리얼은 PHP 7(PHP-FPM을 통해) 및 MySQL을 지원하는 Ubuntu 16.04 서버에 Apache 웹 서버를 설치하는 방법을 보여줍니다. PHP-FPM(FastCGI Process Manager)은 모든 규모의 사이트, 특히 사용량이 많은 사이트에 유용한 몇 가지 추가 기능이 있는 대체 PHP FastCGI 구현입니다.

    1 서문

    이 자습서에서는 호스트 이름 server1.example.com을 IP 주소 192.168.1.100과 함께 사용합니다. 이러한 설정은 사용자에 따라 다를 수 있으므로 적절하게 교체해야 합니다.

    루트 권한으로 이 튜토리얼의 모든 단계를 실행하고 있으므로 루트로 로그인했는지 확인하십시오.

    sudo su

    2 MySQL 또는 MariaDB 설치

    Ubuntu는 MySQL 및 MariaDB 패키지를 제공합니다. MariaDB는 원래 MySQL 개발자인 Monty Widenius가 제공하는 MySQL 포크입니다. 2.1장 또는 2.2장을 따라 데이터베이스 서버를 설치하십시오.

    2.1 MySQL 5.7 설치

    먼저 다음과 같이 MySQL 5.7을 설치합니다.

    apt-get -y install mysql-server mysql-client

    MySQL 루트 사용자의 비밀번호를 입력하라는 메시지가 표시됩니다. 이 비밀번호는 [이메일 보호] 사용자에게 유효하므로 나중에 수동으로 MySQL 루트 비밀번호를 지정할 필요가 없습니다.

    MySQL "root" 사용자의 새 비밀번호: <-- yourrootsqlpassword
    MySQL "root" 사용자의 비밀번호 반복: <-- yourrootsqlpassword

    mysql_secure_installation을 실행하여 MySQL 데이터베이스를 보호하고 테스트 데이터베이스에 대한 액세스를 비활성화하십시오.

    mysql_secure_installation

    다음과 같은 질문을 받게 됩니다.

    Enter current password for root (enter for none): <-- press enter
    Set root password? [Y/n] <-- y
    New password: <-- Enter the new MariaDB root password here
    Re-enter new password: <-- Repeat the password
    Remove anonymous users? [Y/n] <-- y
    Disallow root login remotely? [Y/n] <-- y
    Reload privilege tables now? [Y/n] <-- y

    2.2 MariaDB 설치

    다음 명령을 실행하여 MariaDB 서버 및 클라이언트를 설치합니다.

    apt-get -y install mariadb-server mariadb-client

    이제 MariaDB의 루트 비밀번호를 설정합니다.

    mysql_secure_installation

    다음과 같은 질문을 받게 됩니다.

    Enter current password for root (enter for none): <-- press enter
    Set root password? [Y/n] <-- y
    New password: <-- Enter the new MariaDB root password here
    Re-enter new password: <-- Repeat the password
    Remove anonymous users? [Y/n] <-- y
    Disallow root login remotely? [Y/n] <-- y
    Reload privilege tables now? [Y/n] <-- y

    3 아파치 설치

    Apache 2.4는 Ubuntu 패키지로 제공됩니다. 다음과 같이 설치할 수 있는 apache2 패키지가 필요합니다.

    apt-get -y install apache2

    이제 브라우저에서 http://192.168.1.100으로 이동하면 Apache 자리 표시자 페이지가 표시됩니다(작동합니다!).

    Apache의 기본 문서 루트는 Ubuntu의 /var/www/html이고 구성 파일은 /etc/apache2/apache2.conf입니다. 추가 구성은 /etc/apache2/mods-enabled(Apache 모듈의 경우), /etc/apache2/sites-enabled(가상 호스트의 경우) 및 /etc/apache2/conf와 같은 /etc/apache2 디렉토리의 하위 디렉토리에 저장됩니다. .디.

    4 PHP 7 설치

    다음과 같이 설치하는 PHP-FPM 및 Apaches mod_fastcgi 모듈을 통해 Apache2에서 PHP 7이 작동하도록 할 수 있습니다.

    apt-get -y install libapache2-mod-fastcgi php7.0-fpm php7.0

    PHP-FPM은 소켓 /var/run/php/php7.0-fpm.sock에서 FastCGI 서버를 실행하는 데몬 프로세스(systemd 단위 php7.0-fpm.service 포함)입니다.

    다음으로 다음 Apache 모듈을 활성화합니다...

    a2enmod actions fastcgi alias

    ... Apache를 다시 시작합니다.

    systemctl restart apache2.service

    5 아파치 설정

    Apache가 PHP-FPM과 함께 작동하도록 하려면 다음 구성이 필요합니다.

            <IfModule mod_fastcgi.c>
                    AddHandler php7-fcgi .php
                    Action php7-fcgi /php7-fcgi
                    Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
                    FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
            </IfModule>

    전역 Apache 구성(모든 가상 호스트에 대해 활성화됨)에 넣을 수 있습니다. 또는 PHP-FPM을 사용해야 하는 각 가상 호스트에 배치할 수 있습니다. 기본 가상 호스트와 함께 PHP-FPM을 사용하고 싶기 때문에 가상 호스트 구성 파일인 /etc/apache2/sites-available/000-default.conf를 엽니다.

    nano /etc/apache2/sites-available/000-default.conf

    ... 사이에 다음 섹션을 입력합니다.

            <Directory /usr/lib/cgi-bin>
    Require all granted
    </Directory>
    <IfModule mod_fastcgi.c> SetHandler php7-fcgi .php Action php7-fcgi /php7-fcgi virtual Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization </IfModule>

    나중에 Apache를 다시 시작하십시오.

    systemctl restart apache2.service

    이제 문서 루트 /var/www에 다음 PHP 파일을 만듭니다.

    nano /var/www/html/info.php
    <?php
    phpinfo();

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

    보시다시피 PHP 7이 작동 중이며 서버 API 라인에 표시된 것처럼 FPM/FastCGI를 통해 작동합니다. 더 아래로 스크롤하면 PHP에서 이미 활성화된 모든 모듈이 표시됩니다. MySQL은 거기에 나열되어 있지 않습니다. 즉, 아직 PHP에서 MySQL을 지원하지 않는다는 의미입니다.

    참고: PHP 7 아파치 모듈이 설치되어 있는 경우(mod_php), 이는 예를 들어 발생할 수 있습니다. 내가 이 튜토리얼에서 했던 것처럼 빈 서버가 아니라 ISP의 LAMP 서버 설정으로 시작하면 아래와 같이 mod_php를 비활성화해야 할 수도 있습니다.

    a2dismod php7.0

    아파치를 다시 시작하십시오.

    systemctl restart apache2.service

    6 PHP 7에서 MySQL/MariaDB 지원 받기

    PHP에서 MySQL 지원을 받으려면 php7.0-mysql 패키지를 설치할 수 있습니다. 다른 PHP 모듈을 설치하는 것이 좋으며 애플리케이션에 필요할 수도 있습니다. 다음과 같이 사용 가능한 PHP 모듈을 검색할 수 있습니다.

    apt-cache search php7.0

    필요한 것을 선택하고 다음과 같이 설치하십시오.

    apt-get install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php7.0-imap php7.0-mcrypt php7.0-ps php7.0-pspell php7.0-recode php7.0-snmp php7.0-sqlite php7.0-tidy php7.0-xmlrpc php7.0-xsl

    이제 PHP-FPM을 다시 로드합니다.

    systemctl reload php7.0-fpm.service

    이제 브라우저에서 http://192.168.1.100/info.php를 다시 로드하고 모듈 섹션으로 다시 스크롤하십시오. 이제 MySQLi 모듈을 포함하여 많은 새 모듈을 찾을 수 있습니다.

    7 phpMyAdmin

    phpMyAdmin은 MySQL 데이터베이스를 관리할 수 있는 웹 인터페이스입니다. 설치하는 것이 좋습니다.

    apt-get -y install phpmyadmin

    다음과 같은 질문이 표시됩니다.

    Web server to reconfigure automatically:<-- apache2 
    Configure database for phpmyadmin with dbconfig-common? <-- Yes
    MySQL application password for phpmyadmin: <-- Press enter

    그런 다음 http://192.168.1.100/phpmyadmin/에서 phpMyAdmin에 액세스할 수 있습니다.

    8 PHP-FPM이 TCP 연결을 사용하도록 만들기(선택 사항)

    참고: 이 장에서는 TCP를 통한 PHP-FPM 구성을 보여줍니다. 이를 구성 예시로 보여드리겠습니다. 예를 들어 이것이 필요한 설정이 있을 수 있습니다. fastcgi 프로세스가 두 번째 서버에서 실행되지만 일반적으로 소켓을 사용하는 것이 더 빠릅니다. 따라서 이 장을 건너뛰고 싶을 수도 있습니다.

    기본적으로 PHP-FPM은 /var/run/php/php7.0-fpm.sock 소켓에서 수신 대기합니다. PHP-FPM이 TCP 연결을 사용하도록 만드는 것도 가능합니다. 이렇게 하려면 /etc/php5/fpm/pool.d/www.conf...를 엽니다.

    nano /etc/php/7.0/fpm/pool.d/www.conf

    ... 다음과 같이 청취 라인을 만듭니다.

    [...]
    ;listen = /var/run/php/php7.0-fpm.sock
    listen = 127.0.0.1:9000
    [...]

    이렇게 하면 PHP-FPM이 IP 127.0.0.1(localhost)의 포트 9000에서 수신 대기하게 됩니다. 시스템에서 사용하지 않는 포트를 사용하고 있는지 확인하십시오.

    그런 다음 PHP-FPM을 다시 로드합니다.

    systemctl reload php7.0-fpm.service

    다음으로 Apache 구성과 모든 가상 호스트를 살펴보고 FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization 행을 FastCgiExternalServer로 변경합니다. /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.1:9000 -pass-header 승인, 예: 이와 같이:

    nano /etc/apache2/sites-available/000-default.conf
    [...]
     <Directory /usr/lib/cgi-bin>
    Require all granted
    </Directory>

    <IfModule mod_fastcgi.c>
    AddHandler php7-fcgi .php
    Action php7-fcgi /php7-fcgi virtual
    Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.1:9000 -pass-header Authorization
    </IfModule> [...]

    마지막으로 Apache를 다시 로드합니다.

    systemctl reload apache2.service

    9 링크

    • 아파치: http://httpd.apache.org/
    • PHP: http://www.php.net/
    • PHP-FPM: http://php-fpm.org/
    • MySQL: http://www.mysql.com/
    • 우분투: http://www.ubuntu.com/
    • phpMyAdmin: http://www.phpmyadmin.net/