2016-09-17 3 views
0

Я использую два контейнера Docker для размещения своего приложения. Первый контейнер содержит порт прослушивания nginx 80. Это «точка входа» для моего приложения, и в настоящее время он передает только все запросы в контейнер 2 (my-app). Конфигурация Nginx заключается в следующем:nginx 301 содержит внутренний адрес

user www-data; 
worker_processes 4; 

events { 
     worker_connections 1024; 
} 

http { 
    include mime.types; 

    server { 
     location/{ 
      proxy_pass http://my-app:80; 
     } 
    } 
} 

конфигурации Nginx второго контейнера выглядит следующим образом:

user www-data; 
worker_processes 4; 

events { 
     worker_connections 1024; 
} 

http { 
    include mime.types; 

    server { 

     root /var/www/my-app/public; 

     location =/{ 
      proxy_pass http://localhost:81; 
     } 

     location/{ 
      try_files $uri $uri/ /index.html @backend; 
     } 

     location @backend { 
      proxy_pass http://localhost:81; 
     } 
} 

}

проблема: когда Nginx хочет, чтобы автоматически перенаправить клиента новый адрес, он корректно возвращает 301, но заголовок местоположения неправильно содержит внутренний адрес.

Например: если Я хожу в http://localhost:80/my-folder, запрос сначала идет в контейнер 1, который передает его в контейнер 2, который затем возвращает 301 с просьбой браузера для перехода к новому положению, которое неправильно следующему: http://my-app/my-folder/

правильное расположение должно содержать первоначально спросил хозяина: http://localhost/my-folder/

И, конечно, в производстве, адрес example.com/my-folder следует направить example.com/my-folder/, вместо того, чтобы мой -app/my-folder/

Почему nginx перенаправляет клиента с помощью внутреннего адреса? Как я могу решить эту проблему?

+0

Вы можете разместить 'server_name .example.com;' внутри раздела 'server' вашего конфига. Вы также можете попробовать поставить 'proxy_set_header Host $ host;' (попробуйте также 'Host my-app;') в разделе 'location @backend;'. И убедитесь, что ваш сервер также отправляет 301 переадресацию. –

ответ

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