Коли ви отримуєте виділений віртуальний сервер для запуску вашого веб-сайту, велика ймовірність того, що він налаштований для всіх, а не налаштований для максимізації продуктивності роботи веб-сайту.
Зміст[ сховати ]
|
Огляд
Існує ряд проблемних областей, де ми хочемо максимізувати ефективність:
-
Конфігурація Linux
Зазвичай працюють сервіси, які не потрібні, марно витрачаючи пам’ять, яку можна використовувати для більшої кількості з’єднань. -
Конфігурація MySQL
Часто налаштування за замовчуванням базуються на невеликому сервері, ми можемо додати кілька ключових змін, щоб значно збільшити продуктивність. -
Конфігурація Apache
За замовчуванням більшість провайдерів хостингу встановлюють apache майже з кожним встановленим модулем. Немає причин завантажувати модулі, якщо ви ніколи не збираєтесь їх використовувати. -
Конфігурація PHP
Конфігурація PHP за замовчуванням так само роздута, зазвичай встановлюється маса непотрібних додаткових модулів. -
Кеш-код коду PHP
Замість того, щоб дозволяти PHP перекомпілювати сценарії кожного разу, кеш-код операційного коду буде кешувати скомпільовані сценарії в пам'яті для значного підвищення продуктивності. -
Резервні копії
Напевно, слід налаштувати деякі автоматизовані резервні копії, оскільки ваш хостинг-провайдер не збирається робити це за вас. -
Безпека
Звичайно, Linux за замовчуванням достатньо безпечний, але зазвичай є кілька кричущих проблем із безпекою, які ви можете виправити за допомогою декількох швидких налаштувань.
Конфігурація Linux
Ви можете виконати досить багато налаштувань, які будуть дещо відрізнятися залежно від використовуваного вами сервера. Ці налаштування призначені для сервера під управлінням CentOS, але вони повинні працювати для більшості серверів DV.
Вимкніть DNS
Якщо ваш хостинг-провайдер обробляє DNS для вашого домену (ймовірно), ви можете відключити роботу DNS-служби.
відключити dns - - /etc/init.d/названий стоп chmod 644 /etc/init.d/названий
Команда chmod видаляє дозвіл на виконання зі сценарію, зупиняючи його запуск під час запуску.
Вимкніть SpamAssassin
Якщо ви не використовуєте облікові записи електронної пошти на самому сервері, вам не слід турбуватися про запуск антиспамових інструментів. (Також вам слід перевірити Google Apps, набагато краще рішення електронної пошти)
/etc/init.d/psa-spamassassin stop chmod 644 /etc/init.d/psa-spamassassin
Вимкнути xinetd
Процес xinetd містить низку інших процесів, жоден з яких не є корисним для типового веб-сервера.
/etc/init.d/xinetd зупинка 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 зупинка
Ви можете вимкнути його запуск під час запуску, виконавши таку команду:
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:
пропустити мережі
Конфігурація 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
- ioncube-loader
- json
- imap
- ldap
- ncurses
Тодо: Додайте більше інформації тут.
Кеш-код коду 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 = "ім'я користувача" 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.var_size = 1 млн xcache.var_count = 1 xcache.var_slots = 8K 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 = Вимкнено
Тодо: Потрібно трохи розширити це і вказати посилання на xcache у посиланнях.
Резервні копії
Існує дуже мало важливого, ніж автоматичне резервне копіювання вашого веб-сайту. Можливо, ви зможете отримати резервні копії знімків від свого провайдера хостингу, які також дуже корисні, але я вважаю за краще також мати автоматичне резервне копіювання.
Створіть автоматизований сценарій резервного копіювання
Зазвичай я починаю зі створення каталогу / резервних копій, під яким знаходиться каталог / резервні копії / файли. Ви можете налаштувати ці шляхи, якщо хочете.
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 {} \;
Сценарій спочатку створить змінну дати, тому всі файли матимуть однакові імена для однієї резервної копії, а потім скидає базу даних, розігрує веб-файли та створює їх у стилі gzips. Команди пошуку використовуються для видалення будь-яких файлів, старших за 5 днів, оскільки ви не хочете, щоб на вашому диску закінчилося місце.
Зробіть сценарій виконуваним, виконавши таку команду:
chmod u + x /backups/backup.sh
Далі вам потрібно буде призначити його для автоматичного запуску за допомогою cron. Переконайтеся, що ви використовуєте обліковий запис, який має доступ до каталогу резервних копій.
кронтаб -е
Додайте наступний рядок до crontab:
1 1 * * * /backups/backup.sh
Ви можете протестувати сценарій заздалегідь, запустивши його під час входу в обліковий запис користувача. (Я зазвичай запускаю резервні копії як root)
Синхронізація резервних копій за межами сайту за допомогою Rsync
Тепер, коли у вас автоматизовані резервні копії вашого сервера, ви можете синхронізувати їх де-небудь ще за допомогою утиліти rsync. Ви захочете прочитати цю статтю про те, як налаштувати ключі ssh для автоматичного входу: Додайте загальнодоступний ключ SSH на віддалений сервер за допомогою однієї команди
Ви можете перевірити це, запустивши цю команду на машині Linux або Mac в іншому місці (у мене вдома є сервер Linux, де я це запускаю)
rsync -a [email protected]: / резервні копії / файли / * / offsitebackups /
Це займе досить багато часу для запуску з першого разу, але в кінці ваш локальний комп'ютер повинен мати копію каталогу файлів у каталозі / offsitebackups /. (Обов’язково створіть цей каталог перед запуском сценарію)
Ви можете запланувати це, додавши його до рядка crontab:
кронтаб -е
Додайте наступний рядок, який буде запускати rsync щогодини з позначкою 45 хвилин. Ви помітите, що ми використовуємо повний шлях до rsync тут.
45 * * * * / usr / bin / rsync -a [email protected]: / резервні копії / файли / * / offsitebackups /
Ви можете запланувати його роботу в інший час або лише один раз на день. Це насправді залежить від вас.
Зверніть увагу, що існує безліч утиліт, які дозволять вам синхронізувати через ssh або ftp. Вам не потрібно використовувати rsync.
Безпека
Перше, що ви хочете зробити, це переконатися, що у вас є звичайний обліковий запис користувача для використання через ssh, і переконайтесь, що ви можете використовувати su для переходу на root. Дуже погана ідея дозволяти прямий вхід для root через ssh.
Вимкнути корінний вхід через SSH
Відредагуйте файл / etc / ssh / sshd_config і знайдіть такий рядок:
#PermitRootLogin так
Змініть цей рядок так, щоб виглядати так:
No PermitRootLogin
Переконайтеся, що у вас є звичайний обліковий запис користувача, і ви можете виконувати права root, перш ніж вносити зміни, інакше ви можете заблокувати себе.
Вимкніть SSH версії 1
Насправді немає причин використовувати щось інше, ніж SSH версії 2, оскільки це більш безпечно, ніж попередні версії. Відредагуйте файл / etc / ssh / sshd_config і знайдіть такий розділ:
# Протокол 2,1 Протокол 2
Переконайтеся, що ви використовуєте лише протокол 2, як показано.
Перезапустіть сервер SSH
Тепер вам потрібно буде перезапустити сервер SSH, щоб це набуло чинності.
/etc/init.d/sshd перезапустити
Перевірте наявність відкритих портів
Ви можете використати таку команду, щоб побачити, які порти прослуховує сервер:
netstat -an | grep СЛУХАЙ
Насправді у вас не повинно бути нічого прослуховування, крім портів 22, 80 і, можливо, 8443 для plesk.
Налаштуйте брандмауер
Ви можете додатково налаштувати брандмауер iptables, щоб блокувати більше з'єднань. Наприклад, я зазвичай блокую доступ до будь-яких інших портів, крім моєї робочої мережі. Якщо у вас є динамічна IP-адреса, ви хочете уникнути цієї опції.
Якщо ви вже виконували всі кроки, наведені в цьому посібнику, можливо, не потрібно також додавати брандмауер до суміші, але добре розуміти ваші варіанти.
Дивіться також
- Використання Iptables в Linux