Когда вы получаете выделенный виртуальный сервер для запуска своего веб-сайта, велики шансы, что он настроен для всех, а не настроен для максимальной производительности для запуска веб-сайта.
Содержаниею скрывать щ
|
Обзор
Есть ряд проблемных областей, в которых мы хотим максимизировать производительность:
-
Конфигурация 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 удаляет разрешение на выполнение из сценария, останавливая его запуск при запуске.
Отключить SpamAssassin
Если вы не используете учетные записи электронной почты на самом сервере, вам не нужно запускать инструменты защиты от спама. (Также вам следует попробовать 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] запрос-кеш-тип = 1 размер кэша запроса = 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 в отдельном месте в памяти. Это означает, что если неиспользуемый модуль добавляет к PHP 256 КБ памяти, через 40 потоков apache вы тратите 10 МБ памяти.
Удалите ненужные модули PHP
Вам нужно будет найти свой файл php.ini, который обычно находится в /etc/php.ini (обратите внимание, что в некоторых дистрибутивах будет каталог /etc/php.d/ с несколькими файлами .ini, по одному на каждый модуль.
Закомментируйте любые строки loadmodule с этими модулями:
- odbc
- snmp
- pdo
- odbc pdo
- mysqli
- ионный куб-загрузчик
- json
- imap
- ldap
- ncurses
Todo: Добавьте сюда больше информации.
Кэш кода операции PHP
Есть несколько кешей опкодов, которые вы можете использовать, включая APC, eAccelerator и Xcache, последний из которых я предпочитаю лично из-за стабильности.
Загрузите xcache и извлеките его в каталог, а затем выполните следующие команды из исходного каталога xcache:
phpize ./configure --enable-xcache сделать сделать установку
Откройте файл 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 = 16 МБ xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8 КБ xcache.ttl = 0 xcache.gc_interval = 0 ; Измените xcache.var_size, чтобы настроить размер кеша переменных xcache.var_size = 1M xcache.var_count = 1 xcache.var_slots = 8 КБ xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 xcache.test = Выкл. xcache.readonly_protection = Вкл. xcache.mmap_path = "/ tmp / xcache" xcache.coredump_directory = "" xcache.cacher = Вкл. xcache.stat = Вкл. xcache.optimizer = Выкл.
Todo: нужно немного расширить это и добавить ссылку на xcache в справочниках.
Резервные копии
Нет ничего важнее, чем автоматическое резервное копирование вашего веб-сайта. Вы можете получить резервные копии моментальных снимков у своего хостинг-провайдера, что также очень полезно, но я также предпочитаю автоматическое резервное копирование.
Создать сценарий автоматического резервного копирования
Обычно я начинаю с создания каталога / backups с каталогом / backups / files под ним. Вы можете изменить эти пути, если хотите.
mkdir -p / резервные копии / файлы
Теперь создайте сценарий 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
найти / резервные копии / файлы / сайт * -mtime +5 -exec rm {} \;
найти / резервные копии / файлы / db * -mtime +5 -exec rm {} \;
Сценарий сначала создаст переменную даты, чтобы все файлы были названы одинаково для одной резервной копии, затем выгружает базу данных, обрабатывает веб-файлы и архивирует их. Команды find используются для удаления любых файлов старше 5 дней, так как вы не хотите, чтобы на вашем диске закончилось свободное место.
Сделайте скрипт исполняемым, выполнив следующую команду:
чмод у+с /баккупс/бачкуп.ш
Затем вам нужно назначить его для автоматического запуска cron. Убедитесь, что вы используете учетную запись, у которой есть доступ к каталогу резервных копий.
crontab -e
Добавьте в crontab следующую строку:
1 1 * * * /баккупс/бачкуп.ш
Вы можете протестировать сценарий заранее, запустив его, войдя в учетную запись пользователя. (Обычно я запускаю резервные копии как 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 нет
Прежде чем вносить это изменение, убедитесь, что у вас есть учетная запись обычного пользователя и вы можете получить root-права с помощью su, иначе вы можете заблокировать себя.
Отключить SSH версии 1
На самом деле нет причин использовать что-либо, кроме SSH версии 2, поскольку он более безопасен, чем предыдущие версии. Отредактируйте файл / etc / ssh / sshd_config и найдите следующий раздел:
#Protocol 2,1 Протокол 2
Убедитесь, что вы используете только Протокол 2, как показано.
Перезагрузите SSH-сервер
Теперь вам нужно перезапустить SSH-сервер, чтобы изменения вступили в силу.
/etc/init.d/sshd перезапуск
Проверить наличие открытых портов
Вы можете использовать следующую команду, чтобы узнать, какие порты прослушивает сервер:
netstat -an | grep СЛУШАТЬ
У вас действительно не должно быть ничего, кроме портов 22, 80 и, возможно, 8443 для plesk.
Настроить брандмауэр
При желании вы можете настроить брандмауэр iptables, чтобы блокировать больше подключений. Например, я обычно блокирую доступ к любым другим портам, кроме моей рабочей сети. Если у вас динамический IP-адрес, вам следует избегать этого варианта.
Если вы уже выполнили все шаги, описанные в этом руководстве, вероятно, нет необходимости также добавлять брандмауэр к этому миксу, но хорошо понимать ваши варианты.
Смотрите также
- Использование Iptables в Linux