Konfigurasikan Nginx sebagai proxy terbalik dengan SSL hulu

40

Saya mencoba mengkonfigurasi server Nginx sebagai proxy terbalik sehingga permintaan https yang diterimanya dari klien diteruskan ke server hulu melalui https juga.

Berikut konfigurasi yang saya gunakan:

http {

    # enable reverse proxy
    proxy_redirect              off;
    proxy_set_header            Host            $http_host;
    proxy_set_header            X-Real-IP       $remote_addr;
    proxy_set_header            X-Forwared-For  $proxy_add_x_forwarded_for;

    upstream streaming_example_com 
    {
          server WEBSERVER_IP:443; 
    }

    server 
    {
        listen      443 default ssl;
        server_name streaming.example.com;
        access_log  /tmp/nginx_reverse_access.log;
        error_log   /tmp/nginx_reverse_error.log;
        root        /usr/local/nginx/html;
        index       index.html;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_certificate /etc/nginx/ssl/example.com.crt;
        ssl_certificate_key /etc/nginx/ssl/example.com.key;
        ssl_verify_client off;
        ssl_protocols        SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers RC4:HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;


        location /
        {
            proxy_pass  https://streaming_example_com;
        }
    }
}

Lagi pula, ketika saya mencoba mengakses file menggunakan reverse proxy, ini adalah kesalahan yang saya dapatkan di reverse proxy log:

2014/03/20 12:09:07 [kesalahan] 4113079 # 0: * 1 SSL_do_handshake () gagal (SSL: error: 1408E0F4: rutinitas SSL: SSL3_GET_MESSAGE: pesan tak terduga) sementara handshaking SSL ke hulu, klien: 192.168.1.2, server: streaming.example.com, permintaan: "GET /publishers/0/645/_teaser.jpg HTTP / 1.1", upstream: " https://MYSERVER.COM:443/publishers/0/645/_teaser.jpg " , host: "streaming.example.com"

Ada yang tahu apa yang saya lakukan salah?

Alex Flo
sumber
Apakah Anda mencoba tanpa menggunakan upstreammodul dengan langsung meletakkan WEBSERVER_IP dalam direktif proxy_pass untuk melihat apakah Anda mendapatkan kesalahan yang sama?
Benoit
Tidak, saya tidak mencoba ini, tetapi seperti yang dijelaskan di bawah ini, opsi proxy_ssl_session_reuse off;ini berfungsi seperti yang diharapkan.
Alex Flo
10
Harap hapus SSLv3 dari protokol yang didukung. Ini tidak aman dan Anda tidak boleh menggunakannya: ssl_protocols SSLv3
user220703

Jawaban:

30

Saya menemukan kesalahan apa yang harus saya tambahkan proxy_ssl_session_reuse off;

Alex Flo
sumber
1
Terima kasih. Bagi mereka di luar sana yang mungkin masih memiliki masalah setelah menggunakan konfigurasi ini, ingatlah untuk menggunakan https bukan hanya http di awal URL yang diberikan sebagai parameter di proxy_pass. Jika tidak, nginx tidak akan mengenkripsi lalu lintas yang dikirim ke hulu dan Anda masih akan mendapatkan pesan kesalahan yang sama.
Lucio Mollinedo
1

Dalam kasus saya, saya mencoba membalikkan proxy situs web di belakang Cloudflare. Saya mendapat kesalahan yang sama di /var/log/nginx/error.log. Saya mencoba banyak solusi dan yang ini berhasil untuk saya:

proxy_ssl_server_name on;

ya bahkan ini tahun 2019 sekarang beberapa layanan masih memerlukan SNI untuk membedakan antara situs yang dihosting.

iBug
sumber