LINUX.ORG.RU
ФорумAdmin

Проблема с nginx https

 ,


1

1

Добрый день

Есть сайт с картами, нужно подключить https. На данный момент такой конфиг

server { listen 80; server_name example.com;

#rewrite ^ https://$http_host$request_uri? permanent; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; client_max_body_size 8m; access_log /var/log/nginx/example.access.log;

location / { proxy_pass http://localhost:port; } } server { listen 443 ssl; server_name example.com; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; client_max_body_size 64m; access_log /var/log/nginx/example.access.log; ssl on; ssl_certificate /etc/ssl/private/cert1.crt; ssl_certificate_key /etc/ssl/private/key.key; location / { proxy_pass http://localhost:port; }

.

Проблема в том, что если писать https://example.com , то автоматом перенаправляется на http (чего не должно быть). Если как-то заставить зайти в https, пишет bad gateway. Но если перенаправлять http на https с помощью rewrite ^ https://$http_host$request_uri? permanent; сайт открывает нормально, а вот некоторые карты(к примеру гугловые) не отображаются. Плюс выходят уведомления, мол сайт пытается запустить скрипты.

1) Почему не работает https без вынужденного перенаправления с http? Где-то стоит перенаправление с https на http? Или? 2) почему не работают карты? Я так понимаю, что-то связанное с https? Добавил fastcgi_param HTTPS on; fastcgi_param HTTP_SCHEME https; не помогло.

Спасибо


Погугли про mixed content (смешанное содержимое) и то как его побороть.

MrClon ★★★★★ ()

Я у себя редирект так делаю:

server {
    server_name *.%(domain)s;

    if ($scheme = http) {
        return 301 https://$host$request_uri;
    }
}

Карта не работает наверное из-за того, что ты пытаешься карту по http загрузить, а надо по https и картинки и скрипты надо из https грузить.
Советую еще проверить свой сайт на https://www.ssllabs.com/ssltest/ твой текущий конфиг выдаст малый рейтинг. Почитай: https://sethvargo.com/getting-an-a-plus-on-qualys-ssl-labs-tester/
только я использовал 2048 битный dhparam, потому-что чем больше тем начинает дольше грузиться сайт ну и ssl_ciphers:

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!EXP:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

Int64 ★★★ ()
Последнее исправление: Int64 (всего исправлений: 1)
Ответ на: комментарий от Int64

Наверное лучше проверять $https, а не $scheme.

        if ( $https != 'on' ) {
                return 301 https://$host$request_uri;
        }

Ну или таки-вынести http в отдельный блок server

MrClon ★★★★★ ()
Ответ на: комментарий от Int64

Спасибо за сайт!

Насчет редиректа не вариант, потому что должны работать и http и https. А с https он сразу перекидывает на http. Не знаю, как решить..

Насчет карт - это на уровне бэкэнда, я так понимаю? Надо разработчикам сообщить?

Datt_ ()
Ответ на: комментарий от Datt_

Насчет редиректа не вариант, потому что должны работать и http и https. А с https он сразу перекидывает на http. Не знаю, как решить..

ну это уже сложнее ) может как-то зоны у домена криво настроены? Еще посмотри: http://serverfault.com/questions/10854/nginx-https-serving-with-same-config-a...

Насчет карт - это на уровне бэкэнда, я так понимаю? Надо разработчикам сообщить?

не знаю бекенд у вас там или фронтенд, суть в том что все ресурсы на https лучше тянуть также по https, если вверху нету зеленого замочка, значит скорее всего у вас смешанные данные (http и https) и браузер может вообще отказаться загружать их.

Int64 ★★★ ()
Ответ на: комментарий от Int64

ну это уже сложнее

Только если упоротый движёк сайта (привет, WP!) упорно пытается вставлять в генерируемые внутренние ссылки указанный в нём адрес сайта, и отказывается верить что вдрес сайта может не содержать http: или https:.
В противном случае достаточно заменить http(s)://domain.tld/ на //domain.tld/ для всех domain.tld умеющих и в http и в https (включая собственный домен, хотя для внутренних ссылок лучше обойтись вовсе без домена, ибо нефиг)

MrClon ★★★★★ ()

Ну и смотри теперь на бэкенд, почему он редиректит и как это преодолеть.

thesis ★★★★★ ()
Ответ на: комментарий от MrClon

Есть проблема с юзверями - их пароли сохранены в http сессии, а при запуске сессии https браузер требует ввести пароль. Пользователей много, поэтому возиться с ними как-то не хочется.

Беда, правда?

Datt_ ()
Ответ на: комментарий от Datt_

Это в бекэнде. Ну короче в том что генерирует ответы на запросы которые ты переправляешь на http://localhost:port

Кстати судя по конфигу ты пересылаешь туда вообще все запросы. В чём прикол? nginx обычно используют что-бы быстро раздавать статику.

MrClon ★★★★★ ()
Ответ на: комментарий от Datt_

Насчет карт - это на уровне бэкэнда, я так понимаю? Надо разработчикам сообщить?

именно.

snaf ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.