Advertisement
djyarik

Front-end Nginx + back-end Apache 2020! FAST VIP Config

Feb 26th, 2017
3,644
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 17.65 KB | None | 0 0
  1. ##############################################################################
  2. =============Frontend Nginx >=1.12.2 + Backend Apache ~2.4 PHP (5/7) + VestaCP) === 01.17.2020
  3. =============fast server http://vk.cc/7BSP3h ===========
  4. =============Сервер берем с KVM (Kernel-based Virtual Machine)!!!! ==============
  5. =============ОС выбираем Debian 9* (php7 идет в комплекте)==============
  6. =============support / вопросы, пожелания, замечания просьба слать сюда 2010-10 @ mail.ru ==============
  7. ==================Конфиг универсален, работает по принципу поставил и забыл - один под все сайты!==============
  8. ================= не расчитан на перфекционистов, но легко допиливается Вами под Ваши нужды======================
  9. https://archive.apache.org/dist/httpd/
  10. https://nginx.org/ru/download.html
  11.  
  12. ========= Current system ======================
  13. nginx/1.16.0
  14. Apache/2.4.10 (Debian)
  15. Linux 4.9.0-0.bpo.1-amd64 #1 SMP Debian 4.9.2-2~bpo8+1 (2017-01-26) x86_64 GNU/Linux
  16. ===============================================
  17. (Работает все также и на php5* Apache 2.2.*)
  18.  
  19. #  Test VPS !KVM  1x1024RAM 20Gb SSD
  20. ## ab -r -n 10000 -c 10000 http://site.com/
  21. #Concurrency Level:      10000
  22. #Time taken for tests:   0.835 seconds
  23. #Complete requests:      10000
  24. #Failed requests:        0
  25. #Non-2xx responses:      10000
  26. #Total transferred:      3200000 bytes
  27. #HTML transferred:       1620000 bytes
  28. #Requests per second:    11976.08 [#/sec] (mean)
  29. #Time per request:       834.998 [ms] (mean)
  30. #Time per request:       0.083 [ms] (mean, across all concurrent requests)
  31. #Transfer rate:          3742.52 [Kbytes/sec] received
  32. #
  33. #Connection Times (ms)
  34. #              min  mean[+/-sd] median   max
  35. #Total:        530  644  66.0    646     758
  36. ################################################################################################
  37. =============================Инструкция по установке ============================================
  38.  
  39. Для работы качаем https://www.bitvise.com/ssh-client-download  (SSH+FTP) для полноценной работы.
  40.  
  41. Условимся, что nginx будет слушать 80 порты, а перекидывать будет на 81 порт, который и будет слушать apache.
  42.  
  43. Установка php 7 на Debian (если надо) https://rusadmin.biz/web-server/ustanovka-php-7-0-5-na-debian/
  44.  
  45. APACHE : Файлы настроек подключений с расширением .conf в директории сервера /etc/apache2 и подпапки, если include прописан и незакоментирован в основном файле apache2.conf
  46. NGNIX  : Файлы настроек подключений с расширением .conf в директории сервера /etc/nginx и подпапки, если include прописан и незакоментирован в основном файле nginx.conf
  47.  
  48. VPS берем тут http://vk.cc/7BSP3h (Высокое качество, низкие цены и вежливая техподдержка)
  49.  
  50. #### 1.  Настраиваем APACHE ##########
  51.  
  52. В нашем случае на сервере установлена Vesta CP.
  53. 1.1. Настройки сайтов расположены /home/admin/conf/web/apache2.conf (Этот путь прописан в файле vesta.conf в папке /etc/apache2/conf.d)
  54. Меняем <VirtualHost *:*>  на <VirtualHost *:81>
  55. для всех указанных в нем сайтов
  56. 1.2. Меняем также и в шаблоне добавления сайтов, в весте
  57. В шаблонах Vesta  /usr/local/vesta/data/templates/web/apache2
  58.  
  59. В файле default.tpl  (Если у Вас другой, выбирайте его. Смотреть в Veste в Packages в настройках Вашего профиля)
  60.  
  61. 1.3. В файле /etc/apache2/conf.d/*ип сервера*.conf заменяем все на:
  62.  
  63. Для апач 2.2*
  64. Listen 127.0.0.1:81
  65. Listen вставить-ip-вашего-сервера:81
  66. NameVirtualHost 127.0.0.1:81
  67. NameVirtualHost вставить-ip-вашего-сервера:81
  68. Listen вставить-ip-вашего-сервера:8443
  69.  
  70.  
  71. Для апач 2.4*
  72. Listen 127.0.0.1:81
  73. Listen вставить-ip-вашего-сервера:81
  74. Listen вставить-ip-вашего-сервера:8443
  75.  
  76. 1.4. В /etc/apache2/mods-enabled  очисть конфиги, если они там есть файлы    *prefork.conf
  77.  
  78. 1.5. Для apache v 2.2 Файл /etc/apache2/apache2.conf Выглядит так . Заменям/дополняем свой (не забыв сохранить содержимое начального)
  79. ===========================================
  80. http://pastebin.com/36xr3gru
  81. ===========================================
  82.  Для apache v 2.4 Файл /etc/apache2/apache2.conf Выглядит так . Заменям/дополняем свой (не забыв сохранить содержимое начального)
  83. ===========================================
  84. http://pastebin.com/sCs33xZA
  85. ===========================================
  86.  
  87. *Если версия Apache ниже 2.4  ( проверить можно командой apache2 -v  )
  88. Установка модуля RPAF (
  89.  
  90. Т.к. теперь все запросы к Apache приходят не от удалённых клиентов, а от Nginx, то в итоге IP-адрес клиента Apache определяет как локальный (127.0.0.1). Для решения этой проблемы нам нужен модуль RPAF. Он берет тело заголовка X-Forwarded-For, присланного от фронтенда (Nginx) и заменяет значение заголовка REMOTE_ADDR на бекенде (Apache).
  91.  
  92. В Debian или Ubuntu установка и включение модуля RPAF в Apache выполняется следующими командами:
  93. apt-get install libapache2-mod-rpaf
  94. a2enmod rpaf
  95.  
  96. Настройка модуля RPAF
  97. Файл конфигурации RPAF находится:
  98. Debian/Ubuntu: /etc/apache2/mods-enabled/rpaf.conf
  99.  
  100. Он должен содержать следующие строки:
  101. #
  102. RPAFenable On
  103. RPAFsethostname Off
  104. RPAFproxy_ips 127.0.0.1
  105. RPAFheader X-Real-IP
  106. #
  107.    
  108. *Если версия Apache 2.4 =========================Изменения https://httpd.apache.org/docs/2.4/upgrading.html
  109.    
  110. !!!!!!!===>>>Apache начиная с версии 2.4 НЕ поддерживает mod_rpaf поэтому для отображения реальных ип делаем следующее.
  111.     a2enmod remoteip
  112.     nano /etc/apache2/conf-available/remoteip.conf
  113. Вписываем строчки в файл remoteip.conf
  114.  
  115. RemoteIPHeader X-Forwarded-For
  116. RemoteIPTrustedProxy 127.0.0.1
  117.  
  118. Далее снова пишем в консоли
  119.     a2enconf remoteip
  120. Редактируем /etc/apache2/apache2.conf
  121. Меняем
  122.     LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
  123. на
  124.     LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
  125. Применяем и смотрим результат
  126.    /etc/init.d/apache2 restart
  127.    
  128.  
  129. #### 2.  Настраиваем Nginx  http://pastebin.com/aRLRiYwu ########## 
  130. Узнать текущую версию:
  131. nginx -v
  132. Обновление если надо (лучше обновить!)
  133. Вариант 1 https://nginx.org/ru/linux_packages.html#Debian  
  134. Вариант 2 https://myhosti.pro/faq/adminos/web/nginx/obnovlenie-nginx-do-poslednei-versii
  135. (Если надо)Полная информация о дистрибутиве операционки для выбора Codename при обновлении:
  136. lsb_release -a
  137.  
  138. Файл настройки NGINGX  http://pastebin.com/aRLRiYwu заменить на свой /etc/nginx/nginx.conf .  (Прописать в нем свой IP SERVER  <<<===!!!! )
  139. =======================================================
  140. Не забываем создать соответствующие каталоги командами: (где www-data , имя пользователя)
  141.  
  142. mkdir -p /var/lib/nginx/cache; chown -R www-data /var/lib/nginx/cache; chmod 700 /var/lib/nginx/cache;
  143. mkdir -p /var/lib/nginx/proxy; chown -R www-data /var/lib/nginx/proxy; chmod 700 /var/lib/nginx/proxy;
  144.  
  145. =======================================================
  146. Дополнительно: помещаем кеш nginx в ramdisk (tmpfs)
  147. Сейчас у нас кеширование настроено, но кеш хранится на жестком диске, что не является хорошим решение.
  148.  Оптимальнее будет смонтировать директорию с кешем nginx в память.
  149. Для этого откроем
  150. nano /etc/fstab
  151. и добавим туда:
  152. tmpfs /var/lib/nginx/cache tmpfs nodev,nosuid,noexec,nodiratime,size=20M 0 0
  153. Если в настройках nginx вы указали больший размер кеша, то параметр size необходимо изменить в соответствии с указанным размером кеша (max_size), плюс небольшой запас.
  154. Сразу смонтируем директорию в память:
  155. sudo mount -a
  156. service nginx restart; service apache2 restart; reboot;
  157. Теперь при каждой загрузке системы, директория /var/lib/nginx/cache будет помещаться в память, что должно уменьшить время отдачи страницы.
  158.  
  159. =======================================================
  160. !!!!!!!!!!!!!!!! В настройках указан режим reuseport, он требует ядро линукса от версии 3.9 (Устанавливаем сами или просим ТП хостинга установить)
  161. Команда показать версию ядра
  162. uname -r
  163. Полная инфа о системе
  164. uname -a
  165.  
  166. Eсли версия ядра ниже и не будем его использовать, то
  167. меняем  в конфиге nginx
  168. listen 80 reuseport;
  169. на
  170. listen 80;
  171.  
  172. #### 3.  Обновления Ядра Linux для !KVM (OpenVZ не поддерживает) (Времени занимает 10 мин) ( пропускаем если не будем обновлять ядро)##############################################
  173. Желательно с прямыми ручонками своими, и не обливая клаву кофем )
  174. По инструкции https://codebeer.ru/obnovlenie-yadra-debian/ , после apt-get update
  175. apt-get install -t jessie-backports linux-headers-4.9.0-0.bpo.1-amd64
  176. apt-get install -t jessie-backports linux-image-4.9.0-0.bpo.1-amd64
  177. update-grub
  178. reboot
  179. ======================
  180.  
  181. #### 4. Быстродействие системы ##########
  182.  
  183. 4.1. !!!!--->>>  Очистка и перезагрузка сервера ежедневно https://pastebin.com/w8aVmx9w
  184.  
  185.  
  186. !!!!Важный момент, снимаем лимиты (Проверка командой ulimit -n       (1024 изначально))
  187. В конец файла (/etc/security/limits.conf)
  188. nano /etc/security/limits.conf  
  189. добавить строки (где www-data - имя пользователя от которого работает апач)
  190.  
  191. * soft nproc 65535
  192. * hard nproc 65535
  193. * soft nofile 65536
  194. * hard nofile 65536
  195. www-data soft nofile 65536
  196. www-data hard nofile 65536
  197. root soft nofile 65536
  198. root hard nofile 65536
  199.  
  200.  
  201. 4.2. В файле php.ini  /etc/php/7.0/apache2
  202. memory_limit = 128M
  203. short_open_tag = On
  204. realpath_cache_size=16M
  205. realpath_cache_ttl=1200
  206. session.name = session
  207. session.auto_start = 0
  208. output_buffering = On
  209.  
  210. 4.3. Файл подкачки
  211. www.youtube.com/watch?v=IYmYiAiFUN0
  212. #Подкачка как расширение памяти на VPS с SSD
  213. #установка (В данном случае это 200 Мегабайт)
  214. fallocate -l 200M /swapfile
  215. chmod 0600 /swapfile
  216. mkswap /swapfile
  217. swapon /swapfile
  218. #Смотрим свободное место
  219. df -h    
  220. #В файл
  221. nano /etc/fstab  
  222. #добавить строку для автозагрузки свапа
  223. /swapfile       none            swap    sw              0       0
  224.  
  225. 4.4. Оптимизация кеширования http://tolstiyman.blogspot.ru/2013/08/overcommit.html
  226.  
  227. В файл конец /etc/sysctl.conf вставить
  228.  
  229. #Пишем в buffers/cache при <=10% свободной RAM памяти (Дефолт 60!)
  230. vm.swappiness = 10
  231.  
  232.  
  233. <--!Если больше 1Gb RAM-->
  234. В консоли:
  235.  
  236. echo 2 > /proc/sys/vm/overcommit_memory
  237. echo 80 > /proc/sys/vm/overcommit_ratio
  238.  
  239. В файл конец /etc/sysctl.conf вставить  еще строки
  240.  
  241. #по-умолчанию равно 50
  242. vm.overcommit_ratio = 80
  243. #В этом случае допустимый объем пространства памяти будет swap+ram*overcommit_ratio/100
  244. vm.overcommit_memory = 2
  245.  
  246.  
  247.  
  248. 4.5. Для настройки запуска служб есть отличная утилитка –sysv-rc-conf, которая хоть и выполнена в текстовом виде,
  249. но очень удобна для этих целей.
  250. В официальном репозитории Debian она есть. В репозитории Ubuntu, кстати, тоже есть.
  251. Для ее установки выполняем команду:
  252. apt-get install sysv-rc-conf
  253. http://adminway.ru/avtozagruzka-v-debian
  254.  
  255. Или можно отключить все не нужное в весте
  256. https://ваш ип:8083/list/server/
  257.  
  258. 4.6. Ковыряем системные переменные, защищаемся от некоторых видов атак (Не обязательно)
  259. Редактируем /etc/sysctl.conf
  260. nano /etc/sysctl.conf
  261.  
  262. Дописываем в конец
  263. =========================
  264.  
  265. # Защита от smurf-атак
  266. net.ipv4.icmp_echo_ignore_broadcasts = 1
  267. # Защита от неправильных ICMP-сообщений
  268. net.ipv4.icmp_ignore_bogus_error_responses = 1
  269. # Защита от SYN-флуда
  270. net.ipv4.tcp_syncookies = 1
  271. # Запрещаем маршрутизацию от источника
  272. net.ipv4.conf.all.accept_source_route = 0
  273. net.ipv4.conf.default.accept_source_route = 0
  274. # Защита от спуфинга
  275. net.ipv4.conf.all.rp_filter = 1
  276. net.ipv4.conf.default.rp_filter = 1
  277. # Мы не маршрутизатор, если конечно это так
  278. net.ipv4.ip_forward = 0
  279. net.ipv4.conf.all.send_redirects = 0
  280. net.ipv4.conf.default.send_redirects = 0
  281. # Включаем ExecShield при атаках направленных на переполнение буфера или срыв стэка
  282. kernel.exec-shield = 1
  283. kernel.randomize_va_space = 1
  284. # Расширяем диапазон доступных портов
  285. net.ipv4.ip_local_port_range = 2000 65000
  286. # Увеличиваем максимальный размер TCP-буферов
  287. net.ipv4.tcp_rmem = 4096 87380 8388608
  288. net.ipv4.tcp_wmem = 4096 87380 8388608
  289. net.core.rmem_max = 8388608
  290. net.core.wmem_max = 8388608
  291. net.core.netdev_max_backlog = 5000
  292. net.ipv4.tcp_window_scaling = 1
  293.  
  294. =======================
  295.  
  296. 4.7. Ускоряем общую работу системы (Не обязательно)
  297.  
  298. Prelink и Preload.
  299. Prelink для создание статичных адресов библиотек, Preload это небольшое приложение, которое следит за файлами наиболее часто используемых приложений, и загружает их в память, когда система простаивает.
  300. 1. Установка Prelink:
  301. apt-get -y install prelink
  302.  
  303. Редактируем файл /etc/default/prelink:
  304. nano /etc/default/prelink
  305.  
  306. Измените строку с PRELINKING=unknown на PRELINKING=yes
  307. Запускаем:
  308. /etc/cron.daily/prelink
  309.  
  310. 2.Установка Preload:
  311. apt-get -y install preload
  312.  
  313. Все, больше ничего не требуется
  314.  
  315. Завершение настройки (перезапуск сервисов)
  316. service nginx restart; service apache2 restart; reboot;
  317.  
  318. Теперь связка работает, Nginx обрабатывает статичные данные, Apache - динамические.
  319.  
  320.  
  321. ===========Cписок используемой литературы======================
  322.  
  323. Инструкции по настройке обратного прокси-сервера Nginx, Apache и WordPress
  324. https://andreyex.ru/operacionnaya-sistema-linux/instrukcii-po-nastrojke-obratnogo-proksi-servera-nginx-dlya-apache-i-kesha-wordpress/
  325.  
  326. Кеширование в nginx - один из лучших мануалов
  327. https://syrog.ru/?p=314
  328.  
  329. Увеличиваем производительность с помощью SO_REUSEPORT в NGINX 1.9.1
  330. https://habrahabr.ru/post/259403/
  331.  
  332. Разбираемся в HTTP прокси NGINX, балансировке нагрузки, буферизации и кешировании
  333. http://devacademy.ru/posts/razbiraemsya-v-http-proksi-nginx-balansirovke-nagruzki-buferizatsii-i-keshirovanii/
  334.  
  335. Оптимизируем VPS за 5$ (512MB RAM / 1 CPU) так, что сайт на wordpress выдерживает нагрузку в 42,735,587 хитов в день
  336. https://habrahabr.ru/post/242011/
  337.  
  338. Прокачка debian/ubuntu сервера для маленьких
  339. https://habrahabr.ru/post/186362/
  340.  
  341. Прозрачное кеширование в nginx для всех и каждого
  342. https://habrahabr.ru/post/124684/
  343.  
  344. Динамические виртуальные хосты (dynamic vhost) в nginx
  345. https://the-bosha.ru/2013/11/08/dinamicheskie-virtualnyie-hostyi-dynamic-vhost-v-nginx/
  346.  
  347. Установка и настройка связки Nginx+Apache
  348. http://lib.clodo.ru/web-Сервер/webserver-lna.html
  349.  
  350. Настройка сервера Debian 7 + nginx + apache
  351. http://desome.net/nastrojka-servera-nginx-apache.html
  352. http://desome.net/nastrojka-servera-debian-7-nginx-apache-chast-2.html
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement