Nginx를 사용한 로드 밸런싱 사이트

Nginx를 사용한 로드 밸런싱 사이트

서버가 처리할 수 있는 것보다 더 많은 트래픽을 받고 있는 nginx에서 제공하는 Rails 4 애플리케이션이 있으므로 다른 서버에서 해당 앱의 두 번째 인스턴스를 실행하고 둘 사이의 트래픽을 로드 밸런싱하려고 합니다.

이 Rails 앱은 다양한 도메인에서 오는 많은 사이트에 서비스를 제공합니다. 각 사이트에는 SSL 인증서가 있는 자체 Nginx 블록이 있어 트래픽 serverproxy_passRails 앱으로 다시 mysite.com이동 mainapp.com/1합니다 .myothersite.commainapp.com/2

server #1내 생각은 Rails 앱을 실행하는 두 서버의 IP가 포함된 블록을 추가하여 로드 밸런서 역할을 하도록 Rails 앱의 nginx 구성을 수정하는 것입니다 upstream(IP 중 하나는 127.0.0.1이 됩니다. 동일한 서버) 따라서 트래픽은 자체적으로 이동하거나server #2

이제 내가 이해하지 못하는 것은 블록에 무엇을 넣어야 하는가입니다. upstream왜냐하면 내가 다음과 같은 일을 한다면:

upstream samplecluster {
  ip_hash;
  server localhost;
  server x.xx.xxx.x; #private IP of server #2
}

더 많은 사이트를 운영하는 것을 고려하면 server #2Nginx는 로드 밸런서에서 트래픽을 수신할 때 어떤 사이트를 제공해야 하는지 어떻게 알 수 있습니까?

해결책은 IP 대신 도메인을 사용하는 것입니까 server #2? 예를 들면 다음과 같습니다.

upstream samplecluster {
  ip_hash;
  server localhost;
  server www2.mainapp.com; #domain instance of the main app on server #2
}

그리고 ? 로 사용되는 servermainapp 인스턴스의 블록 에 있습니다.server #2www2.mainapp.comserver_name

아니면 내부 IP를 사용하고 특정 포트에만 연결한 다음 server_name _;해당 특정 포트만 사용하고 수신할 수 있습니까?

아마도 이런 것이 있지 않을까요?


#on server #1

upstream samplecluster {
  ip_hash;
  server localhost:6789;
  server x.x.x.x:6789; #internal ip of server #2
}

#main app domain acting as load balancer
server {
  listen 443;
  server_name www.mainapp.com mainapp.com;

  location / {
    try_files $uri @app;
  }

  location @app {
    proxy_pass http://samplecluster;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Host $http_host;

    proxy_headers_hash_max_size 512;
    proxy_headers_hash_bucket_size 128;

    proxy_redirect off;
  }
  
  (...)
  
}

#also on server #1, main app behind load balancer actually serving the files
server {
  listen 6789;
  server_name _;
  root /var/www/mainapp;
  
  (...)
  
}


#on server #2

server {
  listen 6789;
  server_name _;
  root /var/www/mainapp;
  
  (...)
  
}

이게 효과가 있을까요? 아니면 제가 뭔가를 놓치고 있는 걸까요?

관련 정보