Когда вы получаете выделенный виртуальный сервер для запуска своего сайта, есть хорошие шансы, что он настроен для всех и не настроен на максимальную производительность для запуска веб-сайта.
содержание[скрывать]
|
обзор
Существует ряд проблемных областей, где мы хотим максимизировать производительность:
- Конфигурация Linux Обычно работают службы, которые не нужны, теряя память, которая может использоваться для большего количества подключений.
- Конфигурация MySQL Часто настройки по умолчанию основаны на небольшом сервере, мы можем добавить несколько ключевых изменений, чтобы увеличить производительность.
- Конфигурация Apache По умолчанию большинство хостинг-провайдеров устанавливают apache практически с каждым установленным модулем. Нет причин загружать модули, если вы их никогда не будете использовать.
- Настройка PHP Конфигурация PHP по умолчанию аналогично раздута, обычно имеется тонна ненужных дополнительных модулей.
- Кэш PHP-кода Вместо того, чтобы позволить PHP перекомпилировать сценарии каждый раз, кеш-код операции кэширует скомпилированные сценарии в памяти для огромного повышения производительности.
- Резервные копии Возможно, необходимо настроить некоторые автоматические резервные копии, так как ваш хостинг-провайдер не собирается делать это за вас.
- Безопасность Конечно, Linux по умолчанию достаточно безопасен, но обычно есть некоторые вопиющие проблемы безопасности, которые вы можете исправить несколькими быстрыми настройками.
Конфигурация Linux
Существует множество настроек, которые вы можете сделать, которые будут немного отличаться в зависимости от используемого вами сервера. Эти настройки предназначены для сервера, работающего с CentOS, но они должны работать на большинстве DV-серверов.
Отключить DNS
Если ваш хостинг-провайдер обрабатывает DNS для вашего домена (скорее всего), вы можете отключить службу DNS.
disable 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
Включить кеш запросов
Откройте файл /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:
skip-networking
Конфигурация Apache
Откройте файл httpd.conf, который часто можно найти в файле /etc/httpd/conf/httpd.conf.
Найдите строку, которая выглядит так:
Timeout 120
И измените это на это:
Timeout 20
Теперь найдите раздел, который включает эти строки, и настройте на что-то подобное:
StartServers 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000
Конфигурация PHP
Одна из вещей, которые следует учитывать при настройке сервера на платформе PHP, заключается в том, что каждый поток apache загружает PHP в отдельное место в памяти. Это означает, что если неиспользуемый модуль добавляет 256k памяти к 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]; Change xcache.size to tune the size of the opcode cache xcache.size = 16M xcache.shm_scheme = 'mmap' xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0; Change xcache.var_size to adjust the size of variable cache xcache.var_size = 1M xcache.var_count = 1 xcache.var_slots = 8K xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 xcache.test = Off xcache.readonly_protection = On xcache.mmap_path = '/tmp/xcache' xcache.coredump_directory = '' xcache.cacher = On xcache.stat = On xcache.optimizer = Off
Todo: нужно немного расширить это и связать с xcache в ссылках.
Резервные копии
Там очень мало важнее, чем автоматическое резервное копирование вашего сайта. Вы можете получить резервные копии моментальных снимков у своего хостинг-провайдера, которые также очень полезны, но я также предпочитаю автоматическое резервное копирование.
Создать автоматический сценарий резервного копирования
Обычно я начинаю с создания каталога / backups с подкаталогом / backups / files. Вы можете настроить эти пути, если хотите.
mkdir -p /backups/files
Теперь создайте скрипт backup.sh внутри каталога резервных копий:
vi /backups/backup.sh
Добавьте в файл следующие данные: при необходимости измените пути и пароль mysqldump:
#!/bin/sh THEDATE=`date +%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 {};
Сценарий сначала создаст переменную даты, так что все файлы будут одинаковыми для одной резервной копии, затем сбрасывают базу данных, выгружают веб-файлы и gzips их. Команды find используются для удаления любых файлов старше 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.
Отключить вход в root через SSH
Отредактируйте файл / etc / ssh / sshd_config и найдите следующую строку:
#PermitRootLogin yes
Измените эту строку так:
PermitRootLogin no
Убедитесь, что у вас есть обычная учетная запись пользователя и вы можете выполнить ее до root, прежде чем выполнять это изменение, иначе вы можете заблокировать себя.
Отключить SSH версию 1
Нет причин использовать ничего, кроме SSH версии 2, поскольку он более безопасен, чем предыдущие версии. Отредактируйте файл / etc / ssh / sshd_config и найдите следующий раздел:
#Protocol 2,1 Protocol 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