Sementara saya berhasil mengkonfigurasi nginx ke proxy HTTP traffic (menggunakan panduan ini ), semua upaya untuk mem-proxy permintaan HTTPS menghasilkan kode 400 ( Bad Request ).
Log debug nginx sama sekali tidak membantu:
2013/06/05 14:38:33 [info] 74946#0: *589
client sent invalid request while reading client request line, client: 127.0.0.1,
server: google.com, request: "CONNECT google.com:443 HTTP/1.1"
Apa CONNECT
permintaan ini ? Apakah mungkin untuk proxy_pass
permintaan HTTPS di nginx?
Memperbarui
Perlu menambahkan bahwa server proxy adalah bagian dari alur kerja / toolkit pengembangan web saya. Ini cara yang bagus untuk menguji / men-debug JavaScript sisi klien di lingkungan produksi (menggunakan penulisan ulang sebelum proxy).
Juga bahasa konfigurasi nginx bisa dibilang adalah bahasa pemrograman dengan haknya sendiri. Ini memiliki variabel!
Hanya untuk memperjelas: ketika saya menulis di feed komentar blog saya, nginx tidak menangani panggilan metode CONNECT yang digunakan untuk membuat koneksi TCP mentah ke host jarak jauh melalui proxy HTTP - yang masuk akal, mengingat bahwa nginx tidak seharusnya bekerja sebagai proxy yang maju, itu hanya bekerja dengan baik untuk HTTP reguler.
Nginx benar-benar tidak tahu apa yang harus dilakukan dengan pemanggilan metode itu, itu sebabnya pesan kesalahan dalam log agak tidak berguna. Saya selalu menemukan diri saya menggunakan privoxy untuk HTTPS: http://www.privoxy.org/ - sangat mudah untuk diatur juga. Tetapi masih tidak mungkin untuk memfilter atau memotong-motong konten relay HTTPS, karena koneksi HTTPS ditangani dengan koneksi mentah melalui metode CONNECT dan server tidak tahu apa itu relay.
sumber
Jika Anda tidak keberatan mengkompilasi nginx dari sumber, Anda dapat menginstal ngx_http_proxy_connect_module . Berikut ini bekerja untuk saya di Debian 9 "Peregangan" pada Raspberry Pi (setelah saya menambahkan URL deb-src ke /etc/apt/sources.list dan lakukan pembaruan apt-get):
Kemudian edit
/usr/local/nginx/conf/nginx.conf
dan buat tampilannya seperti ini (saya telah menyertakan contoh domain yang ingin Anda blokir, yang berfungsi baik dengan proxy SSL dan non-SSL):Kemudian jalankan
/usr/local/nginx/sbin/nginx
. Ini akan dengan senang hati hidup berdampingan dengannginx
paket stok Debian jika Anda juga menjalankan server web produksi pada port 80 dan tidak ingin mengambil risiko mengacaukannya (tapi pastikan untuk memulai/usr/local
versi secara terpisah saat boot); sebagai alternatif, dengan lebih banyak konfigurasi, Anda dapat menjalankan kedua layanan dari nginx yang telah Anda kompilasi. Tetapi jika Anda mengatur nginx yang dikompilasi untuk dijalankan pada port yang memungkinkan firewall Anda untuk lalu lintas, berhati-hatilah Anda harus memeriksa secara manual untuk pembaruan keamanan nginx karena sistem paket Debian tidak lagi akan melakukannya untuk Anda.sumber
Saya hanya mengikuti instruksi dari Silas S. Brown dan saya dapat mengkompilasi biner Nginx yang dapat menangani penerusan dan SSL. Saya menggabungkan semuanya menjadi gambar Docker. Dockerfile dan konfigurasinya ada di GitHub: https://github.com/reiz/nginx_proxy .
Gambar Nginx Docker dalam repositori Docker Hub ini dapat menangani koneksi dan penerusan SSL: https://hub.docker.com/r/reiz/nginx_proxy/ .
sumber