Установка сервера · 9 min read · Sep 13, 2025

Идеальный сервер - OpenSUSE 12.3 x86_64 (nginx, Dovecot, ISPConfig 3) - Страница 4

10 Установка Nginx, PHP5 (PHP-FPM) и Fcgiwrap

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

zypper install nginx

Если Apache2 уже установлен в системе, остановите его сейчас…

systemctl stop apache2.service

… и удалите ссылки на запуск Apache в системе:

systemctl disable apache2.service

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

systemctl enable nginx.service  
systemctl start nginx.service

(Если оба Apache2 и nginx установлены, установщик ISPConfig 3 спросит, какой из них вы хотите использовать - в этом случае ответьте nginx. Если установлен только один из них, ISPConfig выполнит необходимую конфигурацию автоматически.)

Если вы хотите использовать IPv6 адреса с вашими vhosts nginx, пожалуйста, сделайте следующее перед созданием IPv6 vhosts в ISPConfig:

Откройте /etc/sysctl.conf…

vi /etc/sysctl.conf

… и добавьте строку net.ipv6.bindv6only = 1:

| [...] net.ipv6.bindv6only = 1 |

Запустите…

sysctl -p

… после этого, чтобы изменения вступили в силу.

Мы можем заставить PHP5 работать в nginx через PHP-FPM (PHP-FPM (FastCGI Process Manager) - это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно более загруженных сайтов), который мы устанавливаем следующим образом:

zypper install php5-fpm

Перед тем, как запустить PHP-FPM, переименуйте /etc/php5/fpm/php-fpm.conf.default в /etc/php5/fpm/php-fpm.conf:

mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

Измените разрешения каталога сессий PHP:

chmod 1733 /var/lib/php5

Затем откройте /etc/php5/fpm/php-fpm.conf…

vi /etc/php5/fpm/php-fpm.conf

… и измените error_log на /var/log/php-fpm.log:

| [...] error_log = /var/log/php-fpm.log [...] |

Для PHP-FPM под OpenSUSE 12.3 нет файла php.ini, поэтому мы копируем CLI php.ini:

cp /etc/php5/cli/php.ini /etc/php5/fpm/

Далее откройте /etc/php5/fpm/php.ini…

vi /etc/php5/fpm/php.ini

… и установите cgi.fix_pathinfo на 0:

| [...] ; cgi.fix_pathinfo предоставляет *реальную* поддержку PATH_INFO/PATH_TRANSLATED для CGI. PHP ; предыдущее поведение заключалось в том, чтобы устанавливать PATH_TRANSLATED в SCRIPT_FILENAME и не понимать, ; что такое PATH_INFO. Для получения дополнительной информации о PATH_INFO смотрите спецификации cgi. Установка ; этого в 1 приведет к тому, что PHP CGI исправит свои пути в соответствии со спецификацией. Установка ; нуля заставляет PHP вести себя как раньше. По умолчанию 1. Вы должны исправить свои скрипты, ; чтобы использовать SCRIPT_FILENAME вместо PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

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

systemctl enable php-fpm.service  
systemctl restart php-fpm.service

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

