Bagaimana cara mengatur file conf Nginx untuk memaksa SSL hanya pada satu jalur di situs saya dan non-SSL di semua yang lainnya?
Sebagai contoh, saya ingin semua URL di bawah / pengguna menjadi https tetapi semua URL lainnya menjadi http.
Untuk bagian pertama yang saya miliki:
rewrite ^/user(.*) https://$http_host$request_uri?;
Saya tidak ingin menggunakan "jika". Saya menganggap itu akan mengambil keuntungan dari urutan operasi tetapi saya tidak ingin berakhir dalam satu lingkaran.
/user
dan non-ssl untuk semua url lainnya. Akibatnya, bahkan pengguna secara eksplisit mengetikhttps://www.example.com/
di bilah alamat browser, halaman yang dihasilkan adalahhttp://www.example.com/
. Apakah ada cara untuk mengimplementasikan url-tulis ulang otomatis antara ssl / non-ssl seperti yang dicapai oleh pengaturan yang dijelaskan dalam jawaban ini, tetapi tetap menghormati permintaan ssl eksplisit jika itu secara eksplisit diketik oleh pengguna di bilah alamat? Terima kasih!Nginx memungkinkan untuk memproses HTTP dan HTTPS dalam
server
blok yang sama . Dengan demikian Anda tidak perlu menduplikasi arahan untuk keduanya dan dapat mengarahkan ulang jalur yang ingin Anda amankanPastikan untuk tidak menaruh
ssl on
garis di sana karena itu akan merusak HTTP biasa.Secara opsional, Anda dapat mengalihkan semua permintaan lain dari HTTPS kembali ke HTTP dengan cara yang sama:
UPDATE : seperti yang ditunjukkan Alexey Ten di bagian komentar, memeriksa
scheme
setiap permintaan bukanlah ide yang sangat cerdas. Anda harus mengikuti cara deklaratif untuk mengkonfigurasi nginx Anda. Dalam hal ini, deklarasikan dua blok server dengan pengalihan olehlocation
, pindahkan logika umum ke file yang terpisah daninclude
keduanya. Jadi jawaban GruffTech lebih baik.sumber
include
arahan untuk arahan umum. Beberapa duplikasi OK.