Подтвердить что ты не робот

Nginx обратный прокси-сервер

Вот моя ситуация: у меня будет один сервер frontend с nginx, а несколько серверов backend с apache + пассажиром с различными приложениями rails. Я НЕ пытаюсь выполнить балансировку нагрузки. Мне нужно установить nginx для прокси-соединений на определенные серверы на основе URL-адреса. IE, client.domain.com должен указывать на x.x.x.100: 80, client2.domain.com должен указывать на x.x.x.101: 80 и т.д.

Я не знаком с nginx, но не смог найти конкретную конфигурацию в Интернете, которая соответствовала моей ситуации.

Спасибо.

4b9b3361

Ответ 1

Вы можете сопоставить разные URL-адреса с блоками server {}, а затем внутри каждого блока сервера вы получите настройки обратного прокси-сервера.

Ниже иллюстрация;

server { 
  server_name client.domain.com;

  # app1 reverse proxy follow
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://x.x.x.100:80;

}

server { 
  server_name client2.domain.com;

  # app2 reverse proxy settings follow
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://x.x.x.101:80;
}

Кроме того, вы можете добавить дополнительные настройки Nginx (такие как error_page и access_log) по желанию в каждом блоке server {}.

Ответ 2

@mohamnag комментарий правильный. proxy_pass разрешен только внутри location

См:

http://wiki.nginx.org/HttpProxyModule#proxy_pass

https://www.nginx.com/resources/admin-guide/reverse-proxy/

Таким образом, правильный конфиг будет

server { 
    server_name client.domain.com;

    location / {
        # app1 reverse proxy follow
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://x.x.x.100:80;
    }
}

server { 
    server_name client2.domain.com;

    location / {
        # app2 reverse proxy settings follow
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://x.x.x.101:80;
    }
}