piterskiy

Fast KVM VPS 2017 (Frontend Nginx 1.11.10 + Backend Apache 2

Feb 26th, 2017
22,987
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ##############################################################################
  2. ============= Fast KVM VPS 2017 (Frontend Nginx 1.11.10 + Backend Apache 2.4 PHP (5/7) + VestaCP) ===========
  3.  
  4. Debian 8.7 PHP 7.0.16-1 Apache 2.4.10 Nginx 1.11.10 https://habrahabr.ru/post/282554/
  5. Linux 4.9.0-0.bpo.1-amd64 #1 SMP Debian 4.9.2-2~bpo8+1 (2017-01-26) x86_64 GNU/Linux
  6. (Работает все также и на php5* Apache 2.2.*)
  7.  
  8. #  Test VPS !KVM  1x1024RAM 20Gb SSD
  9. ## ab -n 10000 -c 10000 http://site.com/ (wordpress)
  10. #Document Length:        162 bytes
  11. #Concurrency Level:      10000
  12. #Time taken for tests:   1.239 seconds
  13. #Complete requests:      10000
  14. #Failed requests:        0
  15. #Total transferred:      3200000 bytes
  16. #HTML transferred:       1620000 bytes
  17. #Requests per second:    8071.25 [#/sec] (mean)
  18. #Time per request:       1238.965 [ms] (mean)
  19. #Time per request:       0.124 [ms] (mean, across all concurrent requests)
  20. #Transfer rate:          2522.27 [Kbytes/sec] received
  21. #Connection Times (ms)
  22. #             min  mean[+/-sd] median   max
  23. #~Total:        782  945 106.2    935    1132
  24. #
  25. =============================Инструкци по установке ( без больших и средних бубнов )===========================================================
  26.  
  27. Для работы качаем https://www.bitvise.com/ssh-client-download  (SSH+FTP) для полноценной работы.
  28.  
  29. Условимся, что nginx будет слушать 80 порты, а перекидывать будет на 81 порт, который и будет слушать apache.
  30.  
  31. Установка php 7 на Debian (если надо) https://rusadmin.biz/web-server/ustanovka-php-7-0-5-na-debian/
  32.  
  33. APACHE : Файлы настроек подключений с расширением .conf в директории сервера /etc/apache2 и подпапки, если include прописан и незакоментирован в основном файле apache2.conf
  34. NGNIX  : Файлы настроек подключений с расширением .conf в директории сервера /etc/nginx и подпапки, если include прописан и незакоментирован в основном файле nginx.conf
  35.  
  36. #### 1.  Настраиваем APACHE ##########
  37.  
  38. В нашем случае на сервере установлена Vesta CP.
  39. 1.Настройки сайтов расположены /home/admin/conf/web/apache2.conf (Этот путь прописан в файле vesta.conf в папке /etc/apache2/conf.d)
  40. Меняем <VirtualHost *:*>  на <VirtualHost *:81>
  41. для всех указанных в нем сайтов
  42. 2. Меняем также и в шаблоне добавления сайтов, в весте
  43. В шаблонах Vesta  /usr/local/vesta/data/templates/web/apache2
  44.  
  45. В файле default.tpl  (Если у Вас другой, выбирайте его. Смотреть в Veste в Packages в настройках Вашего профиля)
  46.  
  47. 3. В файле /etc/apache2/conf.d/*ип сервера*.conf заменяем все на:
  48.  
  49. Для апач 2.2*
  50. Listen 127.0.0.1:81
  51. Listen вставить-ip-вашего-сервера:81
  52. NameVirtualHost 127.0.0.1:81
  53. NameVirtualHost вставить-ip-вашего-сервера:81
  54. Listen вставить-ip-вашего-сервера:8443
  55.  
  56.  
  57. Для апач 2.4*
  58. Listen 127.0.0.1:81
  59. Listen вставить-ip-вашего-сервера:81
  60. Listen вставить-ip-вашего-сервера:8443
  61.  
  62.  
  63. 4. Для apache v 2.2 Файл /etc/apache2/apache2.conf Выглядит так . Заменям/дополняем свой (не забыв сохранить содержимое начального)
  64. ===========================================
  65. http://pastebin.com/36xr3gru
  66. ===========================================
  67.  Для apache v 2.4 Файл /etc/apache2/apache2.conf Выглядит так . Заменям/дополняем свой (не забыв сохранить содержимое начального)
  68. ===========================================
  69. http://pastebin.com/sCs33xZA
  70. ===========================================
  71.  
  72. *Если версия Apache ниже 2.2.4  ( проверить можно командой apache2 -v  )
  73. Установка модуля RPAF (
  74.  
  75. Т.к. теперь все запросы к Apache приходят не от удалённых клиентов, а от Nginx, то в итоге IP-адрес клиента Apache определяет как локальный (127.0.0.1). Для решения этой проблемы нам нужен модуль RPAF. Он берет тело заголовка X-Forwarded-For, присланного от фронтенда (Nginx) и заменяет значение заголовка REMOTE_ADDR на бекенде (Apache).
  76.  
  77. В Debian или Ubuntu установка и включение модуля RPAF в Apache выполняется следующими командами:
  78. apt-get install libapache2-mod-rpaf
  79. a2enmod rpaf
  80.  
  81. Настройка модуля RPAF
  82. Файл конфигурации RPAF находится:
  83. Debian/Ubuntu: /etc/apache2/mods-enabled/rpaf.conf
  84.  
  85. Он должен содержать следующие строки:
  86. #
  87. RPAFenable On
  88. RPAFsethostname Off
  89. RPAFproxy_ips 127.0.0.1
  90. RPAFheader X-Real-IP
  91. #
  92.    
  93. *Если версия Apache 2.2.4 =========================Изменения https://httpd.apache.org/docs/2.4/upgrading.html
  94.    
  95. Apache начиная с версии 2.2.4 НЕ поддерживает mod_rpaf поэтому для отображения реальных ип делаем следующее.
  96.     a2enmod remoteip
  97.     nano /etc/apache2/conf-available/remoteip.conf
  98. Вписываем строчки в файл remoteip.conf
  99.     RemoteIPHeader X-Forwarded-For
  100.     RemoteIPTrustedProxy 127.0.0.1
  101. Далее снова пишем в консоли
  102.     a2enconf remoteip
  103. Редактируем /etc/apache2/apache2.conf
  104. Меняем
  105.     LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
  106. на
  107.     LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
  108. Применяем и смотрим результат
  109.    /etc/init.d/apache2 restart
  110.    
  111.  
  112. #### 2.  Настраиваем Nginx##########
  113. Узнать текущую версию:
  114. nginx -v
  115. Обновление если надо (лучше обновить!) http://nginx.org/en/linux_packages.html#mainline   http://artana.ru/blog/all/obnovlenie-nginx-do-posledney-versii-debian/
  116. Полная информация о дистрибутиве операционки для выбора Codename при обновлении:
  117. lsb_release -a
  118.  
  119. Файл настройки  http://pastebin.com/aRLRiYwu заменить на свой /etc/nginx/nginx.conf .  (Прописать там свой ипшник в раздел upstream B)
  120. =======================================================
  121. Не забываем создать соответствующие каталоги командами:
  122.  
  123. mkdir -p  /var/lib/nginx/cache
  124. chown -R www-data /var/lib/nginx/cache
  125. chmod 700 /var/lib/nginx/cache
  126.  
  127. =======================================================
  128. !!!!!!!!!!!!!!!! В настройках указан режим reuseport, он требует ядро линкса от версии 3.9 (Устанавливаем сами или просим ТП хостинга установить)
  129. Команада показать версию ядра
  130. uname -r
  131. Полная инфа о системе
  132. uname -a
  133.  
  134. Eсли версия ядра ниже и не будем его использовать, то
  135. меняем
  136. listen 80 reuseport;
  137. на
  138. listen 80;
  139.  
  140. #### 3.  Обновления Ядра Linux для !KVM (OpenVZ не поддерживает) (Времени занимает 10 мин) ( пропускаем если не будем обновлять ядро)##############################################
  141. Желательно с прямыми ручонками своими, и не обливая клаву кофем )
  142. По иструкции https://codebeer.ru/obnovlenie-yadra-debian/ , после apt-get update
  143. apt-get install -t jessie-backports linux-headers-4.9.0-0.bpo.1-amd64
  144. apt-get install -t jessie-backports linux-image-4.9.0-0.bpo.1-amd64
  145. update-grub
  146. reboot
  147. ======================
  148.  
  149. #### 4. Быстродействие системы ##########
  150. !!!!Важный момент, снимаем лимиты (Проверка командой ulimit -n )
  151. В конец файла (где root - имя пользователя от которого работает апач)
  152. /etc/security/limits.conf
  153.  
  154. * soft nproc 65535
  155. * hard nproc 65535
  156. * soft nofile 65536
  157. * hard nofile 65536
  158. root soft nofile 65536
  159. root hard nofile 65536
  160.  
  161.  
  162. 1.В файле php.ini  /etc/php/7.0/apache2
  163. memory_limit = 36M
  164. short_open_tag = On
  165. realpath_cache_size=16M
  166. realpath_cache_ttl=1200
  167. session.name = session
  168. session.auto_start = 0
  169.  
  170. 1.1 Файл подкачки
  171. www.youtube.com/watch?v=IYmYiAiFUN0
  172. #Подкачка как расширение памяти на VPS с SSD
  173. #установка
  174. fallocate -l 1G /swapfile
  175. chmod 0600 /swapfile
  176. mkswap /swapfile
  177. swapon /swapfile
  178. #свободное место
  179. df -h    
  180. #В файл
  181. vim /etc/fstab  
  182. #добавить строку для автозагрузки свапа
  183. /swapfile       none            swap    sw              0       0
  184.  
  185. 2.Для простого редактирования всего этого дела есть отличная утилитка –sysv-rc-conf, которая хоть и выполнена в текстовом виде, но очень удобна для этих целей.
  186. В официальном репозитории Debian она есть. В репозитории Ubuntu, кстати, тоже есть.
  187. Для ее установки выполняем команду:
  188. apt-get install sysv-rc-conf
  189. http://adminway.ru/avtozagruzka-v-debian
  190.  
  191. Или можно отключить все не нужное в весте
  192. https://ваш ип:8083/list/server/
  193.  
  194. 3.Ковыряем системные переменные, защищаемся от некоторых видов атак
  195. Редактируем /etc/sysctl.conf
  196. nano /etc/sysctl.conf
  197.  
  198. Дописываем в конец
  199. =========================
  200. # Защита от smurf-атак
  201. net.ipv4.icmp_echo_ignore_broadcasts = 1
  202. # Защита от неправильных ICMP-сообщений
  203. net.ipv4.icmp_ignore_bogus_error_responses = 1
  204. # Защита от SYN-флуда
  205. net.ipv4.tcp_syncookies = 1
  206. # Запрещаем маршрутизацию от источника
  207. net.ipv4.conf.all.accept_source_route = 0
  208. net.ipv4.conf.default.accept_source_route = 0
  209. # Защита от спуфинга
  210. net.ipv4.conf.all.rp_filter = 1
  211. net.ipv4.conf.default.rp_filter = 1
  212. # Мы не маршрутизатор, если конечно это так
  213. net.ipv4.ip_forward = 0
  214. net.ipv4.conf.all.send_redirects = 0
  215. net.ipv4.conf.default.send_redirects = 0
  216. # Включаем ExecShield при атаках направленных на переполнение буфера или срыв стэка
  217. kernel.exec-shield = 1
  218. kernel.randomize_va_space = 1
  219. # Расширяем диапазон доступных портов
  220. net.ipv4.ip_local_port_range = 2000 65000
  221. # Увеличиваем максимальный размер TCP-буферов
  222. net.ipv4.tcp_rmem = 4096 87380 8388608
  223. net.ipv4.tcp_wmem = 4096 87380 8388608
  224. net.core.rmem_max = 8388608
  225. net.core.wmem_max = 8388608
  226. net.core.netdev_max_backlog = 5000
  227. net.ipv4.tcp_window_scaling = 1
  228.  
  229. #ускоряем высвобождение памяти(см. "Ускоряем общую работу системы")
  230. vm.swappiness=10
  231. =======================
  232.  
  233.  
  234. 4.Ускоряем общую работу системы
  235.  
  236. Prelink и Preload. Prelink для создание статичных адресов библиотек, Preload это небольшое приложение, которое следит за файлами наиболее часто используемых приложений, и загружает их в память, когда система простаивает.
  237. 1. Установка Prelink:
  238. apt-get -y install prelink
  239.  
  240. Редактируем файл /etc/default/prelink:
  241. nano /etc/default/prelink
  242.  
  243. Измените строку с PRELINKING=unknown на PRELINKING=yes
  244. Запускаем:
  245. /etc/cron.daily/prelink
  246.  
  247. 2.Установка Preload:
  248. apt-get -y install preload
  249.  
  250. Все, больше ничего не требуется
  251.  
  252. Завершение настройки (перезапуск сервисов)
  253. service nginx restart; service apache2 restart; reboot;
  254.  
  255. Теперь связка работает, Nginx обрабатывает статичные данные, Apache - динамические.
  256.  
  257.  
  258. ===========Cписок используемой литературы======================
  259.  
  260. Увеличиваем производительность с помощью SO_REUSEPORT в NGINX 1.9.1
  261. https://habrahabr.ru/post/259403/
  262.  
  263. Разбираемся в HTTP прокси NGINX, балансировке нагрузки, буферизации и кешировании
  264. http://devacademy.ru/posts/razbiraemsya-v-http-proksi-nginx-balansirovke-nagruzki-buferizatsii-i-keshirovanii/
  265.  
  266. Прокачка debian/ubuntu сервера для маленьких
  267. https://habrahabr.ru/post/186362/
  268.  
  269. Прозрачное кэширование в nginx для всех и каждого
  270. https://habrahabr.ru/post/124684/
  271.  
  272. Динамические виртуальные хосты (dynamic vhost) в nginx
  273. https://the-bosha.ru/2013/11/08/dinamicheskie-virtualnyie-hostyi-dynamic-vhost-v-nginx/
  274.  
  275. Установка и настройка связки Nginx+Apache
  276. http://lib.clodo.ru/web-Сервер/webserver-lna.html
  277.  
  278. Настройка сервера Debian 7 + nginx + apache
  279. http://desome.net/nastrojka-servera-nginx-apache.html
  280. http://desome.net/nastrojka-servera-debian-7-nginx-apache-chast-2.html
Advertisement
Add Comment
Please, Sign In to add comment