Задать вопрос

Можно ли сервером-балансером отдавать статический контент?

Здравствуйте!

Столкнулся с одной проблемой. Есть три сервера: самый мощный и два одинаковых.
Я настроил upstream и он исправно работает. Сервером-балансером выступил "самый мощный":

upstream backend {
           least_conn;
           server ip1 weight=3; #root - "самый мощный"
           server ip2 weight=2; #2
           server ip3 weight=1; #3
        }


"Самый мощный" доступен по data.domain.name, а остальные по data%number%.domain.name.
Балансировка пашет только между двумя слабыми. Можно ли как-то включить в отдачу контента и "самый мощный"? Либо хотя бы сделать его "backup-сервером". Это реально или "сервер-балансер" может заниматься только распределением нагрузки?

Поверх всего этого дела есть еще CloudFlare.
DNS:

data.domain.name(data - СNAME запись)
data%number%.domain.name(data%number% - A запись)

У меня в наличии всего три сервера. Нужно поделить нагрузку именно между ними, а не скидывать только на два других.

Есть только один момент, когда я могу видеть, что помимо "мелких" серверов, контент пытается отдать и "большой" -- если в upstream прописать не IP, а домены: data, data%number%. Так "мелкие" тоже исправно работают, а вот когда балансировка кидает на "большой" сервер, то CF выплевывает ошибку -- "Error 1002: DNS points to Prohibited IP". Но каким боком я могу убрать IP "большого" сервера, раз он уж так мешает? Второй вариант решения этой проблемы(как написано на сайте) -- вырубить CDN, т.е оставить только DNS only. Не пашет.
  • Вопрос задан
  • 459 просмотров
Подписаться 6 Средний 2 комментария
Решения вопроса 1
@HeyAway Автор вопроса
Ошибка -- плохо гуглил.

Решение -- на сайт devacademy. Ссылку режут.
Название: Балансировка нагрузки для NGINX
Спасибо автору.



Главный - master сервер

Сервер, отвечающий за балансировку нагрузки, я называю главным, но он так же может выступать в роли обработчика запросов, как и два остальных. В этом примере допускается использовать главный сервер для обработки запросов.

Другой сценарий: используем балансировщик нагрузки для обработки запросов. Мы применим небольшой трюк. Заменим следующие настройки на сервере:


upstream balancer {
  server 192.168.1.100:80 ; 
  server 192.168.1.106:80 ;
}

server {
  listen 192.168.1.100:80;
  server_name yoursite.com;
  error_log /var/log/yoursite.com-error.log;
  location / {
      proxy_pass http://balancer;
  }

}


на


server {
    access_log off;
    error_log /var/log/yoursite.com-error.log;
    listen 127.0.01:80;
    server_name  yoursite.com www.yoursite.com;

    location ~* .(gif|jpg|jpeg|png|ico|wmv|3gp|avi|mpg|mpeg|mp4|flv|mp3|mid|js|css|wml|swf)$ {
      root   /var/www/yoursite.com;
      expires max;
      add_header Pragma public;
      add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location / {
      root   /var/www/yoursite.com;
      index  index.php index.html index.htm;
    }
}

upstream balancer {
  server 192.168.1.100:80 ; 
  server 192.168.1.106:80 ;
  server 127.0.0.1:80 ;
}

server {
  listen 192.168.1.100:80;
  server_name yoursite.com;
  error_log /var/log/yoursite.com-error.log;
  location / {
      proxy_pass http://balancer;
  }
}



Как вы видите, мы внесли два изменения: добавили виртуальный хост по адресу 127.0.0.1 и настроили его на обработку запросов на 80 порт. Затем добавили тот же сервер к вышестоящим серверам, то есть он будет использован для обработки запросов от Nginx запущенного на вашем localhost компьютере.

На данном этапе балансировщик нагрузки Nginx должен работать без проблем. Конечно существует множество методов и вариантов его настройки, которые стоит изучить.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@pfg21
ex-турист
если у него хватает ресурсов, то почему и нет ??
балансирование одна из функций веб-сервера, никак не связанная с остальными.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы