Меню Рубрики

Установка php fastcgi ubuntu

NGINX + Apache + MariaDB (MySQL) + PHP + PHP-FPM (fastCGI) + FTP + PHPMyAdmin + Memcached + Postfix на Ubuntu

Данная инструкция позволит настроить веб-сервер для решения большей части задач по размещению сайтов, порталов или веб-приложений. Она подходит для серверов на Ubuntu и других систем на основе deb-пакетов. Для RPM Linux читайте похожую инструкцию по настройке полноценного веб-сервера на CentOS.

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

apt-get update && apt-get upgrade

cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* первая команда для установки пакета синхронизации времени; вторая задает часовой пояс по московскому времени; третья выполняет синхронизацию времени с сервером ru.pool.ntp.org.

Настраиваем cron для автоматической синхронизации времени:

И настраиваем запуск задания ежедневно в 00:00:

0 0 * * * /usr/sbin/ntpdate ru.pool.ntp.org

По умолчанию, в Ubuntu брандмауэр работает в режиме «разрешить все». Но если мы настроили защиту по максимуму, то для веб-сервера открываем следующие порты:

iptables -A INPUT -p tcp —match multiport —dports 20,21,25,80,443,465,587,8080,40900:40999 -j ACCEPT

* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 40900-40999 также необходимы для работы FTP (динамические порты для пассивного режима); 25, 465 и 587 порты нужны для работы почтового сервера по SMTP; Подробнее про настройку iptables.

Установка NGINX

Внесем изменение в файл nginx.conf:

http <
.
server_names_hash_bucket_size 64;
.
>

* в данном примере мы сняли комментарий со строчки server_names_hash_bucket_size 64;
* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.

* в процессе запуска мы можем увидим ошибку — возможно, в системе работает другой веб-сервер и занимает 80 порт. Как правило, это apache. Чтобы его выключить (на данном этапе он нам не нужен) вводим команду systemctl stop apache2.

Проверим работу веб-сервера. Открываем браузер и вводим в адресной строке http:// . В итоге мы должны увидеть заголовок «Welcome to nginx!»:

Если стартовая страница не загружается, проверяем состояние сервиса:

Установка PHP и PHP-FPM

Устанавливаем PHP и PHP-FPM:

apt-get install php php-fpm

Разрешаем автозапуск php-fpm и запускаем его:

systemctl enable php7.2-fpm

* обратите внимание, что мы запустили php-fpm версии 7.2. Но установлена может быть и другая версия — ее можно узнать по версии php командой php -v.

Настройка связки NGINX + PHP

Открываем файл для настройки виртуального домена по умолчанию:

В секции location редактируем параметр index на следующее значение:

location / <
index index.php index.html index.htm;
>

* в данном случае мы сказали серверу сначала искать индексный файл index.php, затем остальные по списку.

А внутри секции server добавим следующее:

\.php$ <
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>

* где /var/www/html — корневой путь хранения скриптов; /run/php/php7.2-fpm.sock — путь до сокетного файла для взаимодействия с php-fpm. Обратите еще раз внимание, что если в нашей системе будет установлена другая версия php, необходимо внести соответствующую корректировку.

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 / <
index index.php index.html index.htm;
>

\.php$ <
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>
>

Проверяем правильность настроек nginx:

Открываем конфигурационный файл PHP-FPM:

Проверяем, что путь до сокетного файла такой же, как мы задали в настройках NGINX:

В противном случае меняем его и перезапускаем сервис:

systemctl restart php7.2-fpm

Теперь заходим в каталог хранения настроенного сайта:

Создаем index.php со следующим содержимым:

Открываем браузере и переходим по адресу http:// . Мы должны увидеть сводную информацию по PHP и его настройкам:

Читайте также:  Установка инжектора от нексии

* в данном примере используется php версии 7.2.

Установка СУБД

В данной статье мы установим MariaDB. Установка выполняется следующей командой:

apt-get install mariadb-server

Разрешаем автозапуск и запускаем СУБД:

Зададим пароль для учетной записи mysql-root:

mysqladmin -u root password

PHP + MariaDB

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

apt-get install php-mysql php-mysqli

После перезагружаем php-fpm:

systemctl restart php7.2-fpm

И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:

* несмотря на то, что мы установили mariadb, в заголовке мы видим mysql. Так и должно быть.

Установка phpMyAdmin

Для установки phpMyAdmin вводим следующую команду:

apt-get install phpmyadmin

* в процессе установки система может потребовать ввод пароля для пользователя phpmyadmin. Его нужно ввести дважды.

Теперь создадим для него отдельный виртуальный домен в NGINX:

И добавим в него следующее содержимое:

server <
listen 80;
server_name phpmyadmin.dmosk.local;
set $root_path /usr/share/phpmyadmin;

\.php$ <
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>
>

* где phpmyadmin.dmosk.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому есть нет возможность зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpmyadmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.

После перезапускаем NGINX:

