
서버가 처리할 수 있는 것보다 더 많은 트래픽을 받고 있는 nginx에서 제공하는 Rails 4 애플리케이션이 있으므로 다른 서버에서 해당 앱의 두 번째 인스턴스를 실행하고 둘 사이의 트래픽을 로드 밸런싱하려고 합니다.
이 Rails 앱은 다양한 도메인에서 오는 많은 사이트에 서비스를 제공합니다. 각 사이트에는 SSL 인증서가 있는 자체 Nginx 블록이 있어 트래픽 server
이 proxy_pass
Rails 앱으로 다시 mysite.com
이동 mainapp.com/1
합니다 .myothersite.com
mainapp.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 #2
Nginx는 로드 밸런서에서 트래픽을 수신할 때 어떤 사이트를 제공해야 하는지 어떻게 알 수 있습니까?
해결책은 IP 대신 도메인을 사용하는 것입니까 server #2
? 예를 들면 다음과 같습니다.
upstream samplecluster {
ip_hash;
server localhost;
server www2.mainapp.com; #domain instance of the main app on server #2
}
그리고 ? 로 사용되는 server
mainapp 인스턴스의 블록 에 있습니다.server #2
www2.mainapp.com
server_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;
(...)
}
이게 효과가 있을까요? 아니면 제가 뭔가를 놓치고 있는 걸까요?