2014-12-25 3 views
5

Существует несколько похожих вопросов по SO, но ни один из них не является моим, и мне не повезло, что они пытались адаптировать свои ответы до сих пор.Маскировка URL-адреса Nginx в другом домене

Я хочу нанести на карту URL http://sub.example.com до https://123.12.12.12/path, так что браузер по-прежнему показывает URL http://sub.example.com.

Мой Nginx конфигурационный файл выглядит,

server { 
    listen 80; 
    server_name sub.example.com; 

    location/{ 
     proxy_pass https://123.12.12.12; 
     rewrite ^/$ /path last; 
    } 
} 

работает Маршрутизация здесь, но отображаемый URL является http://sub.example.com/path. Как мне отображать только http://sub.example.com?

+0

Вы перенаправляетесь на 'http: // sub.example.com/ path'? –

+0

Да, как мне это сделать, например, http: // sub.example.com? – kennysong

+0

Вам необходимо устранить перенаправление –

ответ

18
server { 
    listen 80; 
    server_name sub.example.com; 

    location/{ 
     proxy_pass https://123.12.12.12/path; 
    } 
} 

Вот как это работает. Если proxy_pass содержит части места - текущее местоположение будет заменено на указанное. http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

Но это помощь только для http-запроса и перенаправления http. Если приложение создает html со ссылками https://123.12.12.12 - это все равно не изменилось. В этом случае вы можете попробовать ngx_http_sub_module.

+0

Что делать, если я хочу передать HOST-заголовок на бэкэнд и нет DNS-имени для хост-сервера? Это возможно? – VsMaX

+0

@VsMaX вы можете использовать 'proxy_set_header Host somevalue.com;' или, если вам нужно передать внешний узел, передать $ host переменную 'proxy_set_header Host $ host;' –

+0

проблема в том, что когда я устанавливаю 'proxy_set_header Host somevalue.com; 'он все еще выполняет DNS-запрос для этого имени хоста, которого не существует. И тогда nginx терпит неудачу с именем DNS erorr, которое не найдено ... – VsMaX

Смежные вопросы