Установка ПО · 6 min read · Jan 26, 2026

Установка Nginx с поддержкой PHP5 (и PHP-FPM) и MySQL на Fedora 19

Nginx (произносится как “engine x”) — это бесплатный, открытый, высокопроизводительный HTTP-сервер. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов. Этот учебник показывает, как вы можете установить Nginx на сервер Fedora 19 с поддержкой PHP5 (через PHP-FPM) и поддержкой MySQL.

Я не даю никаких гарантий, что это сработает для вас!

1 Предварительная заметка

В этом учебнике я использую имя хоста server1.example.com с IP-адресом 192.168.0.100. Эти настройки могут отличаться у вас, поэтому вам нужно заменить их, где это необходимо.

2 Установка MySQL/MariaDB 5

Сначала мы устанавливаем MySQL 5 следующим образом:

yum install mysql mysql-server

Затем мы создаем системные ссылки для автозагрузки MySQL (чтобы MySQL запускался автоматически при загрузке системы) и запускаем сервер MySQL:

systemctl enable mysqld.service  
systemctl start mysqld.service

Теперь проверьте, что сеть включена. Выполните

netstat -tap | grep mysql

Это должно показать что-то вроде этого:

[root@server1 ~]# netstat -tap | grep mysql  
tcp        0      0 *:mysql                     *:*                         LISTEN      1116/mysqld  
[root@server1 ~]#

Если этого не происходит, отредактируйте /etc/my.cnf и закомментируйте опцию skip-networking:

vi /etc/my.cnf
[...]
#skip-networking
[...]

и перезапустите сервер MySQL:

systemctl restart mysqld.service

Запустите

mysql_secure_installation

чтобы установить пароль для пользователя root (в противном случае любой сможет получить доступ к вашей базе данных MySQL!):

