Home » Freebsd » Настройка web сервера на Freebsd 10

Настройка web сервера на Freebsd 10

В первой и второй частях мы рассмотрели установку и настройку операционной системы Freebsd 10.1 для  разворачивания на ней блога wordpress. Теперь предстоит установить и настроить программное обеспечение, необходимое для нашего web сервера.

Я буду рассматривать самый простой и быстрый вариант настроек, с небольшим отклонением от дефолтных для нашего удобства. По каждому пункту могут возникать вопросы и нюансы, я не буду касаться всего этого в этой статье.

Устанавливаем ftp сервер vsftpd

Начнем нашу настройку с установки ftp сервера vsftpd. Для авторизации мы будем использовать системные учетные записи, анонимный доступ отключим.

Первым делом обновим порты:

# portsnap fetch update

После обновления, ставим сервер:

# cd /usr/ports/ftp/vsftpd
# make install clean

Компоненты оставляем по-умолчанию. Добавляем загрузку vsftpd в /etc/rc.conf:

# echo 'vsftpd_enable="YES"' >> /etc/rc.conf

Редактируем конфиг /usr/local/etc/vsftpd.conf, приводим его к следующему виду:

anonymous_enable=NO
 local_enable=YES
 write_enable=YES
 local_umask=022
 dirmessage_enable=YES
 xferlog_enable=YES
 connect_from_port_20=YES
 xferlog_file=/var/log/vsftpd.log
 listen=YES
 background=YES
 secure_chroot_dir=/usr/local/share/vsftpd/empty

Запускаем сервер:

# /usr/local/etc/rc.d/vsftpd start

Проверяем, запустился ли демон:

# sockstat | grep 21

В ответ должны увидеть что-то похожее:

root     vsftpd     4793  3  tcp4   *:21                  *:*

Это означает, что сервер запустился и слушает входящие соединения на 21 порт.  С текущими настройками можно залогиниться учетной записью root и перемещаться по всему серверу. Это очень небезопасно, призываю внимательно относиться к этим возможностям. Рекомендую подробнее ознакомиться с настройками сервера, обратить внимание на директивы userlist_enable, userlist_file, chroot_local_uses, chroot_list_enable, chroot_list_file. С помощью них можно ограничивать доступ к серверу и перемещение пользователей по папкам. Вообще, у vsftpd много настроек и возможностей, в интернете достаточно статей на подобную тему. Можно без проблем хранить базу пользователей сервера в mysql. В завершение порекомендую ограничить доступ к ftp через firewall.

Установка и настройка Mysql

Дальше устанавливаем сервер баз данных mysql:

# cd /usr/ports/databases/mysql55-server
# make install clean

Настройки оставляем дефолтные.

Сервер тянет за собой достаточно большое количество зависимостей. Установка постоянно тормозится и выскакивает окно с настройками очередной зависимости. Чтобы не отвлекаться на это и не тормозить процесс, я рекомендую перед командой make install clean ввести команду:

# make config-recursive

Она проверит все зависимости и выведет сразу настройки этих зависимостей. Потом в процессе сборки пакета уже не будет прерываний.

После завершения установки добавляем запуск сервера в rc.conf:

# echo 'mysql_enable="YES"' >> /etc/rc.conf
# echo 'mysql_dbdir="/web/mysql"' >> /etc/rc.conf

Создаем необходимые папки и выставляем права:

# mkdir /web && cd /web && mkdir mysql && chown mysql:mysql mysql/

Создаем файл конфигурации:

# touch /web/mysql/my.cnf
 # chown mysql:mysql /web/mysql/my.cnf

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