netstat -tapn
server1:~ # netstat -tapn  
 Активные интернет-соединения (серверы и установленные)  
 Протокол  Recv-Q  Send-Q  Локальный адрес           Удаленный адрес         Состояние       PID/Имя программы  
 tcp        0      0 127.0.0.1:3310          0.0.0.0:*               LISTEN      10357/clamd  
 tcp        0      0 0.0.0.0:143              0.0.0.0:*               LISTEN      9869/dovecot  
 tcp        0      0 0.0.0.0:80               0.0.0.0:*               LISTEN      10521/nginx  
 tcp        0      0 0.0.0.0:22               0.0.0.0:*               LISTEN      1275/sshd  
 tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      9816/master  
 tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      10695/php-fpm.conf)  
 tcp        0      0 127.0.0.1:10024         0.0.0.0:*               LISTEN      10337/amavisd (mast  
 tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      9694/mysqld  
 tcp        0      0 192.168.0.100:22        192.168.0.199:4630      ESTABLISHED 1332/0  
 tcp        0      0 :::22                     :::*                     LISTEN      1275/sshd  
 tcp        0      0 ::1:25                   :::*                     LISTEN      9816/master  
 server1:~ #

Чтобы получить поддержку MySQL в PHP, мы можем установить пакет php5-mysql. Также неплохо установить некоторые другие модули PHP5, так как они могут понадобиться для ваших приложений:

zypper install php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshm

Теперь перезапустите PHP-FPM:

systemctl restart php-fpm.service

Чтобы получить поддержку CGI в nginx, мы устанавливаем Fcgiwrap.

Fcgiwrap - это обертка CGI, которая также должна работать для сложных CGI-скриптов и может использоваться для общих хостинговых сред, так как позволяет каждому vhost использовать свой собственный каталог cgi-bin.

Поскольку для OpenSUSE нет пакета fcgiwrap, мы должны собрать его сами. Сначала установим некоторые предварительные условия:

zypper install git patch automake glibc-devel gcc flex compat-readline4 db-devel wget gcc-c++ make vim libtool FastCGI-devel

Создайте следующие символические ссылки:

ln -s /usr/include/fastcgi/fastcgi.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_config.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_stdio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgiapp.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgimisc.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgios.h /usr/local/include/

Теперь мы можем собрать fcgiwrap следующим образом:

cd /usr/local/src/  
 git clone git://github.com/gnosek/fcgiwrap.git  
 cd fcgiwrap  
 autoreconf -i  
 ./configure  
 make  
 make install

Это устанавливает fcgiwrap в /usr/local/sbin/fcgiwrap.

Затем мы устанавливаем пакет spawn-fcgi, который позволяет нам запускать fcgiwrap как демон:

zypper install spawn-fcgi

Теперь мы можем запустить fcgiwrap следующим образом:

spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap

Теперь вы должны найти сокет fcgiwrap в /var/run/fcgiwrap.socket, принадлежащий пользователю wwwrun и группе www. Теперь мы должны добавить пользователя nginx в группу www:

usermod -a -G www nginx

Перезагрузите nginx после этого:

systemctl reload nginx.service

Если вы не хотите запускать fcgiwrap вручную каждый раз при загрузке системы, откройте /etc/init.d/boot.local…

vi /etc/init.d/boot.local

… и добавьте команду spawn-fcgi в конце файла - это автоматически запустит fcgiwrap в конце процесса загрузки:

| [...] /usr/bin/spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap |

Вот и все! Теперь, когда вы создаете vhost nginx, ISPConfig позаботится о правильной конфигурации vhost.

10.1 Установка phpMyAdmin

Далее мы устанавливаем phpMyAdmin:

zypper install phpMyAdmin

Поскольку это устанавливает Apache как зависимость, удалите ссылки на запуск Apache в системе:

systemctl disable apache2.service

phpMyAdmin теперь находится в каталоге /srv/www/htdocs/phpMyAdmin, но мы хотим, чтобы он находился в каталоге /usr/share/phpmyadmin/, поэтому создаем символическую ссылку:

ln -s /srv/www/htdocs/phpMyAdmin /usr/share/phpmyadmin

После установки ISPConfig 3 вы можете получить доступ к phpMyAdmin следующим образом:

vhost приложений ISPConfig на порту 8081 для nginx поставляется с конфигурацией phpMyAdmin, поэтому вы можете использовать http://server1.example.com:8081/phpmyadmin или http://server1.example.com:8081/phpMyAdmin для доступа к phpMyAdmin.

Если вы хотите использовать псевдоним /phpmyadmin или /phpMyAdmin, который вы можете использовать с ваших веб-сайтов, это немного сложнее, чем для Apache, потому что nginx не имеет глобальных псевдонимов (т.е. псевдонимов, которые можно определить для всех vhosts). Поэтому вам нужно определить эти псевдонимы для каждого vhost, с которого вы хотите получить доступ к phpMyAdmin.

Для этого вставьте следующее в поле Директивы nginx на вкладке Опции веб-сайта в ISPConfig:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

Если вы используете http s вместо http для вашего vhost, вы должны добавить строку fastcgi_param HTTPS on; в вашу конфигурацию phpMyAdmin следующим образом:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS on; # <-- добавьте эту строку fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

Если вы используете как http, так и https для вашего vhost, вам нужно добавить следующий раздел в секцию http {} в /etc/nginx/nginx.conf (перед любыми строками include), который определяет, использует ли посетитель http или https и устанавливает переменную $fastcgi_https (которую мы будем использовать в нашей конфигурации phpMyAdmin) соответственно:

vi /etc/nginx/nginx.conf

| [...] http { [...] ## Определите, когда используется HTTPS map $scheme $fastcgi_https { default off; https on; } [...] } [...] |

Не забудьте перезагрузить nginx после этого:

systemctl reload nginx.service

Затем снова перейдите в поле Директивы nginx и вместо fastcgi_param HTTPS on; добавьте строку fastcgi_param HTTPS $fastcgi_https; так, чтобы вы могли использовать phpMyAdmin как для http, так и для https запросов:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS $fastcgi_https; # <-- добавьте эту строку fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

11 Установка PureFTPd

Установите демон FTP pure-ftpd. Выполните:

zypper install pure-ftpd
systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

Теперь мы настраиваем PureFTPd для разрешения FTP и TLS-сессий. FTP - это очень небезопасный протокол, так как все пароли и все данные передаются в открытом виде. Используя TLS, вся связь может быть зашифрована, что делает FTP намного более безопасным.

OpenSSL необходим для TLS; чтобы установить OpenSSL, мы просто выполняем:

zypper install openssl

Откройте /etc/pure-ftpd/pure-ftpd.conf…

vi /etc/pure-ftpd/pure-ftpd.conf

Если вы хотите разрешить FTP и TLS-сессии, установите TLS на 1:

| [...] # Эта опция может принимать три значения : # 0 : отключить уровень шифрования SSL/TLS (по умолчанию). # 1 : принимать как традиционные, так и зашифрованные сессии. # 2 : отклонять соединения, которые не используют механизмы безопасности SSL/TLS, # включая анонимные сессии. # Не раскомментируйте это бездумно. Убедитесь, что : # 1) Ваш сервер был скомпилирован с поддержкой SSL/TLS (--with-tls), # 2) Действительный сертификат установлен, # 3) Только совместимые клиенты смогут войти. TLS 1 [...] |

Если вы хотите принимать только TLS-сессии (без FTP), установите TLS на 2:

| [...] # Эта опция может принимать три значения : # 0 : отключить уровень шифрования SSL/TLS (по умолчанию). # 1 : принимать как традиционные, так и зашифрованные сессии. # 2 : отклонять соединения, которые не используют механизмы безопасности SSL/TLS, # включая анонимные сессии. # Не раскомментируйте это бездумно. Убедитесь, что : # 1) Ваш сервер был скомпилирован с поддержкой SSL/TLS (--with-tls), # 2) Действительный сертификат установлен, # 3) Только совместимые клиенты смогут войти. TLS 2 [...] |

Чтобы не разрешать TLS вообще (только FTP), установите TLS на 0:

| [...] # Эта опция может принимать три значения : # 0 : отключить уровень шифрования SSL/TLS (по умолчанию). # 1 : принимать как традиционные, так и зашифрованные сессии. # 2 : отклонять соединения, которые не используют механизмы безопасности SSL/TLS, # включая анонимные сессии. # Не раскомментируйте это бездумно. Убедитесь, что : # 1) Ваш сервер был скомпилирован с поддержкой SSL/TLS (--with-tls), # 2) Действительный сертификат установлен, # 3) Только совместимые клиенты смогут войти. TLS 0 [...] |

Чтобы использовать TLS, мы должны создать SSL-сертификат. Я создаю его в /etc/ssl/private/, поэтому сначала создаю этот каталог:

mkdir -p /etc/ssl/private/

После этого мы можем сгенерировать SSL-сертификат следующим образом:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Название страны (2 буквы) [AU]: <– Введите название вашей страны (например, “DE”).
Название штата или провинции (полное название) [Some-State]: <– Введите название вашего штата или провинции.
Название населенного пункта (например, город) []: <– Введите ваш город.
Название организации (например, компания) [Internet Widgits Pty Ltd]: <– Введите название вашей организации (например, название вашей компании).
Название организационного подразделения (например, отдел) []: <– Введите название вашего организационного подразделения (например, “IT-отдел”).
Общее название (например, ВАШЕ имя) []: <– Введите полное доменное имя системы (например, “server1.example.com”).
Адрес электронной почты []: <– Введите ваш адрес электронной почты.

Измените разрешения SSL-сертификата:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Наконец, перезапустите PureFTPd:

systemctl restart pure-ftpd.service

Вот и все. Теперь вы можете попробовать подключиться, используя ваш FTP-клиент; однако вам следует настроить ваш FTP-клиент для использования TLS - смотрите следующую главу, как это сделать с помощью FileZilla.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.