웹사이트 검색

Ubuntu 16.04에서 Linux, Nginx, MySQL, PHP(LEMP 스택)를 설치하는 방법


소개

LEMP 소프트웨어 스택은 동적 웹 페이지 및 웹 애플리케이션을 제공하는 데 사용할 수 있는 소프트웨어 그룹입니다. 이것은 Nginx 웹 서버가 있는 Linux 운영 체제를 설명하는 약어입니다. 백엔드 데이터는 MySQL 데이터베이스에 저장되고 동적 처리는 PHP에 의해 처리됩니다.

이 가이드에서는 Ubuntu 16.04 서버에 LEMP 스택을 설치하는 방법을 보여줍니다. Ubuntu 운영 체제는 첫 번째 요구 사항을 처리합니다. 나머지 구성 요소를 시작하고 실행하는 방법을 설명합니다.

전제 조건

이 자습서를 완료하기 전에 서버에 sudo 권한이 있는 루트가 아닌 일반 사용자 계정이 있어야 합니다. Ubuntu 16.04 초기 서버 설정을 완료하여 이러한 유형의 계정을 설정하는 방법을 배울 수 있습니다.

사용자를 사용할 수 있게 되면 해당 사용자 이름으로 서버에 로그인합니다. 이제 이 가이드에 설명된 단계를 시작할 준비가 되었습니다.

1단계: Nginx 웹 서버 설치

사이트 방문자에게 웹 페이지를 표시하기 위해 현대적이고 효율적인 웹 서버인 Nginx를 사용할 것입니다.

이 절차에 사용할 모든 소프트웨어는 Ubuntu의 기본 패키지 저장소에서 직접 가져옵니다. 즉, apt 패키지 관리 제품군을 사용하여 설치를 완료할 수 있습니다.

이 세션에 대해 apt를 처음 사용하므로 로컬 패키지 인덱스를 업데이트하는 것으로 시작해야 합니다. 그런 다음 서버를 설치할 수 있습니다.

  1. sudo apt-get update
  2. sudo apt-get install nginx

Ubuntu 16.04에서 Nginx는 설치 시 실행을 시작하도록 구성됩니다.

ufw 방화벽이 실행 중인 경우 초기 설정 가이드에 설명된 대로 Nginx에 대한 연결을 허용해야 합니다. Nginx는 설치 시 ufw에 등록하므로 절차가 다소 간단합니다.

원하는 트래픽을 계속 허용하는 가장 제한적인 프로필을 활성화하는 것이 좋습니다. 아직 서버에 SSL을 구성하지 않았기 때문에 이 가이드에서는 포트 80의 트래픽만 허용하면 됩니다.

다음을 입력하여 활성화할 수 있습니다.

  1. sudo ufw allow 'Nginx HTTP'

다음을 입력하여 변경 사항을 확인할 수 있습니다.

  1. sudo ufw status

표시된 출력에 허용된 HTTP 트래픽이 표시되어야 합니다.

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

새로운 방화벽 규칙이 추가되면 웹 브라우저에서 서버의 도메인 이름 또는 공용 IP 주소에 액세스하여 서버가 가동되고 실행되는지 테스트할 수 있습니다.

서버를 가리키는 도메인 이름이 없고 서버의 공용 IP 주소를 모르는 경우 터미널에 다음 중 하나를 입력하여 찾을 수 있습니다.

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

이렇게 하면 몇 개의 IP 주소가 출력됩니다. 웹 브라우저에서 각각을 차례로 시도할 수 있습니다.

또는 인터넷의 다른 위치에서 볼 때 어떤 IP 주소에 액세스할 수 있는지 확인할 수 있습니다.

  1. curl -4 icanhazip.com

웹 브라우저에서 받은 주소 중 하나를 입력하십시오. Nginx의 기본 랜딩 페이지로 이동해야 합니다.

http://server_domain_or_IP

위와 같은 페이지가 보이면 Nginx가 성공적으로 설치된 것입니다.

2단계: MySQL을 설치하여 사이트 데이터 관리

이제 웹 서버가 있으므로 사이트의 데이터를 저장하고 관리하기 위해 데이터베이스 관리 시스템인 MySQL을 설치해야 합니다.

다음을 입력하여 쉽게 설치할 수 있습니다.

  1. sudo apt-get install mysql-server

MySQL 시스템 내에서 사용할 루트(관리자) 암호를 입력하라는 메시지가 표시됩니다.

이제 MySQL 데이터베이스 소프트웨어가 설치되었지만 해당 구성이 아직 정확히 완료되지 않았습니다.

설치를 보호하기 위해 일부 안전하지 않은 기본값을 수정할 것인지 묻는 간단한 보안 스크립트를 실행할 수 있습니다. 다음을 입력하여 스크립트를 시작합니다.

  1. mysql_secure_installation

MySQL 루트 계정에 대해 설정한 비밀번호를 입력하라는 메시지가 표시됩니다. 다음으로 VALIDATE PASSWORD PLUGIN을 구성할 것인지 묻는 메시지가 표시됩니다.

경고: 이 기능을 활성화하는 것은 판단을 내리는 것입니다. 활성화되면 지정된 기준과 일치하지 않는 암호는 오류와 함께 MySQL에서 거부됩니다. phpMyAdmin용 Ubuntu 패키지와 같이 MySQL 사용자 자격 증명을 자동으로 구성하는 소프트웨어와 함께 취약한 암호를 사용하면 문제가 발생합니다. 유효성 검사를 비활성화한 상태로 두는 것이 안전하지만 데이터베이스 자격 증명에 대해 항상 강력하고 고유한 암호를 사용해야 합니다.

예를 나타내는 y 또는 활성화하지 않고 계속하려면 다른 항목을 대답합니다.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

유효성 검사를 활성화한 경우 암호 유효성 검사 수준을 선택하라는 메시지가 표시됩니다. 가장 강한 단계인 2를 입력하면 숫자, 대소문자, 특수문자가 포함되지 않거나 사전에 자주 사용되는 단어를 기반으로 하는 비밀번호를 설정하려고 하면 오류가 발생하므로 주의하십시오.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

암호 유효성 검사를 활성화한 경우 기존 루트 암호에 대한 암호 강도가 표시되고 해당 암호를 변경할지 묻는 메시지가 표시됩니다. 현재 암호가 마음에 들면 프롬프트에서 "no\를 의미하는 n을 입력하십시오.

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

나머지 질문의 경우 각 프롬프트에서 Y를 누르고 Enter 키를 눌러야 합니다. 이렇게 하면 일부 익명 사용자와 테스트 데이터베이스가 제거되고 원격 루트 로그인이 비활성화되며 이러한 새 규칙이 로드되어 MySQL이 변경 사항을 즉시 적용합니다.

이제 데이터베이스 시스템이 설정되었으며 계속 진행할 수 있습니다.

3단계: 처리를 위해 PHP 설치

이제 페이지를 제공하기 위해 Nginx가 설치되었고 데이터를 저장하고 관리하기 위해 MySQL이 설치되었습니다. 그러나 동적 콘텐츠를 생성할 수 있는 것은 아직 없습니다. 이를 위해 PHP를 사용할 수 있습니다.

Nginx는 다른 웹 서버와 같은 기본 PHP 처리 기능을 포함하지 않으므로 "fastCGI 프로세스 관리자\를 나타내는 php-fpm을 설치해야 합니다. Nginx에게 PHP 요청을 여기에 전달하도록 지시합니다. 처리용 소프트웨어.

이 모듈을 설치할 수 있으며 PHP가 데이터베이스 백엔드와 통신할 수 있도록 하는 추가 도우미 패키지도 가져올 수 있습니다. 설치는 필요한 PHP 코어 파일을 가져옵니다. 다음을 입력하여 수행하십시오.

  1. sudo apt-get install php-fpm php-mysql

PHP 프로세서 구성

이제 PHP 구성 요소가 설치되었지만 보다 안전한 설정을 위해 약간의 구성 변경이 필요합니다.

루트 권한으로 기본 php-fpm 구성 파일을 엽니다.

  1. sudo nano /etc/php/7.0/fpm/php.ini

이 파일에서 우리가 찾고 있는 것은 cgi.fix_pathinfo를 설정하는 매개변수입니다. 이것은 세미콜론(;)으로 주석 처리되고 기본적으로 \1로 설정됩니다.

이것은 요청된 PHP 파일을 찾을 수 없는 경우 찾을 수 있는 가장 가까운 파일을 실행하도록 PHP에 지시하기 때문에 매우 안전하지 않은 설정입니다. 이것은 기본적으로 사용자가 실행할 수 없는 스크립트를 실행할 수 있는 방식으로 PHP 요청을 만들 수 있게 합니다.

다음과 같이 행의 주석을 제거하고 "0\으로 설정하여 이 두 조건을 모두 변경합니다.

cgi.fix_pathinfo=0

완료되면 파일을 저장하고 닫습니다.