[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
port = 3306
bind-address =127.0.0.1
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8
#log=/var/log/mysql.log # Лог всех SQL-запросов
#log-bin=/var/log/mysql-bin.log # Бинарный лог всех SQL-запросов
log-error=/var/log/mysql-err.log # Лог ошибок в работе демона СУБД MySQL
#log-slow-queries=/var/log/mysql.slow # Лог всех медленных SQL-запросов
#log-bin=mysql-bin
#log=/var/log/mysql.log
#binlog_format=mixed
server-id = 1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

Закомментированные строки включаем на свое усмотрение в процессе отладки. Если будет включен лог всех SQL запросов, то нужно не забыть настроить ротацию логов, файл будет расти очень быстро, можно забыть и пропустить момент, когда файл займет все свободное место.

Лог файлы нужно обязательно создать самим и выставить на них права пользователя mysql. Если этого не сделать, то сервер не будет стартовать, и что самое неприятное, не будет никаких сообщений в лог файлах. Они будут созданы с правами root:wheel и сервер ничего туда не сможет записать. Так что создаем файлы сами:

# touch /var/log/mysql-err.log
 # chown mysql:mysql /var/log/mysql-err.log

И стартуем сервер:

# /usr/local/etc/rc.d/mysql-server start

Проверяем, все ли запустилось как следует:

# ps axw | grep mysql

Если все в порядке, то вы увидите что-то похожее на это:

52490 - Is 0:00.02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/web/mysql/my.cnf --user=mysql --datadir=/web/mysql --pid-file=/web/mysql/websrv.local.pid
 52784 - I 0:00.17 /usr/local/libexec/mysqld --defaults-extra-file=/web/mysql/my.cnf --basedir=/usr/local --datadir=/web/mysql --plugin-dir=/usr/local/lib/mysql/plugin --user=mysql --log-err
 52802 1 S+ 0:00.00 grep mysql

Дальше воспользуемся стандартным скриптом для безопасной настройки mysql:

# /usr/local/bin/mysql_secure_installation

Задаем пароль root пользователя mysql. Обращаю внимание, что это не системный root. В mysql свои пользователи. На остальные вопросы отвечаем положительно, в принципе, там все понятно описано, ничего сложного нет. Удаляется тестовая база, тестовый пользователь, запрещается удаленный доступ к серверу.

На этом настройка mysql окончена. Идем дальше.

Устанавливаем и настраиваем apache24

Устанавливаем непосредственно web сервер apache:

# cd /usr/ports/www/apache24
 # make config-recursive

Оставляем все настройки по-умолчанию. Запускаем установку:

# make install clean

Добавляем apache в атозагрузку:

# echo 'apache24_enable="YES"' >> /etc/rc.conf

Теперь создадим 2 виртуальных хоста. На первом будет располагаться phpmyadmin, на втором наш сайт, в данном случае wordpress. Не забываем настроить в DNS эти хосты. Раскомментируем строчку в конфиге /usr/local/etc/apache24/httpd.conf

Include etc/apache24/extra/httpd-vhosts.conf

Дальше идем в папку /usr/local/etc/apache24/extra/ и редактируем файл httpd-vhosts.conf до следующего вида:

<VirtualHost 127.0.0.1:80>

ServerAdmin root@websrv.local
DocumentRoot "/web/sites/websrv.local/www"
ServerName websrv.local
ServerAlias www.websrv.local
ErrorLog "/web/sites/websrv.local/log/error.log"
CustomLog "/web/sites/websrv.local/log/access.log" common
php_admin_value open_basedir "/web/sites/websrv.local:."
php_admin_value upload_tmp_dir "/web/sites/websrv.local/tmp"
php_admin_value session.save_path "/web/sites/websrv.local/tmp"

<Directory /web/sites/websrv.local/www/>
AllowOverride All
RewriteEngine On
Require all granted
DirectoryIndex index.php index.html index.htm

Order allow,deny
Allow from All
</Directory>

</VirtualHost>

<VirtualHost 127.0.0.1:80>

ServerAdmin root@websrv.local
DocumentRoot "/web/sites/pma53.websrv.local/www"
ServerName pma53.websrv.local
ServerAlias www.pma53.websrv.local
ErrorLog "/web/sites/pma53.websrv.local/log/error.log"
CustomLog "/web/sites/pma53.websrv.local/log/access.log" common
php_admin_value open_basedir "/web/sites/pma53.websrv.local:."
php_admin_value upload_tmp_dir "/web/sites/pma53.websrv.local/tmp"
php_admin_value session.save_path "/web/sites/pma53.websrv.local/tmp"

<Directory /web/sites/pma53.websrv.local/www/>
AllowOverride All
Require all granted
DirectoryIndex index.php index.html index.htm

Order allow,deny
Allow from All
</Directory>

</VirtualHost>

Я использую тестовый домен websrv.local В общем случае тут должен быть непосредственно домен вашего сайта, что-то вроде myblog.ru. Для phpmyadmin я использую поддомен с произвольным непопулярным именем, чтобы туда не заходил тот, кому не следует.

Обращаю внимание на параметр Require all granted. На предыдущих серверах я его не указывал. В этот же раз при обращении к виртуальному домену в логах получал ошибку:

AH01630: client denied by server configuration

Скорее всего это особенность apache24, до этого я пользовался более ранними версиями.

Сайты я размещаю в каталоге /web/sites. Для каждого домена отдельная папка. Для улучшения безопасности можно настроить отдельных пользователей для каждого поддомена, сделать пользователя ftp, доступ к логам и так далее. В этой статье я не буду касаться этого вопроса. У нас будет один сайт и один пользователь. Создаем необходимые папки:

# mkdir /web/sites
# mkdir /web/sites/websrv.local && mkdir /web/sites/pma53.websrv.local
# cd /web/sites/websrv.local && mkdir log tmp www
# cd /web/sites/pma53.websrv.local && mkdir log tmp www
# chown -R www:www /web/sites

На этом пока настройку apache закончим, мы к ней вернемся позже, когда установим остальные компоненты. Запускать его не будем, он все равно не запустится, выдаст ошибку.

Устанавливаем php и phpextensions

Дальше устанавливаем php, настройки оставляем настройки по-умолчанию:

# cd /usr/ports/lang/php5
 # make config-recursive
 # make install clean

После установки создаем файл конфигурации:

# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Устанавливаем расширения:

# cd /usr/ports/lang/php5-extensions
# make config-recursive

Помимо настроек по-умолчанию, обязательно добавляем CURL, DOM, POSIX, FTP, GD, HASH, ICONV, XML, JSON, MBSTRING, MYSQL, MYSQLI, OPENSSL, SOCKETS, TOKENIZER, XMLREADER, ZLIB, EXIF, GETTEXT,

# make install clean

Теперь поставим модуль php для apache. Он теперь стал почему-то отдельным портом. Я не сразу первый раз сообразил, куда делся модуль, который всегда ставился вместе с портом php. В общем, ставим отдельно:

# cd /usr/ports/www/mod_php5
 # make install clean

Для того, чтобы apache правильно обрабатывал php файлы, необходимо в конфиг httpd.conf добавить следующие строки:

<IfModule mod_php5.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html
</IfModule>

Теперь можно запустить apache и проверить, все ли у нас в порядке. Сначала проверим, нет ли у нас ошибок в конфигурации:

# apachectl -t
AH00526: Syntax error on line 15 of /usr/local/etc/apache24/extra/httpd-vhosts.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

У нас ошибка, модуль mod_rewrite не подключен. Чтобы это исправить, раскомментируем в конфиге апача строку

LoadModule rewrite_module libexec/apache24/mod_rewrite.so

Проверяем снова:

# apachectl -t
AH00557: httpd: apr_sockaddr_info_get() failed for websrv.local
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

Снова ошибка, но не критичная, можно работать и с ней, но мы все равно ее исправим. В фале httpd.conf находим строку со значением ServerName и приводим ее к виду:

ServerName websrv.local:80

Сохраняем файл, проверяем конфигурацию:

# apachectl -t
Syntax OK

Все в порядке, можно стартовать apache:

# /usr/local/etc/rc.d/apache24 start

Проверяем, все ли запустилось:

# ps ax | grep httpd
60555 - Ss 0:00.06 /usr/local/sbin/httpd -DNOHTTPACCEPT
60556 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
60557 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
60558 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
60559 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
60560 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT

Если получаете что-то подобное, значит все в порядке. Сейчас можно в браузере набрать http://ip-сервера/ и увидеть страничку с одной единственной надписью:

It works!

Это означает, что веб сервер apache работает, все в порядке.

Настройка frontend сервера nginx

Теперь будем настраивать наш frontend — nginx. Он будет смотреть в интернет и принимать запросы от пользователей, чтобы потом их перенаправлять на apache. Идем в порты и устанавливаем nginx:

# cd /usr/ports/www/nginx-devel
 # make install clean

Выбираем опции:

[X] HTTP_MODULE Enable HTTP module
 [X] HTTP_ADDITION_MODULE Enable http_addition module
 [X] HTTP_DAV_MODULE Enable http_webdav module
 [X] HTTP_FLV_MODULE Enable http_flv module
 [X] HTTP_PERL_MODULE Enable http_perl module
 [X] HTTP_REALIP_MODULE Enable http_realip module
 [X] HTTP_REWRITE_MODULE Enable http_rewrite module
 [X] HTTP_SSL_MODULE Enable http_ssl module
 [X] HTTP_STATUS_MODULE Enable http_stub_status module
 [X] HTTP_SUB_MODULE Enable http_sub module
 [X] WWW Enable html sample files

Добавим nginx в автозагрузку:

# echo 'nginx_enable="YES"' >> /etc/rc.conf

Редактируем конфиг nginx /usr/local/etc/nginx/nginx.conf, приводим его к следующему виду:

worker_processes 1;

pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

sendfile on;
keepalive_timeout 65;
gzip on;

server {
listen 145.152.71.220:80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_send_lowat 12000;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /var/tmp/nginx;
}
}
}

