웹사이트 검색

Debian 8에서 PHP(PHP-FPM) 및 MariaDB(LEMP)로 Nginx 설치


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

  • 데비안 7(Wheezy)

이 페이지에서

  1. 서문
  2. 시스템 업데이트
  3. MariaDB 설치(MySQL 드롭인 교체)
  4. Nginx 설치
  5. PHP 설치
  6. nginx 구성
  7. PHP에서 MySQL/MariaDB 지원 받기
  8. PHP-FPM에서 TCP 연결 사용(선택 사항)\n
  9. 가상 머신 이미지
    1. SSH 로그인
    2. MariaDB 로그인

    이 튜토리얼에서는 Debian 8에 Nginx 웹 서버를 설치하는 방법을 보여줍니다. PHP-FPM) MySQL 드롭인 대체품으로 MariaDB를 설치합니다. 이 설정은 종종 LEMP=Linux + nginx(\engine x\로 발음) + MySQL + PHP) .

    서문

    이 자습서에서는 호스트 이름 server1.example.com을 IP 주소 192.168.1.100과 함께 사용합니다. 이러한 설정은 사용자에 따라 다를 수 있으므로 적절하게 교체해야 합니다. Debian 8 서버가 있어야 합니다. 이 튜토리얼에서는 Debian 최소 서버를 기본 시스템으로 사용하겠습니다.

    시스템 업데이트

    Nginx 설정을 시작하기 전에 패키지 목록을 업데이트하고 보류 중인 업데이트를 설치하는 것이 좋습니다. 보류 중인 업데이트를 설치하려면 다음 명령을 실행하십시오.

    apt-get update
    apt-get upgrade -y

    나중에 nano 편집기를 사용하여 구성 파일을 편집하겠습니다. Nano는 다음 명령으로 설치할 수 있습니다.

    apt-get -y install nano 

    MariaDB 설치(MySQL 드롭인 교체)

    MariaDB를 설치하기 위해 다음을 실행합니다.

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

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

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

    Nginx 설치

    Nginx는 다음과 같이 설치할 수 있는 Debian Jessie용 패키지로 제공됩니다.

    apt-get -y install nginx

    나중에 Nginx를 시작합니다.

    systemctl start nginx.service

    웹 서버 IP 주소 또는 호스트 이름을 브라우저에 입력하면(예: http://192.168.1.100) 다음 페이지가 표시됩니다.

    Debian 8의 기본 nginx 문서 루트는 /var/www/html입니다.

    PHP 설치

    다음과 같이 설치하는 PHP-FPM(PHP-FPM(FastCGI Process Manager)은 모든 규모의 사이트, 특히 더 바쁜 사이트에 유용한 몇 가지 추가 기능이 있는 대체 PHP FastCGI 구현입니다)을 통해 nginx에서 PHP5를 작동시킬 수 있습니다.

    apt-get -y install php5-fpm

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

    nginx 구성

    nginx 구성은 지금 여는 /etc/nginx/nginx.conf에 있습니다.

    nano /etc/nginx/nginx.conf

    구성은 이해하기 쉽습니다(자세한 내용은 여기에서 확인할 수 있습니다: http://wiki.nginx.org/NginxFullExample2).

    먼저 keepalive_timeout을 2초와 같은 합리적인 값으로 설정합니다.

    [...]
        keepalive_timeout   2;
    [...]

    가상 호스트는 서버 {} 컨테이너에 정의됩니다. 기본 가상 호스트는 /etc/nginx/sites-available/default 파일에 정의되어 있습니다. 다음과 같이 수정할 수 있습니다.

    nano /etc/nginx/sites-available/default
    [...]
    server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html index.php;

    server_name _;

    location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # # With php5-cgi alone:
    # fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
    deny all;
    }
    } [...]

    서버 이름 _; 이것을 기본 포괄 가상 호스트로 만듭니다(물론 여기에 www.example.com과 같은 호스트 이름을 지정할 수도 있습니다).

    인덱스 라인에 index.php를 추가했습니다. 루트 /var/www/html; 문서 루트가 /var/www/html 디렉토리임을 의미합니다.

    PHP에서 중요한 부분은 위치 ~ \\.php${} 스탠자입니다. 활성화하려면 위와 같이 주석을 해제하십시오.

    이제 파일을 저장하고 Nginx를 다시 로드합니다.

    systemctl reload nginx.service

    다음 열기 /etc/php5/fpm/php.ini...

    nano /etc/php5/fpm/php.ini

    ... 그리고 cgi.fix_pathinfo=0을 설정합니다:

    [...]
    ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
    ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
    ; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
    ; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
    ; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
    ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
    ; http://php.net/cgi.fix-pathinfo
    cgi.fix_pathinfo=0
    [...]

    PHP-FPM 다시 로드:

    systemctl reload php5-fpm.service

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

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

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

    보시다시피 PHP5는 작동 중이며 서버 API 라인에 표시된 것처럼 FPM/FastCGI를 통해 작동합니다. 더 아래로 스크롤하면 PHP5에서 이미 활성화된 모든 모듈이 표시됩니다. MySQL은 목록에 없습니다. 이는 아직 PHP에서 MariaDB/MySQL 지원이 없음을 의미합니다.

    PHP에서 MySQL/MariaDB 지원 받기

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

    apt-cache search php5

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

    apt-get -y install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-intl php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

    APCu는 PHP opcache를 확장하는 PHP 중간 코드를 캐싱하고 최적화하기 위한 무료 개방형 PHP opcode 캐셔입니다. APC 캐시를 대체합니다. eAccelerator 및 Xcache와 같은 다른 PHP opcode 캐셔와 유사합니다. PHP 페이지 속도를 높이려면 이 중 하나를 설치하는 것이 좋습니다.

    APCu는 다음과 같이 설치할 수 있습니다.

    apt-get install php5-apcu

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

    systemctl reload php5-fpm.service

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

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

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

    nano /etc/php5/fpm/pool.d/www.conf

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

    [...]
    ;listen = /var/run/php5-fpm.sock
    listen = 127.0.0.1:9000
    [...]

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

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

    systemctl reload php5-fpm.service

    다음으로 Nginx 구성과 모든 가상 호스트를 살펴보고 fastcgi_pass unix:/var/run/php5-fpm.sock 행을 변경합니다. to fastcgi_pass 127.0.0.1:9000;, 예. 이와 같이:

    nano /etc/nginx/sites-available/default
    [...]
    location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # # With php5-cgi alone:
    # fastcgi_pass 127.0.0.1:9000;
    # # With php5-fpm:
    # fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_pass 127.0.0.1:9000;
    } [...]

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

    systemctl reload nginx.service

    가상 머신 이미지

    이 튜토리얼은 Howtoforge 구독자를 위해 OVA/OVF 형식의 가상 머신을 사용할 준비가 된 상태로 제공됩니다. VM 형식은 VMWare 및 Virtualbox와 호환되며 아마도 이 형식을 가져올 수 있는 다른 도구일 것입니다. 상단 오른쪽 메뉴에서 다운로드 링크를 찾을 수 있습니다. 파일 이름을 클릭하면 다운로드가 시작됩니다.

    VM의 로그인 세부 정보는 다음과 같습니다.

    SSH 로그인

    사용자 이름: root
    비밀번호: howtoforge

    마리아DB 로그인

    사용자 이름: root
    비밀번호: howtoforge

    최초 부팅 후 암호를 변경하십시오.

    VM은 정적 IP 192.168.1.100에 대해 구성되며 IP는 /etc/network/interfaces 파일에서 변경할 수 있습니다.

    연결

    • nginx: http://nginx.net/
    • nginx 위키: http://wiki.codemongers.com/Main
    • PHP: http://www.php.net/
    • PHP-FPM: http://php-fpm.org/
    • MariaDB: https://mariadb.org/
    • 데비안: http://www.debian.org/