Обратный прокси Nginx не работает
У меня проблемы с вычислением балансировки нагрузки на Nginx. Я использую: - Ubuntu 16.04 и - Nginx 1.10.0.
Короче говоря, когда я передаю свой IP-адрес непосредственно в "proxy_pass", прокси работает:
server {
location / {
proxy_pass http://01.02.03.04;
}
}
Когда я захожу на свой прокси-компьютер, я вижу содержимое прокси-сервера ip... но когда я использую директиву upstream, это не так:
upstream backend {
server 01.02.03.04;
}
server {
location / {
proxy_pass http://backend;
}
}
Когда я захожу на свой прокси-компьютер, меня приветствует страница по умолчанию для сервера Nginx, а не содержимое с вышестоящего IP-адреса.
Любая дополнительная помощь будет принята с благодарностью. Я проделал тонну исследований, но не могу понять, почему "upstream" не работает. Я не получаю никаких ошибок. Это просто не прокси.
2 ответа
Хорошо, похоже, я нашел ответ...
две вещи о внутренних серверах, по крайней мере, для описанного выше сценария при использовании IP-адресов:
- порт должен быть указан
- порт не может быть:80 (в соответствии с @karliwsn порт может быть 80, просто вышестоящие серверы не могут прослушивать тот же порт, что и обратный прокси-сервер. Я еще не тестировал его, но это замечательно).
блок (ы) внутреннего сервера должны быть настроены следующим образом:
server {
# for your reverse_proxy, *do not* listen to port 80
listen 8080;
listen [::]:8080;
server_name 01.02.03.04;
# your other statements below
...
}
и ваш блок обратного прокси-сервера должен быть настроен, как показано ниже:
upstream backend {
server 01.02.03.04:8080;
}
server {
location / {
proxy_pass http://backend;
}
}
Похоже, что бэкэнд-сервер слушает:80, обратный прокси-сервер не отображает его содержимое. Я думаю, что это имеет смысл, поскольку сервер на самом деле использует порт 80 по умолчанию для широкой публики.
Спасибо @karliwson за то, что подтолкнули меня пересмотреть порт.
Следующий пример работает:
Единственное, что следует упомянуть, это то, что если IP-адрес сервера используется в качестве «server_name», тогда IP-адрес должен использоваться для доступа к сайту, это означает, что в браузере вам нужно ввести URL-адрес как http: //yyy.yyy.yyy .yyy или (http: //yyy.yyy.yyy.yyy: 80), если вы используете имя домена в качестве «server_name», то получите доступ к прокси-серверу, используя имя домена (например, http: //www.yourdomain. com )
upstream backend {
server xxx.xxx.xxx.xxx:8080;
}
server {
listen 80;
server_name yyy.yyy.yyy.yyy;
location / {
proxy_pass http://backend;
}
}