Установка сервера · 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.servicePHP-FPM - это демон, который запускает сервер FastCGI на порту 9000, как вы можете увидеть в выводе
netstat -tapnserver1:~ # 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.servicephpMyAdmin теперь находится в каталоге /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-ftpdsystemctl 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.
Get new posts in your inbox
No spam. Unsubscribe anytime.