Домашня » як » Налаштування виділеного віртуального веб-сервера

    Налаштування виділеного віртуального веб-сервера

    Коли ви отримуєте спеціальний віртуальний сервер для запуску веб-сайту, є хороші шанси, що він налаштований для всіх, а не налаштований для максимальної продуктивності для запуску веб-сайту.

    Зміст

    [приховати]

    • 1 Огляд
    • 2 Конфігурація Linux
      • 2.1 Вимкнути DNS
      • 2.2 Вимкнення SpamAssassain
      • 2.3 Вимкнути xinetd
      • 2.4 Обмеження використання пам'яті Plesk
      • 2.5 Вимкнути або вимкнути Plesk (необов'язково)
    • 3 Конфігурація MySQL
      • 3.1 Увімкнути кеш запитів
      • 3.2 Вимкніть TCP / IP
    • 4 Конфігурація Apache
    • 5 Конфігурація PHP
      • 5.1 Видалити непотрібні модулі PHP
      • 5.2 PHP Opcode Cache
    • 6 Резервні копії
      • 6.1 Створення автоматизованого сценарію резервного копіювання
      • 6.2 Синхронізація резервних копій поза сайту з Rsync
    • 7 Безпека
      • 7.1 Вимкнення кореневого входу через SSH
      • 7.2 Вимкнення SSH версії 1
      • 7.3 Перезапустіть SSH сервер
      • 7.4 Перевірка відкритих портів
      • 7.5 Налаштування брандмауера
    • 8 Див
    • 9 Посилання

    Огляд

    Існує ряд проблемних областей, в яких ми хочемо максимізувати продуктивність:

    • Конфігурація Linux
      Зазвичай працюють служби, які не повинні бути, витрачаючи пам'ять, яка може бути використана для більшої кількості з'єднань.
    • Конфігурація MySQL
      Часто параметри за промовчанням засновані на невеликому сервері, ми можемо додати кілька ключових змін, щоб значно збільшити продуктивність.
    • Конфігурація Apache
      За замовчуванням більшість хостинг-провайдерів встановлюють apache з майже кожним встановленим модулем. Немає жодних причин завантажувати модулі, якщо ви їх ніколи не будете використовувати.
    • Конфігурація PHP
      Конфігурація за замовчуванням PHP аналогічно роздуті, як правило, є тонну непотрібних додаткових модулів.
    • PHP Opcode Cache
      Замість того, щоб дозволити PHP повторно компілювати скрипти кожен раз, кеш коду операцій кешуватиме компільовані сценарії в пам'яті для збільшення продуктивності.
    • Резервні копії
      Можливо, слід встановити деякі автоматичні резервні копії, оскільки ваш хостинг-провайдер не зробить це за вас.
    • Безпека
      Звичайно, за умовчанням Linux є достатньо безпечним, але зазвичай деякі проблеми з безпекою, які можна виправити за допомогою декількох швидких налаштувань.

    Конфігурація Linux

    Ви можете скористатися цілим рядом налаштувань, які будуть дещо відрізнятися залежно від використовуваного сервера. Ці налаштування призначені для сервера CentOS, але вони повинні працювати для більшості серверів DV.

    Вимкнути DNS

    Якщо ваш хостинг-провайдер обробляє DNS для вашого домену (ймовірно), тоді ви можете вимкнути роботу служби DNS.

    вимкнути dns /etc/init.d/named стоп chmod 644 /etc/init.d/named

    Команда chmod видаляє з скрипта дозвіл на виконання, зупиняючи його при запуску.

    Вимкнути SpamAssassain

    Якщо ви не використовуєте облікові записи електронної пошти на самому сервері, не варто турбуватися про використання антиспам-інструментів. (Також потрібно перевірити Служби Google, набагато краще рішення електронної пошти)

    /etc/init.d/psa-spamassassin стоп 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 лише раз на рік, дуже мало підстав залишати його працювати взагалі. Зауважте, що цей крок є абсолютно необов'язковим і трохи більш просунутим.

    Щоб вимкнути плеск, виконайте таку команду:

    /etc/init.d/psa зупинка

    Ви можете вимкнути його при запуску за допомогою наступної команди:

    chmod 644 /etc/init.d/psa

    Зауважте, що якщо ви вимкнете його, ви не зможете запустити його вручну, не змінюючи права доступу до файлу назад (chmod u + x).

    Конфігурація MySQL

    Увімкнути кеш запитів

    Відкрийте файл /etc/my.cnf і додайте наступні рядки у ваш [mysqld] розділ так:

    [mysqld] query-cache-type = 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

    Тепер знайдіть розділ, який включає ці рядки, і налаштуйте на щось подібне:

    Початоксервери 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000

    Конфігурація PHP

    Одна з речей, про яку слід пам'ятати при налаштуванні сервера на платформі PHP, полягає в тому, що кожен потік apache завантажуватиме PHP в окремому місці в пам'яті. Це означає, що якщо невикористаний модуль додає 256 кб пам'яті в PHP, то через 40 потоків апаша ви витрачаєте 10 Мб пам'яті.

    Видалити непотрібні модулі PHP

    Потрібно знайти файл php.ini, який зазвичай знаходиться у файлі /etc/php.ini (Зауважте, що на деяких дистрибутивах каталог /etc/php.d/ з кількома файлами .ini, по одному для кожного модуля.

    Коментуйте будь-які рядки модуля навантаження з цими модулями:

    • odbc
    • snmp
    • pdo
    • odbc pdo
    • mysqli
    • ioncube-навантажувач
    • json
    • imap
    • ldap
    • ncurses

    Todo: Додайте більше інформації тут.

    PHP Opcode Cache

    Існує декілька кеш коду операцій, які можна використовувати, включаючи APC, eAccelerator і Xcache, останній з яких є моїм особистим уподобанням через стабільність.

    Завантажте xcache і розпакуйте його в каталог, а потім запустіть наступні команди з каталогу xcache:

    phpize ./configure --enable-xcache зробити 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 = "ім'я_користувача" 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 = 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 = На 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 / мій-сайт-шлях / httpdocs gzip /backups/files/sitebackup$THEDATE.tar / backup / files / site * -mtime +5 -exec rm  \ t find / backups / files / db * -mtime +5 -exec rm  \ t

    Скрипт спочатку створить змінну дати, так що всі файли будуть названі однаковими для однієї резервної копії, а потім скидає базу даних, згортає веб-файли та їх розгортає. Команди пошуку використовуються для видалення будь-яких файлів старше 5 днів, оскільки ви не хочете, щоб у вашому диску залишилося вільне місце.

    Зробіть скрипт виконуваним, виконавши таку команду:

    chmod u + x /backups/backup.sh

    Далі вам доведеться призначити його для автоматичного запуску cron. Переконайтеся, що ви використовуєте обліковий запис, який має доступ до каталогу резервних копій.

    crontab -e

    Додайте до crontab наступний рядок:

    1 1 * * * /backups/backup.sh

    Ви можете перевірити сценарій заздалегідь, запустивши його під час входу до облікового запису користувача. (Зазвичай резервні копії виконуються як кореневі)

    Синхронізація резервних копій поза сайту з Rsync

    Після запуску автоматизованого резервного копіювання вашого сервера можна синхронізувати їх у іншому місці за допомогою утиліти rsync. Ви хочете прочитати цю статтю про те, як налаштувати ключі SSH для автоматичного входу: додати ключ SSH до віддаленого сервера в одній команді

    Ви можете перевірити це, запустивши цю команду на машині linux або Mac в іншому місці (у мене вдома сервер linux, де я запускаю)

    rsync -a [email protected]: / резервні копії / файли / * / offsitebackups /

    Це займе досить багато часу для запуску в перший раз, але в кінці вашого локальний комп'ютер повинен мати копію каталогу файлів у каталозі / offsitebackups /. (Не забудьте створити цей каталог перед запуском сценарію)

    Ви можете запланувати це, додавши його до лінії crontab:

    crontab -e

    Додайте наступний рядок, який запускатиме rsync кожну годину на позначці 45 хвилин. Ви помітите, що ми використовуємо повний шлях до rsync тут.

    45 * * * * / usr / bin / rsync -a [email protected]: / резервні копії / файли / * / offsitebackups /

    Ви можете запланувати його для запуску в інший час або лише один раз на день. Це дійсно залежить від вас.

    Зауважте, що існує багато утиліт, які дозволять синхронізувати через ssh або ftp. Ви не повинні використовувати rsync.

    Безпека

    Перше, що ви хочете зробити, це переконатися, що у вас є звичайний обліковий запис користувача для використання через ssh, і переконайтеся, що ви можете використовувати su для перемикання на root. Це дуже погана ідея, щоб дозволити прямий вхід для кореня над ssh.

    Вимкнути кореневе вхід за SSH

    Відредагуйте файл / etc / ssh / sshd_config і знайдіть наступний рядок:

    #PermitRootLogin так

    Змініть цей рядок так:

    PermitRootLogin no

    Переконайтеся, що у вас є звичайний обліковий запис користувача, і до того, як ви зробите цю зміну, ви можете закріпитися.

    Вимкнути версію SSH 1

    Насправді немає ніяких причин використовувати що-небудь, крім SSH версії 2, оскільки це більш безпечно, ніж попередні версії. Відредагуйте файл / etc / ssh / sshd_config та знайдіть наступний розділ:

    Протокол 2.1 Протокол 2

    Переконайтеся, що використовується тільки протокол 2, як показано на малюнку.

    Перезапустіть SSH-сервер

    Тепер вам потрібно перезапустити сервер SSH, щоб це стало ефективним.

    /etc/init.d/sshd перезавантаження

    Перевірте відкриті порти

    Ви можете скористатися наступною командою, щоб побачити, на яких портах прослуховується сервер:

    netstat -an | grep LISTEN

    Ви дійсно не повинні мати нічого, крім портів 22, 80 і, можливо, 8443 для плеска.

    Налаштуйте брандмауер

    Основна стаття: Використання Iptables на Linux

    За бажанням можна встановити брандмауер iptables, щоб заблокувати більше з'єднань. Наприклад, я зазвичай блокую доступ до будь-яких інших портів, крім моєї робочої мережі. Якщо ви маєте динамічну IP-адресу, вам слід уникнути цього.

    Якщо ви досі дотримувалися всіх кроків у цьому посібнику, можливо, не потрібно додавати брандмауер до міксу, але добре розуміти ваші параметри.

    Дивіться також

    • Використання Iptables на Linux

    Список літератури

    • Оптимізація сервера DV (mediatemple.net)
    • XCache