LAMP (часть 2). Настройка nginx-php-mysql под Ubuntu 12.04

lamp-nВ предыдущей статье шла речь о настройке связки apache2 mysql php под управлением операционной системы Ubuntu 12.04. Данная статья посвящается тем, кто предпочитает использовать в роли веб-сервера nginx.

1. Установка и настройка mysql

Первым делом установим mysql. Можно использовать одну из этих инструкций для установки Percona mysql БД или брать mysql из стандартных репозиторий – решать вам. Установим самым быстрым способом.

root@nginx:~# apt-get install mysql-server

Не забудьте пароль рута, который попросят вас ввести. После установки, можно запустить скрипт для удаления дефолтных юзеров, БД и т.п.

root@nginx:~# mysql_secure_installation

Подготовка mysql на этом завершена.

2. Установка и настройка nginx

Переходим к установке веб-сервера nginx. Добавляем репозитории.

root@nginx:~# cat /etc/apt/sources.list.d/nginx.list
…
deb http://nginx.org/packages/ubuntu/ precise nginx
deb-src http://nginx.org/packages/ubuntu/ precise nginx
…

Теперь добавим ключик, обновим список пакетов и установим nginx.

root@nginx:~# wget  http://nginx.org/keys/nginx_signing.key
root@nginx:~# apt-key add nginx_signing.key
root@nginx:~# apt-get update
root@nginx:~# apt-get install nginx

По умолчанию nginx не создает папку sites-available и sites-enabled, если очень хочется, то можете создать и прописать include. Мы же пойдем простым путем и переименуем дефолтный конфиг на нужный нам.

root@nginx:~# cd /etc/nginx/conf.d
root@nginx:/etc/nginx/conf.d# mv default.conf testsite.com.conf

Далее редактируем конфигурационный файл.

root@nginx:/etc/nginx/conf.d# cat testsite.com.conf
server {
    # Дефолтный порт
    listen 80;
    # Порт для SSL
    listen 443 ssl;
    # Путь к сертификату и ключу
    ssl_certificate     /etc/nginx/ssl/testsite.com.crt;
    ssl_certificate_key /etc/nginx/ssl/testsite.com.key;
    # Имя виртуального хоста
    server_name  testsite.com;
    # Путь к исходникам сайта
    root   /var/www/testsite.com;
    # Индексная страница
    index  index.php index.html index.htm;
    # Логи запросов ("main" формат описан в nginx.conf)
    access_log  /var/log/nginx/testsite.com.access.log main;
    # Логи ошибок
    error_log /var/log/nginx/testsite.com.error.log error;
    # Логотип сайта
    location = /favicon.ico {
        alias /var/www/testsite.com/images/favicon.ico;
    }
    # Директива для главной страницы сайта(404 в случаи неверной ссылки)
    location / {
        try_files $uri $uri/ =404;
    }
    # Директива для рисунков
    location ~ \.(gif|jpg|png)$ {
        root /var/www/testsite.com/images/;
    }
    # Своя страница ошибки 404
    error_page 404 /404.html;
    location /404.html {
        root   /usr/share/nginx/html;
    }
    # Своя страница ошибок 50*
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    # Перенаправляем обработку PHP скриптов на FastCGI сервер (по сокету)
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Как вы уже увидели, у нас есть поддержка SSL и php.

2.1 SSL

Сгенерировать SSL ключ и сертификат вам поможет следующая статья. В нашем случаи был сгенерирован ключ и сертификат с пункта 3.3.2.1.

root@nginx:~# openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -subj "/C=UA/ST=Ukraine/L=Kiev/O=Some Company Ttd/OU=IT/CN=*.testsite.com/emailAddress=support@testsite.com " -keyout testsite.com.key -out testsite.com.crt

Далее ключ и сертификат нужно переместить в нашу папку.

root@nginx:~# mv testsite.com.key testsite.com.crt /etc/nginx/ssl/

2.2 PHP

Для поддержки PHP мы будем использовать FastCGI сервер, доступ к которому будет осуществляться через Unix сокет. Для начала установим нужные пакеты.

root@nginx:~# apt-get install php5-fpm php-mysql

Первый пакет для php FastCGI, второй для работы с mysql через php.
Далее нужно исправить одну уязвимость связанную с pathinfo, о которой более детально описано здесь.

root@nginx:~# vim /etc/php5/fpm/php.ini
…
cgi.fix_pathinfo=0
…

Настроим доступ к php-fpm серверу через сокет.

root@nginx:~# vim /etc/php5/fpm/pool.d/www.conf
…
user = nginx
group = nginx
…
listen = /var/run/php5-fpm.sock
…
listen.owner = nginx
listen.group = nginx
…

Теперь рестартуем php-fpm.

root@nginx:~# /etc/init.d/php5-fpm restart

Последним делом, рестартуем nginx.

root@nginx:~# /etc/init.d/nginx restart

2.3 Страницы сайта

Теперь осталось добавить странички самого сайта. Создадим дерево папок.

root@nginx:~# mkdir -p /var/www/testsite.com/images

Далее закидываем логотип сайта и индексную php страничку.

root@nginx:~# mv site_icon.ico /var/www/testsite.com/images/favicon.ico
root@nginx:~# cat /var/www/testsite.com/index.php
<!--?php phpinfo(); ?-->

Также добавим страничку для проверки коннекта к mysql БД и поменяем овнера для всех добавленных файлов.

root@nginx:~# cat /var/www/testsite.com/mysql.php
<html>
    <head>
        <title>Connecting MySQL Server</title>
    </head>
<body>Connected successfully</body>
</html>
root@nginx:~# chown -R nginx:nginx /var/www/testsite.com

И на последок добавим 404.html, так как 50x.html есть по дефолту.

root@nginx:~# cat /usr/share/nginx/html/404.html
BAD link!!!

3. Тестируем LAMP

Для начала проверим индексную страничку сайта, т.е. сам сайт.

root@nginx:~# curl -s -D - -k https://testsite.com -o /dev/null
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Tue, 08 Sep 2015 18:53:49 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.3.10-1ubuntu3.19

root@nginx:~# curl -s -D - http://testsite.com -o /dev/null
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Tue, 08 Sep 2015 18:54:06 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.3.10-1ubuntu3.19

Как видим, сайт работает как по HTTP так и по HTTPS.
Теперь проверим конект к mysql.

root@nginx:~# curl http://testsite.com/mysql.php

Connecting MySQL Server
Connected successfully

Теперь запросим левую страничку.

root@nginx:~# curl http://testsite.com/notexisting_page.php
BAD PAGE!

Как видим, весь функционал работает.

Автор: admin, 9 сентября 2015
Рубрики: Linux
Метки: , ,

Написать комментарий

Последние статьи

Яндекс.Метрика
?>