Назад | Перейти на главную страницу

Как с помощью Nginx перенаправить отдельные URI с http на https?

Большинство транзакций из веб-приложения защищены сами по себе, но не показывают значок замка, когда транзакции происходят в браузере. Цель состоит в том, чтобы определенные страницы, такие как страницы входа, были зашифрованы ssl и отображали значок блокировки в браузере. Примером может быть http://www.domain.com/pro должен быть https, но если вы перешли на http://www.domain.com он войдет через http. У нас есть несколько URI, которые нужно перенаправить.

Моя первая попытка была переписать:

rewrite ^/pro$ https://www.domain.com/pro

Но это, очевидно, вызывает цикл перенаправления, поэтому я попытался включить часть http.

rewrite ^http:*./pro$ https://www.domain.com/pro

Это также не сработало и привело к возникновению цикла перенаправления. Мое единственное предположение заключается в том, что регулярное выражение при перезаписи не смотрит на заголовок только на сам URI, поэтому оно должно начинаться с www, а не с http.

Я пробовал несколько вещей, используя местоположение вместо перезаписи, и здесь я застрял.

location /pro {
    if ( $scheme = http ){
        rewrite ^ https://www.domain.com/pro;
    }
}

При этом в конфигурации происходит перезапись, но я получаю страницу 404 Not Found от nginx. Если я удалю его, но наберу https://www.domain.com/pro тогда он загружается нормально. Я чувствую, что оператор местоположения снова перехватывает URI, но не знает, что с ним делать, поскольку оператор if больше не соответствует действительности. Я просто не уверен, что еще включить в блок местоположения, чтобы заставить его работать.

Итак, как я могу заставить определенные страницы переключаться с http-соединения на https-соединение?

HTTPS и обычный HTTP будут поступать через разные порты, поэтому на самом деле вам нужно просто перенаправить любые обычные HTTP-запросы, которые вы хотите обслуживать по HTTPS, на HTTPS. Итак, следующее:

server {
  listen                      80;
  server_name                 _;

  location / {
    rewrite ^/(pro)$ https://$host/$1;
  }
}

... не должен вызывать цикл перенаправления, потому что он пересылает только на: 80, и он пересылает TO: 443 (это то, что HTTPS-запросы будут поступать по умолчанию).