이제 다음을 입력하여 PHP 프로세서를 다시 시작하면 됩니다.

  1. sudo systemctl restart php7.0-fpm

이것은 우리가 만든 변경 사항을 구현합니다.

4단계: PHP 프로세서를 사용하도록 Nginx 구성

이제 필요한 모든 구성 요소가 설치되었습니다. 여전히 필요한 유일한 구성 변경은 동적 콘텐츠에 PHP 프로세서를 사용하도록 Nginx에 지시하는 것입니다.

서버 블록 수준에서 이 작업을 수행합니다(서버 블록은 Apache의 가상 호스트와 유사함). 다음을 입력하여 기본 Nginx 서버 블록 구성 파일을 엽니다.

  1. sudo nano /etc/nginx/sites-available/default

현재 주석이 제거된 Nginx 기본 서버 블록 파일은 다음과 같습니다.

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

사이트에 맞게 이 파일을 일부 변경해야 합니다.

  • 먼저 index.php라는 이름의 파일이 제공되도록 index.php 지시문의 첫 번째 값으로 index.php를 추가해야 합니다. , 가능한 경우 디렉토리가 요청될 때.
  • 서버의 도메인 이름이나 공용 IP 주소를 가리키도록 server_name 지시문을 수정할 수 있습니다.
  • 실제 PHP 처리를 위해 각 줄 앞의 파운드 기호(#)를 제거하여 PHP 요청을 처리하는 파일의 세그먼트를 주석 해제하기만 하면 됩니다. 이것은 location ~\\.php$ 위치 블록, 포함된 fastcgi-php.conf 스니펫 및 php-fpm 와 연결된 소켓입니다. .
  • 또한 동일한 방법을 사용하여 .htaccess 파일을 처리하는 위치 블록의 주석을 제거합니다. Nginx는 이러한 파일을 처리하지 않습니다. 이러한 파일 중 하나라도 문서 루트에 들어가는 경우 방문자에게 제공해서는 안 됩니다.

변경해야 하는 사항은 아래 텍스트에서 빨간색으로 표시됩니다.

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name server_domain_or_IP;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

위와 같이 변경했으면 파일을 저장하고 닫을 수 있습니다.

다음을 입력하여 구문 오류에 대한 구성 파일을 테스트하십시오.

  1. sudo nginx -t

오류가 보고되면 계속하기 전에 돌아가서 파일을 다시 확인하십시오.

준비가 되면 Nginx를 다시 로드하여 필요한 변경을 수행합니다.

  1. sudo systemctl reload nginx

5단계: 구성을 테스트할 PHP 파일 만들기

이제 LEMP 스택이 완전히 설정되었습니다. Nginx가 .php 파일을 PHP 프로세서에 올바르게 전달할 수 있는지 확인하기 위해 테스트할 수 있습니다.

문서 루트에 테스트 PHP 파일을 생성하여 이를 수행할 수 있습니다. 텍스트 편집기의 문서 루트 내에서 info.php라는 새 파일을 엽니다.

  1. sudo nano /var/www/html/info.php

다음 줄을 새 파일에 입력하거나 붙여넣습니다. 이것은 서버에 대한 정보를 반환하는 유효한 PHP 코드입니다.

<?php
phpinfo();

완료되면 파일을 저장하고 닫습니다.

이제 웹 브라우저에서 서버의 도메인 이름 또는 공용 IP 주소를 방문하고 /info.php를 입력하여 이 페이지를 방문할 수 있습니다.

http://server_domain_or_IP/info.php

서버에 대한 정보와 함께 PHP에 의해 생성된 웹 페이지가 표시되어야 합니다.

다음과 같은 페이지가 표시되면 Nginx로 PHP 처리를 성공적으로 설정한 것입니다.

Nginx가 페이지를 올바르게 렌더링하는지 확인한 후 생성한 파일을 제거하는 것이 가장 좋습니다. 권한이 없는 사용자가 침입을 시도하는 데 도움이 될 수 있는 구성에 대한 몇 가지 힌트를 실제로 제공할 수 있기 때문입니다. 나중에 필요할 때 이 파일을 언제든지 다시 생성할 수 있습니다.

지금은 다음을 입력하여 파일을 제거합니다.

  1. sudo rm /var/www/html/info.php

결론

이제 Ubuntu 16.04 서버에 LEMP 스택이 구성되어 있어야 합니다. 이는 방문자에게 웹 콘텐츠를 제공하기 위한 매우 유연한 기반을 제공합니다.