Снижение нагрузки на сервер с помощью NGINX

  • 2,456 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,456
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
20
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Снижение нагрузки на сервер с помощью NGINX Шмаленюк Николай [email_address]
  • 2. Что такое NGINX
    • Быстрый сервер для ресурсов с высоким трафиком.
    • По данным Netcraft за май 2010 года, nginx используют более 12,98 миллионов сайтов, что делает его третьим по популярности веб-сервером в мире.
    • Известные сайты использующие NGINX: Rambler , Yandex , Begun , Wordpress.com , SourceForge.net , vkontakte.ru и др.
    • Автор Игорь Сысоев.
  • 3. Apache
  • 4. Как работает Apache
  • 5. NGINX + Apache
  • 6. Возможности
    • Проксирование
    • Кэширование
    • Защита от небольших атак
  • 7. Файл конфигурации
    • … global settings
    • http {
    • … global settings
    • server {
    • server_name имя.сайта1 www. имя.сайта1;
    • location / { … }
    • location /index.html { … }
    • location ~* ^.+.(jpg|jpeg|gif)$ { …. }
    • location ~* ^.+.(htm|html)$ { …. }
    • }
    • server {
    • server_name имя.сайта1 www. имя.сайта1;
    • ...
    • }
    • }
  • 8. Универсальная конфигурация
    • server {
    • listen 80;
    • server_name ~^(.*)$;
    • server_name_in_redirect off;
    • # test.com /htdocs/test.com/
    • set $domain "/htdocs/$1";
    • root $domain;
    • }
  • 9. Проксирование
    • upstream backend {
    • server 192.168.0.1 weight=2 max_fails=10 fail_timeout=30s;
    • server 192.168.0.2 weight=2 max_fails=10 fail_timeout=30s;
    • server 192.168.0.3 weight=4 max_fails=10 fail_timeout=30s;
    • }
    • server {
    • location / {
    • proxy_pass http://backend;
    • }
    • }
  • 10. Проксирование
    • upstream backend – так мы описываем имя нашей фермы вебсерверов. Это имя в дальнейшем будет использоваться в настройках модуля proxy
    • server 192.168.0.1 – таким образом задаются адреса серверов, которые входят в ферму.
    • weight=4 – этот параметр предназначен для балансировки нагрузки и означает что данный сервер будет обслуживать 4 запроса подряд, 5-й запрос пойдет на следующий по списку сервер.
    • max_fails=10 fail_timeout=30s – эти 2 параметра связанны и означают, что если за 30 секунд произойдет 10 сбоев сервера(сервер ответит 10 раз кодами отличными от 2ХХ или 3ХХ или не ответит вообще), то будет исключен из работы на 30 секунд.
  • 11. Защита от небольших атак
    • http {
    • # Директива задаёт зону (zone) и максимально возможные всплески запросов (burst).
    • # В случае привышения этого значения запрос завершается кодом "Service unavailable" (503).
    • limit_req_zone $binary_remote_addr zone=one:20m rate=2r/s; server {
    • ...
    • location ~ .php$ {
    • limit_req zone=one burst=5;
    • ...
    • }
    • location @back {
    • limit_req zone=one burst=5;
    • ...
    • }
    • }
    • }
  • 12. Настройка кэширования
    • http {
    • # Директива задаёт путь и другие параметры кэша.
    • fastcgi_cache_path /tmp/nginx/ levels=1:2 keys_zone=fastcgi_cache:32m max_size=512m inactive=1d;
    • server {
    • location @back {
    • fastcgi_cache fastcgi_cache;
    • fastcgi_cache_key "$server_addr$server_port$host$request_uri$request_method$http_if_none_match $http_if_modified_since $cookie_is_user ";
    • fastcgi_hide_header "Set-Cookie";
    • fastcgi_ignore_headers "Cache-Control" "Expires";
    • }
    • }
    • }
  • 13. Настройка кэширования PHP
    • function hook_init (){
    • global $user;
    • elseif (!$user->uid) {
    • drupal_set_header(' X-Accel-Expires : 120');
    • }
    • }
  • 14. SSI в кэшированных страницах
    • <!--# include file=&quot;load/block/1&quot;-->
    • <!--# include file=&quot;load/block/2&quot;-->
    • <!--# include file=&quot;load/block/3&quot;-->
  • 15. Вопросы
  • 16. Шмаленюк Николай [email_address] http://drupal.ru/node/46123