Wyłącz SSL dla niektórych ścieżek w Nginx

11

Mam witrynę internetową, w której chcę, aby wszystkie żądania były wykonywane za pomocą HTTPS, z wyjątkiem żądań do adresów URL ze ścieżkami, które zaczynają się od /foo/. Jak skonfigurować to w Nginx?

Obecnie uruchamiam wszystkie żądania za pomocą protokołu SSL:

server {
    listen 443;

    ssl on;
    ssl_certificate /home/admin/ssl/ssl.crt;
    ssl_certificate_key /home/admin/ssl/ssl.key;

    server_name www.mydomain.com;

    location / {
        proxy_pass http://localhost:8000;
        ...
    }
}
hekevintran
źródło
Czy chcesz zmusić żądania do tej ścieżki, aby nie używały protokołu SSL, czy zezwalać na żądania nieużywania protokołu SSL?
Shane Madden
Chcę zezwolić na żądania do tej ścieżki, aby korzystać z HTTP i HTTPS.
hekevintran

Odpowiedzi:

15

Dodaj drugi wpis serwera dla non-ssl, port 80, obsługujący /foo/*i przekierowujący wszystko inne do adresu URL HTTPS.

Może coś takiego ?:

server {
    listen      80;
    server_name www.example.com;

    location ~ ^/(foo|foo/.*)$ {
        proxy_pass http://localhost:8000;
        ... 
    }

    location / {
        rewrite  ^ https://$server_name$request_uri? permanent;
    }
}
Dave Forgac
źródło
Idealna odpowiedź.
hekevintran