В строке

listen 145.152.71.220:80;

Указываем свой внешний ip адрес. Проверяем настройки nginx:

# nginx -t

Если видите:

nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

значит все в порядке.

Теперь необходимо изменить конфигурацию apache, чтобы он слушал только локальный интерфейс 127.0.0.1, а все внешние запросы принимал nginx и перенаправлял к apache. Меняем в /usr/local/etc/apache24/httpd.conf  строку с параметром Listen, приводим к виду:

Listen 127.0.0.1:80

Перезапускаем apache:

# /usr/local/etc/rc.d/apache24 restart

Запускаем nginx:

# /usr/local/etc/rc.d/nginx start

Наш веб сервер готов. Теперь проверим его работу. Создадим в папке /web/sites/websrv.local/www файл index.php с содержимым

<?php phpinfo(); ?>

Заходим в браузере по адресу http://websrb.local

Если вы видите информацию о версии php и его модулях, значит все настроено и работает.

Установка phpmyadmin на виртуальный хост

Остался последний шаг в нашем деле — установка phpmyadmin. В принципе, wordpress можно установить уже сейчас, но без удобного средства работы с mysql как-то неловко. В будущем оно все равно пригодится. Так что ставим из портов:

# cd /usr/ports/databases/phpmyadmin
# make install clean

