Dokumentasi Apache menyatakan ProxyPreserveHost:

Saat diaktifkan, opsi ini akan meneruskan baris Host: dari permintaan masuk ke host proksi

Jika tidak:

nama host yang ditentukan dalam baris ProxyPass (digunakan)

Di Apache conf, apakah ada cara untuk menyetel Host khusus ke salah satu yang bukan salah satunya?
misalnya ProxySetHost customHostName

//EDIT
Di nginx, dimungkinkan untuk menggunakan anotasi ini:

nginx.ingress.kubernetes.io/proxy-ssl-name:
Memungkinkan untuk mengatur proxy_ssl_name. Ini memungkinkan penggantian nama server yang digunakan untuk memverifikasi sertifikat server HTTPS yang diproksi. Nilai ini juga diteruskan melalui SNI saat koneksi dibuat ke server HTTPS yang diproksi.

Apakah ada yang mirip dengan ini di Apache httpd?

1
Nick Wong 16 Juni 2020, 17:40

1 menjawab

Jawaban Terbaik

Pikir saya menemukan jawaban saya sendiri. Agar lebih jelas saya mencari cara untuk memodifikasi Host yang dikirim melalui ekstensi SNI yang terjadi sebelum header http dikirim antara frontend Apache saya dan backend nginx. SNI tampaknya diatur saat menggunakan SSLProxyPreserveHost, yang terbukti jika Anda melihat kode sumber modul (namun tidak dalam dokumentasi).

Saya menggali kode sumber modul proxy untuk httpd di github dan sepertinya hanya ada 3 kasus di mana Host diubah untuk SNI:

(proxy_util.c - https://github.com/apache /httpd/blob/trunk/modules/proxy/proxy_util.c)

Kasus 1: (Dijelaskan oleh blok komentar)

        /*
         * In the case of ProxyPreserveHost on use the hostname of
         * the request if present otherwise use the one from the
         * backend request URI.
         */
        dconf = ap_get_module_config(r->per_dir_config, &proxy_module);
        if (dconf->preserve_host) {
            ssl_hostname = r->hostname;
        }

Kasus 2: Pikirkan itu hanya terjadi jika proxy maju diatur (saya menggunakan proxy terbalik).

        else if (conn->forward
                 && ((forward_info *)(conn->forward))->use_http_connect) {
            ssl_hostname = ((forward_info *)conn->forward)->target_host;
        }

Kasus 3: Jika tidak, setel ke host yang ditentukan di baris ProxyPass.

        else {
            ssl_hostname = conn->hostname;
        }

Saya menambahkan komentar ke salah satu laporan bug untuk httpd, menautkan jika ada yang tertarik untuk mengikutinya: https://bz.Apache.org/bugzilla/show_bug.cgi?id=64422

0
Nick Wong 17 Juni 2020, 12:39