[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

Вам нужно будет ввести текущий
пароль для пользователя root, чтобы войти в MariaDB и защитить его. Если вы только что установили MariaDB и
не установили пароль root,
пароль будет пустым, поэтому просто нажмите Enter здесь.

Введите текущий пароль для root (нажмите Enter, если нет): <– ENTER
OK, успешно использован пароль, продолжаем…

Установка пароля root гарантирует, что никто не сможет войти в
пользователь root MariaDB без надлежащей авторизации.

Установить пароль root? [Y/n] <– ENTER
Новый пароль: <– yourrootsqlpassword
Повторите новый пароль: <– yourrootsqlpassword
Пароль успешно обновлен!
Перезагрузка таблиц привилегий..
… Успех!

По умолчанию установка MariaDB имеет анонимного пользователя,
что позволяет любому войти в MariaDB, не имея учетной записи пользователя. Это предназначено только для тестирования и
для упрощения установки. Вы должны удалить их перед переходом в
производственную среду.

Удалить анонимных пользователей? [Y/n] <– ENTER
… Успех!

Обычно root должен иметь возможность подключаться только с ‘localhost’. Это
гарантирует, что кто-то не сможет угадать пароль root из сети.

Запретить удаленный вход root? [Y/n] <– ENTER
… Успех!

По умолчанию MariaDB поставляется с базой данных под названием ‘test’,
к которой может получить доступ любой. Это также предназначено только для тестирования и
должно быть удалено перед переходом в
производственную среду.

Удалить тестовую базу данных и доступ к ней? [Y/n] <– ENTER

  • Удаление тестовой базы данных…
    … Успех!
  • Удаление привилегий на тестовую базу данных…
    … Успех!

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

Перезагрузить таблицы привилегий сейчас? [Y/n] <– ENTER
… Успех!

Очистка…

Все готово! Если вы завершили все вышеперечисленные шаги,
ваша установка MariaDB теперь должна быть защищена.

Спасибо за использование MariaDB!
[root@server1 ~]#

3 Установка Nginx

Nginx доступен как пакет для Fedora 19, который мы можем установить следующим образом:

yum install nginx

Затем мы создаем системные ссылки для автозагрузки nginx и запускаем его:

systemctl enable nginx.service  
systemctl start nginx.service

Введите IP-адрес или имя хоста вашего веб-сервера в браузере (например, http://192.168.0.100), и вы должны увидеть страницу приветствия nginx:

4 Установка PHP5

Мы можем заставить PHP5 работать в nginx через PHP-FPM (PHP-FPM (FastCGI Process Manager) — это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно более загруженных сайтов). В официальных репозиториях Fedora 19 есть пакет php-fpm, поэтому мы можем установить php-fpm вместе с php-cli и некоторыми модулями PHP5, такими как php-mysqlnd, которые вам нужны, если вы хотите использовать MySQL из ваших PHP-скриптов:

yum install php-fpm php-cli php-mysqlnd php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

Zend OPcache — это бесплатный и открытый кэш опкодов PHP для кэширования и оптимизации промежуточного кода PHP. Он похож на другие кэши опкодов PHP, такие как APC и Xcache. Настоятельно рекомендуется установить один из них, чтобы ускорить вашу страницу PHP. Поскольку Zend OPcache теперь официально включен в PHP 5.5, мы используем его вместо других кэшей опкодов.

Zend OPcache можно установить следующим образом:

yum install php-opcache

Чтобы избежать ошибок, таких как

[13-Nov-2011 22:13:16] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /usr/share/nginx/html/info.php on line 2

… в /var/log/php-fpm/www-error.log, когда вы вызываете PHP-скрипт в вашем браузере, вам следует открыть /etc/php.ini и установить date.timezone:

vi /etc/php.ini
[...]
[Date]
; Определяет часовой пояс по умолчанию, используемый функциями даты
; http://php.net/date.timezone
date.timezone = "Europe/Berlin"
[...]

Затем создайте системные ссылки для автозагрузки php-fpm и запустите его:

systemctl enable php-fpm.service  
systemctl start php-fpm.service

PHP-FPM — это демон, который запускает сервер FastCGI на порту 9000.

5 Настройка nginx

Конфигурация nginx находится в /etc/nginx/nginx.conf, который мы сейчас откроем:

vi /etc/nginx/nginx.conf

Конфигурация проста для понимания (вы можете узнать больше об этом здесь: http://wiki.codemongers.com/NginxFullExample и здесь: http://wiki.codemongers.com/NginxFullExample2)

Сначала (это необязательно) вы можете увеличить количество рабочих процессов и установить keepalive_timeout на разумное значение:

[...]
worker_processes  4;
[...]
    keepalive_timeout  2;
[...]

Виртуальные хосты определяются в контейнерах server {}.
По умолчанию vhost определяется дальше в файле /etc/nginx/nginx.conf - давайте изменим его следующим образом:

vi /etc/nginx/nginx.conf
[...]
    server {
        listen       80;
        server_name  _;

        #charset koi8-r;

        #access_log  /var/log/nginx/host.access.log  main;

        location / {
            root   /usr/share/nginx/html;
            index  index.php index.html index.htm;
        }

        # перенаправить страницы ошибок сервера на статическую страницу /40x.html
        #
        error_page  404              /404.html;
        location = /40x.html {
            root   /usr/share/nginx/html;
        }

        # перенаправить страницы ошибок сервера на статическую страницу /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        # проксировать PHP-скрипты на Apache, слушающий на 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # передать PHP-скрипты на сервер FastCGI, слушающий на 127.0.0.1:9000
        #
        location ~ \.php$ {
             root           /usr/share/nginx/html;
             try_files $uri =404;
             fastcgi_split_path_info ^(.+\.php)(/.+)$;
             fastcgi_pass   127.0.0.1:9000;
             fastcgi_index  index.php;
             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
             include        fastcgi_params;
        }

        # запретить доступ к файлам .htaccess, если корневая директория Apache
        # совпадает с корневой директорией nginx
        #
        location ~ /\.ht {
            deny  all;
        }
    }
[...]

servername ; делает это стандартным vhost по умолчанию (конечно, вы также можете указать имя хоста, например www.example.com).

В части location / я добавил index.php в строку индекса. root /usr/share/nginx/html; означает, что корневая директория документа — это каталог /usr/share/nginx/html.

Важная часть для PHP — это блок location ~ .php$ {}. Раскомментируйте его, чтобы включить. Измените строку root на корневую директорию веб-сайта (например, root /usr/share/nginx/html;). Пожалуйста, убедитесь, что вы изменили строку fastcgi_param на fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;, потому что в противном случае интерпретатор PHP не сможет найти PHP-скрипт, который вы вызываете в своем браузере.

Обратите внимание, что я добавил строку try_files $uri =404; для предотвращения нулевых уязвимостей (см. http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP и http://forum.nginx.org/read.php?2,88845,page=3). В качестве альтернативы, если вы не хотите использовать строку try_files $uri =404;, вы можете установить cgi.fix_pathinfo = 0; в /etc/php5/fpm/php.ini (не забудьте перезагрузить PHP-FPM после этого).

Теперь сохраните файл и перезагрузите nginx:

systemctl reload nginx.service

Теперь создайте следующий PHP-файл в корневой директории документа /usr/share/nginx/html…

vi /usr/share/nginx/html/info.php

Теперь мы вызываем этот файл в браузере (например, http://192.168.0.100/info.php):

Как видите, PHP5 работает, и он работает через FPM/FastCGI, как показано в строке Server API. Если вы прокрутите дальше вниз, вы увидите все модули, которые уже включены в PHP5, включая модуль MySQL:

6 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.