По-умолчанию, phpmyadmin устанавливается в папку /usr/local/www/phpMyAdmin, но так как мы для него создали отдельный виртуальный хост, то переносим все содержимое папки туда:

# mv /usr/local/www/phpMyAdmin/* /web/sites/pma53.websrv.local/www/
# chown -R www:www /web/sites/pma53.websrv.local/www/

Создаем папку для конфига:

# mkdir /web/sites/pma53.websrv.local/www/config
# chmod 0750 /web/sites/pma53.websrv.local/www/config && chown www:www /web/sites/pma53.websrv.local/www/config

Дальше идем по адресу http://pma53.websrv.local/setup/ нажимаем «новый сервер» и настраиваем. Не буду подробно на этом останавливаться, там все просто и многократно описано в интернете. Выбираем все значения инсталлятора по умолчанию.

На этом все. Наш web сервер готов. Загружаем скрипты сайта в /web/sites/websrv.local/www и пользуемся.


Помогла статья? Есть возможность отблагодарить автора

Дополнительные материалы по Freebsd

Рекомендую полезные материалы по Freebsd:
  • Установка
  • Настройка
  • Обновление
  • Шлюз
  • Прокси сервер
  • Веб сервер NGINX
  • Веб сервер Apache
Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик.
Базовая настройка Freebsd, которую можно выполнить после установки сервера общего назначения. Представлены некоторые рекомендации по повышению удобства пользования и безопасности.
Описание и нюансы обновления системы Freebsd с помощью утилиты freebsd-update. Показано пошагово на конкретном примере обновления.
Настройка Freebsd шлюза для обеспечения выхода в интернет. Используется ipfw и ядерный нат, dnsmasq в качестве dhcp и dns сервера. Мониторинг сетевой активности с помощью iftop.
Подробная настройка на Freebsd прокси сервера squid + sams2 - панели управления для удобного администрирования.
Настройка максимально быстрого web сервера на базе Freebsd и nginx + php-fpm. Существенный прирост производительности по сравнению с классическим apache.
Настройка web сервера на Freebsd в связке с apache, nginx, php и mysql. Пошаговая установка и настройка каждого компонента.

Комментарии:

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

Ваш e-mail не будет опубликован.