Настройка web сервера на Freebsd 10
В первой и второй частях мы рассмотрели установку и настройку операционной системы Freebsd 10.1 для разворачивания на ней блога wordpress. Теперь предстоит установить и настроить программное обеспечение, необходимое для нашего web сервера.
Содержание:
- 1 Устанавливаем ftp сервер vsftpd
- 2 Установка и настройка Mysql
- 3 Устанавливаем и настраиваем apache24
- 4 Устанавливаем php и phpextensions
- 5 Настройка frontend сервера nginx
- 6 Установка phpmyadmin на виртуальный хост
- 7 Дополнительные материалы по Freebsd
Я буду рассматривать самый простой и быстрый вариант настроек, с небольшим отклонением от дефолтных для нашего удобства. По каждому пункту могут возникать вопросы и нюансы, я не буду касаться всего этого в этой статье.
Устанавливаем 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 и пользуемся.
- web интерфейс для openvpn
- Обновление Freebsd 10.1 до 10.2
- Установка и настройка прокси сервера на Freebsd 10 (squid+sams2)
- Обновление Freebsd 10.2 до 10.3
- Установка Zabbix 3.0 на Freebsd 10
- Пошаговая установка freebsd 11 для чайников
- Обновление Freebsd 10.3 до 11.0
- Как удалить голосовую почту в asterisk
- Мониторинг транков (trunk) в asterisk с помощью zabbix
- traps: asterisk trap invalid opcode