В предыдущей статье шла речь о настройке связки 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!
Как видим, весь функционал работает.