Nonaktifkan SSL untuk jalur tertentu di Nginx

11

Saya memiliki situs Web di mana saya ingin semua permintaan dilakukan dengan HTTPS kecuali permintaan untuk url dengan jalur yang dimulai dengan /foo/. Bagaimana cara mengkonfigurasi ini di Nginx?

Saat ini saya menjalankan semua permintaan dengan 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
sumber
Apakah Anda ingin memaksa permintaan ke jalur itu untuk tidak menggunakan SSL, atau mengizinkan permintaan untuk tidak menggunakan SSL?
Shane Madden
Saya ingin mengizinkan permintaan ke jalur itu untuk menggunakan HTTP dan HTTPS.
hekevintran

Jawaban:

15

Tambahkan entri server kedua untuk non-ssl, port 80, melayani /foo/*dan mengarahkan semua yang lain ke URL HTTPS.

Mungkin kira-kira seperti ini ?:

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
sumber
Jawaban sempurna.
hekevintran