
Я использую Nginx в качестве SSL-прокси внутри контейнера Docker, прослушивающего порт 443. Прокси работает корректно и правильно направляет трафик на другой экземпляр Nginx выше по течению на порту 80 (который находится внутри другого контейнера).
Я столкнулся с проблемами смешанного контента и не уверен, как их правильно исправить:
Запрос, направленный на папку (но без завершающего слеша), например: https://example.com/mediafiles/bar
будет правильно перенаправлен на второй экземпляр NginX.
Однако он получает 301 на http URL (заголовки ответа):
$ curl -IL https://example.com/mediafiles/bar
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 15 Jun 2015 15:16:29 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: http://example.com/mediafiles/bar/
X-UA-Compatible: IE=Edge,chrome=1
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 15 Jun 2015 15:16:29 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://example.com/mediafiles/bar/
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 15 Jun 2015 15:16:29 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1786
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Wed, 18 Mar 2015 23:09:35 GMT
Vary: Accept-Encoding
ETag: "550a05af-6fa"
Accept-Ranges: bytes
X-UA-Compatible: IE=Edge,chrome=1
Вероятно, это вызвано общей конфигурацией try_files (ПРАВКА: судя по всему, она не выполняет перенаправления).
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$args;
}
Полную конфигурацию upstream я выложил здесь:https://gist.github.com/mgcrea/f149d0481ad1fa1c2207
И соответствующая конфигурация прокси здесь:https://gist.github.com/mgcrea/26ef92026a20ccc22226
Этот 301-код для http-ресурса вызывает ошибку смешанного содержимого:
Смешанное содержимое: Страница на 'https://example.com' был загружен через HTTPS, но запросил небезопасный ресурс 'http://example.com/mediafiles/bar/'. Этот запрос заблокирован; контент должен быть передан по протоколу HTTPS.
Есть идеи?
Кажется, это связано:https://stackoverflow.com/questions/15555428/nginx-causes-301-redirect-if-theres-no-trailing-slash