Отключить SSL для определенных путей в Nginx

11

У меня есть веб-сайт, на котором я хочу, чтобы все запросы выполнялись с HTTPS, кроме запросов к URL с путями, которые начинаются с /foo/. Как мне настроить это в Nginx?

Сейчас я запускаю все запросы с 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
источник
Вы хотите заставить запросы к этому пути не использовать SSL или разрешить запросам не использовать SSL?
Шейн Мэдден
Я хочу разрешить запросам по этому пути использовать HTTP и HTTPS.
Хекевинтран

Ответы:

15

Добавьте вторую запись сервера для non-ssl, порт 80, обслуживая /foo/*и перенаправляя все остальное на URL-адрес HTTPS.

Может как то так?

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

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

    location / {
        rewrite  ^ https://$server_name$request_uri? permanent;
    }
}
Дейв Форгак
источник
Идеальный ответ.
Хекевинтран