И открываем в браузере наш домен, в данном примере, http://phpmyadmin.dmosk.local. Откроется форма для авторизации — вводим логин phpmyadmin и пароль, который мы указали при установке phpmyadmin.

Установка Memcached

Для начала, выполняем установку пакетов:

apt-get install memcached php-memcached

После разрешаем автозапуск и запускаем сервис кэширования:

systemctl enable memcached

systemctl start memcached

systemctl restart php7.2-fpm

Для проверки, что модуль memcached появился в PHP, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:

Установка и настройка FTP-сервера

Мы настроим ProFTPd, так как он позволит использовать виртуальных пользователей с uid пользователя www-data.

Для его установки вводим следующую команду:

Смотрим uid пользователя www-data:

* в Ubuntu это, как правило, 33.

Создаем виртуального пользователя:

ftpasswd —passwd —file=/etc/proftpd/ftpd.passwd —name=ftpwww —u >

* где /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи; ftpwww — имя пользователя (логин); uid и gid — идентификаторы пользователя и группы системной учетной записи (www-data); /var/www — домашний каталог пользователя; /usr/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Открываем основной конфигурационный файл:

Снимаем комментарий или редактируем опцию:

* данная опция говорит о том, что корневой директорией для пользователя будет домашняя директория. Это нужно, чтобы FTP-пользователи не могли выйти за пределы дозволенного и видеть на сервере сайты друг друга.

Создаем дополнительный конфигурационный файл для proftpd:

UseIPv6 off
IdentLookups off
PassivePorts 40900 40999

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

* где 40900 — 40999 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и запускаем его:

systemctl restart proftpd

Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.

Apache

Для поддержки файла .htaccess, который используется многими сайтами, необходимо установить и настроить веб-сервер Apache.

Устанавливаем apache и модуль для php:

apt-get install apache2 libapache2-mod-php

Заходим в настройки портов:

* мы настроили прослушивание на порту 8080, так как на 80 уже работает NGINX. Также мы закомментировали прослушивание по 443, так как и он будет слушаться NGINX.

Теперь открываем настройку следующего модуля:

И добавляем впереди индексных файлов index.php:

Читайте также:  Установки в международных отношениях

DirectoryIndex index.php index.html .

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html и так далее.

Открываем основной конфигурационный файл для apache:

Рядом с опциями Directory дописываем:

AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted

* где Directory указывает на путь, для которого мы хотим задать настройки; AllowOverride — позволит переопределить все настройки с помощью файла .htaccess; Options задает некоторые настройки: Indexes разрешает списки каталогов, ExecCGI разрешает запуск cgi скриптов, Require all granted — предоставляет всем доступ к сайтам в данном каталоге.

SetEnvIf X-Forwarded-Proto https HTTPS=on

* этой настройкой мы при получении заголовка X-Forwarded-Proto со значением https задаем переменную $_SERVER[‘HTTPS’] равную on. Данная настройки критична для функционирования некоторых CMS.

* по умолчанию, apache2 может быть установлен с модулем мультипроцессовой обработки mpm_event. Данный модуль не поддерживает php 7 и выше.

Разрешаем модуль мультипроцессовой обработки mpm_prefork:

* в данном примере установлен php версии 7.2.

Разрешаем модуль setenvif:

Разрешаем автозапуск и запускаем службу:

Открываем браузер и вводим в адресную строку http:// :8080. Мы должны увидеть привычную страницу:

* в разделе Server API мы должны увидеть Apache.

NGINX + Apache

Ранее мы настроили связку nginx + php-fpm. Теперь настроим nginx + apache. Открываем конфигурационный файл nginx для сайта по умолчанию:

Находим наш настроенный location для php-fpm:

\.php$ <
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>
.

\.php$ <
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>
.

Проверяем и перезапускаем nginx:

Пробуем открыть в браузере http:// — должна открыться та же страница, что при проверке Apache (с добавлением 8080):

Apache Real IP

Запросы на apache приходят от NGINX, и они воспринимаются первым как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей. Для решения проблемы будем использовать модуль remoteip.

Создаем конфигурационный файл со следующим содержимым:

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1/8

systemctl restart apache2

Для проверки настройки открываем браузер и вводим в адресную строку http:// , где откроется наша страница phpinfo. В разделе Apache Environment мы должны увидеть внешний адрес компьютера, с которого обращаемся к серверу в опции REMOTE_ADDR.

Postfix

В качестве агента MTA мы будем использовать удобный в настройке и надежный Postfix.

Установка, настройка и запуск

Устанавливаем пакет postfix:

Вносим некоторые изменения в настройки:

myorigin = $mydomain
smtp_generic_maps = hash:/etc/postfix/generic_map

* mydomain — домен сервера; myorigin — имя домена, которое будет подставляться всем отправляемым сообщениям без явного указания оного; smtp_generic_maps указывает на карту с общими правилами пересылки.

Открываем карту пересылки:

* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес no-reply@dmosk.local.

Включаем автозапуск почтового сервера и запускаем его службу:

Корректная отправка

Для того, чтобы сервер мог отправлять сообщения на внешние ящики, необходимо корректно настроить в DNS, как минимум, записи A и PTR.

Для добавления А-записи, необходимо в настройках панели управления нашим доменом создать запись типа. Ее имя и IP-адрес должны соответствовать имени и адресу нашего сервера.

Для создания PTR-записи необходимо написать письмо Интернет-провайдеру, к которому подключен наш сервер. Если наш сервер арендуется у хостинговой компании, необходимо либо написать данное письмо данной хостинговой компании, либо данная возможность может быть предоставлена в панели управления хостинговыми услугами.

Тюнинг веб-сервера

Открываем на редактирование следующий файл:

post_max_size = 1G
.
upload_max_filesize = 512M
.
short_open_tag = On
.
date.timezone = «Europe/Moscow»

* где post_max_size — максимальный объем отправляемых на сервер данных; upload_max_filesize — максимально допустимый размер одного загружаемого файла; short_open_tag — разрешение использования короткого способа открытия php (
Define root_domain site1.local
Define root_path /var/www/site1.local

ErrorLog $/log/apache/error_log
TransferLog $/log/apache/access_log

php_admin_value upload_tmp_dir $/tmp
php_admin_value doc_root $
php_admin_value open_basedir $:/usr/local/share/smarty:/usr/local/share/pear
php_admin_value session.save_path 0;0660;$/tmp

Создаем каталоги для сайта:

mkdir -p /var/www/$TMP_SITE/log/

Создаем индексный файл со следующим содержимым:

chown -R www-data:www-data /var/www/$TMP_SITE

chmod -R 775 /var/www/$TMP_SITE

Проверяем корректность настроек конфигурационных файлов:

Открываем сайт в браузере по нашему домену site1.local (он должен быть прописан в DNS или можно его задать в локальном файле hosts того компьютера, с которого мы открываем сайт в браузере). Мы должны увидит фразу «Hello from site1».

2. Создание базы данных

Создаем базу данных для сайта командами:

> CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

> GRANT ALL PRIVILEGES ON site1.* TO dbuser@localhost IDENTIFIED BY ‘password’ WITH GRANT OPTION;

* данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password. При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION.

3. Создание пользователя FTP

Для возможности подключения к сайту по FTP, создаем отдельного пользователя:

ftpasswd —passwd —file=/etc/proftpd/ftpd.passwd —name=site1.local —u >

* тут мы создадим пользователя site1.local, который будет иметь доступ к каталогу /var/www/$TMP_SITE.

источник

Как установить Apache с PHP-FPM/FastCGI на Ubuntu 16.04

PHP-FPM (FastCGI Process Manager) является альтернативной версией PHP FastCGI. Он предоставляет некоторые дополнительные функции, такие как Adaptive process spawning, который полезен для сайтов. Эта статья поможет вам установить Apache с PHP-FPM/FastCGI в систему Ubuntu 16.04.

Установка Apache

Установим веб-сервер Apache из официального репозитория. Запустите терминал в вашей системе или войдите с помощью ssh в удаленную систему. Выполните следующие команды для установки последней доступной версии веб-сервера Apache и модуля FastCGI.

Установка PHP

Для установки актуальной версий PHP мы используем PPA. Используйте следующую пару команд, чтобы добавить PPA в вашу систему.

И установите PHP 7.2 — последнюю версию, доступную в день написания этой статьи. Просто выполните команды для установки пакетов PHP и PHP-FPM:

Примечание: Когда вы используете PHP-FPM, все конфигурации модулей PHP находятся в каталоге /etc/php/7.2/fpm. После установки пакетов из команды выше, у вас автоматически запустится сервис php7.2-fpm. Вы можете убедиться в этом, выполнив команду приведенную ниже:

Конфигурация Apache

Теперь включите несколько модулей, необходимых для конфигурации версий PHP с Apache. Эти модули необходимы для интеграции PHP FPM и FastCGI с сервером Apache.

Давайте настроим Apache VirtualHost для работы с FPM/FastCGI. Для этой статьи мы используем VirtualHost по умолчанию. Измените файл конфигурации VirtualHost в текстовом редакторе. Вы можете создать новый VirtualHost согласно вашим требованиям, поэтому обязательно включите новый VirtualHost.

Обновите конфигурацию следующим образом:

Сохраните изменения в файле конфигурации и перезапустите Apache, чтобы применить изменения.

Пробный запуск

Создайте PHP-скрипт с функцией phpinfo() и поместите его в корневой каталог сервера. Для этого используйте команду приведенную ниже:

Откройте веб-браузер, чтобы получить доступ к info.php, используя IP-адрес сервера (для VirtualHost по умолчанию) для вашего настроенного домена в Apache VirtualHost.

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University.

источник

Добавить комментарий

Adblock
detector