NGINX изменяет uri запроса

это мой первый пост здесь, я надеюсь, что вы могли бы помочь мне с моей проблемой.

СЦЕНАРИЙ: я хочу разместить несколько веб-сайтов в nginx, используя директиву местоположения и директиву proxy_pass. Например, у меня есть 2 внешних веб-сервера с именами www.webserver1.com и www.webserver2.com.

В моем nginx.conf:

server {
    listen 80;
    server_name my.nginx.proxy;

    location /webserver1 {
    proxy_pass http://www.webserver1.com/;
    }

    location /webserver2 {
    proxy_pass http://www.webserver2.com/;
    }
}

Мои веб-серверы отвечают, но директива uri in location добавляется при запросе к внешним веб-серверам. Например, когда я захожу через клиентский браузер

мой.nginx.proxy/веб-сервер1

Запрос передается на

http://www.webserver1.com/webserver1

В этом случае /webserver1 не существует и, таким образом, возвращает HTTP-оШИБКУ 404, на которую ответил мой веб-сервер. Я просто хочу, чтобы меня перенаправляли на http://www.webserver1.com без URI /webserver1, но с URL в браузере моего клиента отображается как

мой.nginx.proxy/веб-сервер1


person J.WebServer    schedule 29.03.2017    source источник


Ответы (1)


Вы в основном все делаете правильно, но, возможно, ваша версия nginx ‹ 1.1.12.

До версии 1.1.12, если proxy_pass указан без URI, в некоторых случаях вместо измененного URI может передаваться исходный URI запроса.

Только в nginx 1.1.12 и выше они позволяли убирать локацию из запроса при указании url (/) в параметре proxy_pass.

  location /webserver1 {
    # trailing slash at end of url should replace /webserver1 with /
    # if your version of nginx is > 1.1.12
    proxy_pass http://www.webserver1.com/; 
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    # If you want to pass the original host name (my.nginx.proxy) up to 
    # webserver1, you can set the Host header.
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }

Попробуйте обновить nginx.

http://nginx.org/en/docs/http/ngx_http_proxy_module.html?#proxy_pass

person apotek    schedule 03.08.2017