Jak skonfigurować plik conf Nginx, aby wymuszał SSL tylko na jednej ze ścieżek w mojej witrynie, a non-SSL na całej reszcie?
Na przykład chcę, aby wszystkie adresy URL w obszarze / user były https, ale wszystkie pozostałe adresy URL miały postać http.
Do pierwszej części mam:
rewrite ^/user(.*) https://$http_host$request_uri?;
Nie chcę używać „jeśli”. Zakładam, że skorzystałby z kolejności działania, ale nie chcę skończyć w pętli.
/user
i non-ssl dla wszystkich innych adresów. W rezultacie nawet użytkownik wyraźnie wpisujehttps://www.example.com/
w pasku adresu przeglądarki, wynikowa strona jesthttp://www.example.com/
. Czy istnieje sposób na zaimplementowanie automatycznego przepisywania URL-a między ssl / non-ssl zgodnie z ustawieniami opisanymi w tej odpowiedzi, ale nadal respektuje jawne żądanie ssl, jeśli jest jawnie wpisane przez użytkownika w pasku adresu? Dzięki!Nginx pozwala przetwarzać zarówno HTTP, jak i HTTPS w tym samym
server
bloku. Dzięki temu nie musisz powielać dyrektyw dla obu i możesz przekierować ścieżkę, którą chcesz zabezpieczyćPamiętaj, aby nie umieszczać
ssl on
tam wiersza, ponieważ spowoduje to przerwanie zwykłego protokołu HTTP.Opcjonalnie możesz przekierować wszystkie pozostałe żądania z HTTPS z powrotem na HTTP w ten sam sposób:
AKTUALIZACJA : jak uprzejmie zauważa Alexey Ten w sekcji komentarzy, sprawdzanie
scheme
każdej prośby nie jest zbyt dobrym pomysłem. Powinieneś postępować zgodnie z deklaratywnym sposobem konfiguracji swojego nginx. W takim przypadku zadeklaruj dwa bloki serwera za pomocą przekierowańlocation
, przenieś wspólną logikę do osobnego pliku iinclude
w obu. Zatem odpowiedź GruffTech jest lepsza.źródło
include
dyrektywy dla wspólnych dyrektyw. Niektóre powielanie jest w porządku.