Настройка выделенного виртуального веб-сервера
Когда вы получаете выделенный виртуальный сервер для запуска вашего сайта, велика вероятность того, что он настроен для всех и не настроен для максимизации производительности для запуска сайта.
содержание[скрывать]
|
обзор
Есть ряд проблемных областей, где мы хотим максимизировать производительность:
- Конфигурация Linux
Обычно работают запущенные сервисы, которые не нужны, тратя память, которую можно использовать для большего количества соединений. - Конфигурация MySQL
Часто настройки по умолчанию основаны на небольшом сервере, мы можем добавить несколько ключевых изменений, чтобы значительно повысить производительность. - Конфигурация Apache
По умолчанию большинство хостинг-провайдеров устанавливают apache практически с каждым установленным модулем. Нет причин загружать модули, если вы никогда не собираетесь их использовать. - Конфигурация PHP
Конфигурация PHP по умолчанию аналогично раздутая, обычно устанавливается множество ненужных дополнительных модулей. - Кэш опкода PHP
Вместо того, чтобы разрешать PHP перекомпилировать скрипты каждый раз, кэш кода операции будет кэшировать скомпилированные скрипты в памяти для огромного повышения производительности.. - Резервные копии
Вероятно, следует настроить автоматическое резервное копирование, так как ваш хостинг-провайдер не собирается делать это за вас. - Безопасность
Конечно, по умолчанию Linux достаточно безопасен, но обычно есть некоторые явные проблемы с безопасностью, которые можно исправить с помощью нескольких быстрых настроек..
Конфигурация Linux
Вы можете сделать множество настроек, которые будут немного отличаться в зависимости от сервера, который вы используете. Эти настройки предназначены для сервера под управлением CentOS, но они должны работать для большинства серверов DV..
Отключить DNS
Если ваш хостинг-провайдер обрабатывает DNS для вашего домена (скорее всего), то вы можете отключить запуск службы DNS.
отключить dns /etc/init.d/named stop chmod 644 /etc/init.d/named
Команда chmod удаляет разрешение на выполнение из скрипта, останавливая его запуск при запуске.
Отключить SpamAssassain
Если вы не используете учетные записи электронной почты на самом сервере, вам не следует беспокоиться о запуске средств защиты от спама. (Также вы должны проверить Google Apps, гораздо лучшее решение для электронной почты)
/etc/init.d/psa-spamassassin stop chmod 644 /etc/init.d/psa-spamassassin
Отключить xinetd
Процесс xinetd содержит ряд других процессов, ни один из которых не подходит для типичного веб-сервера..
/etc/init.d/xinetd stop chmod 644 /etc/init.d/xinetd
Ограничить использование памяти Plesk
Если вы используете панель plesk, вы можете заставить ее использовать меньше памяти, добавив файл опций.
vi /usr/local/psa/admin/conf/httpsd.custom.include
Добавьте следующие строки в файл:
MinSpareServers 1 MaxSpareServers 1 StartServers 1 MaxClients 5
Обратите внимание, что эта опция работает на серверах MediaTemple DV, но не проверялась ни на каких других. (Ссылки)
Отключить или отключить Plesk (необязательно)
Если вы используете Plesk только один раз в год, у вас будет очень мало причин вообще его запускать. Обратите внимание, что этот шаг не является обязательным, и немного более продвинутым.
Выполните следующую команду, чтобы отключить plesk:
/etc/init.d/psa stop
Вы можете отключить его запуск при запуске, выполнив следующую команду:
chmod 644 /etc/init.d/psa
Обратите внимание, что если вы отключите его, то вы не сможете запустить его вручную, не вернув обратно права доступа к файлу (chmod u + x).
Конфигурация MySQL
Включить Query Cache
Откройте ваш файл /etc/my.cnf и добавьте следующие строки в раздел [mysqld] следующим образом:
[mysqld] query-cache-type = 1 query-cache-size = 8M
Вы можете добавить больше памяти в кеш запросов, если хотите, но не используйте слишком много.
Отключить TCP / IP
Удивительное количество хостов по умолчанию обеспечивает доступ к MySQL по TCP / IP, что не имеет смысла для веб-сайта. Вы можете выяснить, прослушивает ли mysql TCP / IP, выполнив следующую команду:
netstat -an | grep 3306
Чтобы отключить, добавьте следующую строку в ваш файл /etc/my.cnf:
скип-сетей
Конфигурация Apache
Откройте файл httpd.conf, который часто находится в /etc/httpd/conf/httpd.conf
Найдите строку, которая выглядит следующим образом:
Тайм-аут 120
И изменить это на это:
Тайм-аут 20
Теперь найдите раздел, который включает эти строки, и настройте что-то подобное:
StartServers 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000
Конфигурация PHP
При настройке сервера на платформе PHP нужно помнить, что каждый отдельный поток Apache будет загружать PHP в отдельном месте в памяти. Это означает, что если неиспользуемый модуль добавляет 256 КБ памяти в PHP, в 40 потоках Apache вы тратите 10 МБ памяти..
Удалить ненужные модули PHP
Вам нужно найти файл php.ini, который обычно находится в /etc/php.ini (обратите внимание, что в некоторых дистрибутивах будет каталог /etc/php.d/ с несколькими файлами .ini, по одному на каждый модуль.
Закомментируйте любые строки loadmodule с этими модулями:
- ODBC
- SNMP
- п.д.о.
- odbc pdo
- MySQLi
- IonCube-погрузчик
- JSON
- IMAP
- LDAP
- Ncurses
Todo: Добавить больше информации здесь.
Кэш опкода PHP
Вы можете использовать несколько кэшей кода операции, включая APC, eAccelerator и Xcache, последний из которых является моим личным предпочтением из-за стабильности.
Загрузите xcache и распакуйте его в каталог, а затем выполните следующие команды из исходного каталога xcache:
phpize ./configure --enable-xcache make make install
Откройте файл php.ini и добавьте новый раздел для xcache. Вам нужно будет отрегулировать пути, если ваши модули php загружены откуда-то еще.
vi /etc/php.ini
Добавьте следующий раздел в файл:
[xcache-common] zend_extension = /usr/lib/php/modules/xcache.so [xcache.admin] xcache.admin.user = "myusername" xcache.admin.pass = "putanmd5hashhere" [xcache]; Измените xcache.size, чтобы настроить размер кэша кода операции. Xcache.size = 16M xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0; Измените xcache.var_size, чтобы отрегулировать размер кэша переменных. Xcache.mmap_path = "/ tmp / xcache" xcache.coredump_directory = "" xcache.cacher = вкл. Xcache.stat = вкл. Xcache.optimizer = выкл.
Todo: нужно немного расширить это и дать ссылку на xcache в ссылках.
Резервные копии
Это очень мало важнее, чем автоматическое резервное копирование вашего сайта. Вы можете получить резервные копии снимков от своего хостинг-провайдера, что также очень полезно, но я предпочитаю также иметь автоматические резервные копии.
Создать сценарий автоматического резервного копирования
Я обычно начинаю с создания каталога / backups с каталогом / backups / files под ним. Вы можете настроить эти пути, если хотите.
mkdir -p / backups / files
Теперь создайте скрипт backup.sh внутри каталога резервных копий:
vi /backups/backup.sh
Добавьте следующее в файл, корректируя пути и пароль mysqldump по мере необходимости:
#! / bin / sh THEDATE = "дата +% d% m% y% H% M" mysqldump -uadmin -pPASSWORD DATABASENAME> /backups/files/dbbackup$THEDATE.bak tar -cf / backups / files / sitebackup $ THEDATE .tar / var / www / vhosts / my-website-path / httpdocs gzip /backups/files/sitebackup$THEDATE.tar find / backups / files / site * -mtime +5 -exec rm \; find / backups / files / db * -mtime +5 -exec rm \;
Сначала сценарий создаст переменную даты, поэтому все файлы будут названы одинаково для одной резервной копии, затем выгрузит базу данных, разберет веб-файлы и скопирует их. Команды поиска используются для удаления любых файлов старше 5 дней, так как вы не хотите, чтобы на диске не хватало места..
Сделайте скрипт исполняемым, выполнив следующую команду:
chmod u + x /backups/backup.sh
Далее вам нужно назначить его для автоматического запуска cron. Убедитесь, что вы используете учетную запись, которая имеет доступ к каталогу резервных копий.
crontab -e
Добавьте следующую строку в crontab:
1 1 * * * /backups/backup.sh
Вы можете проверить скрипт заранее, запустив его во время входа в учетную запись пользователя. (Я обычно запускаю резервные копии как root)
Синхронизация резервных копий вне сайта с Rsync
Теперь, когда у вас есть автоматическое резервное копирование вашего сервера, вы можете синхронизировать их где-то еще с помощью утилиты rsync. Вы захотите прочитать эту статью о том, как настроить ssh-ключи для автоматического входа в систему: добавьте открытый SSH-ключ к удаленному серверу одной командой
Вы можете проверить это, выполнив эту команду на компьютере с Linux или Mac в другом месте (у меня дома есть сервер Linux, где я и запускаю это)
rsync -a [email protected]: / backups / files / * / offsitebackups /
Это займет много времени для запуска в первый раз, но в конце ваш локальный компьютер должен иметь копию каталога файлов в каталоге / offsitebackups /. (Убедитесь, что создали этот каталог перед запуском скрипта)
Вы можете запланировать это, добавив его в строку crontab:
crontab -e
Добавьте следующую строку, которая будет запускать rsync каждый час с отметкой 45 минут. Вы заметите, что мы используем полный путь к rsync здесь.
45 * * * * / usr / bin / rsync -a [email protected]: / backups / files / * / offsitebackups /
Вы можете запланировать его запуск в другое время или только один раз в день. Это действительно зависит от вас.
Обратите внимание, что существует множество утилит, которые позволят вам синхронизироваться через ssh или ftp. Вам не нужно использовать rsync.
Безопасность
Первое, что вы хотите сделать, это убедиться, что у вас есть обычная учетная запись пользователя для использования через ssh, и убедитесь, что вы можете использовать su для переключения в root. Это очень плохая идея разрешить прямой вход в систему для root через ssh.
Отключить рут-логин через SSH
Отредактируйте файл / etc / ssh / sshd_config и найдите следующую строку:
#PermitRootLogin да
Измените эту строку, чтобы она выглядела так:
PermitRootLogin нет
Убедитесь, что у вас есть обычная учетная запись пользователя и вы можете войти в систему, прежде чем вносить эти изменения, в противном случае вы можете заблокировать себя.
Отключить SSH версии 1
На самом деле нет никакой причины использовать что-либо кроме SSH версии 2, так как это более безопасно, чем предыдущие версии. Отредактируйте файл / etc / ssh / sshd_config и найдите следующий раздел:
# Протокол 2,1 Протокол 2
Убедитесь, что вы используете только протокол 2, как показано.
Перезагрузите SSH сервер
Теперь вам нужно перезапустить сервер SSH, чтобы это вступило в силу.
/etc/init.d/sshd restart
Проверить наличие открытых портов
Вы можете использовать следующую команду, чтобы увидеть, какие порты прослушивает сервер:
netstat -an | grep LISTEN
Вы действительно не должны слушать ничего кроме портов 22, 80 и, возможно, 8443 для plesk.
Настройте брандмауэр
Основная статья: Использование Iptables в Linux
При желании вы можете настроить брандмауэр iptables для блокировки большего количества соединений. Например, я обычно блокирую доступ к любым другим портам, кроме как из моей рабочей сети. Если у вас есть динамический IP-адрес, вы хотите, чтобы избежать этой опции.
Если вы уже выполнили все шаги, описанные в этом руководстве, возможно, нет необходимости добавлять брандмауэр в микшер, но хорошо понимать ваши варианты.
Смотрите также
- Использование Iptables в Linux
Рекомендации
- Оптимизация вашего DV сервера (mediatemple.net)
- XCache