Saya mencoba menyiapkan server dengan beberapa aplikasi web yang semuanya akan dilayani melalui apache VirtualHost (apache berjalan di server yang sama). Kendala utama saya adalah bahwa setiap aplikasi web harus menggunakan enkripsi SSL. Setelah googling sebentar dan melihat pertanyaan lain tentang stackoverflow, saya menulis konfigurasi berikut untuk VirtualHost:
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
Meskipun https://host.example.org:8443 dapat diakses, https://host.example.org tidak, yang mengalahkan tujuan konfigurasi virtual host saya. Firefox mengeluh bahwa, meskipun berhasil terhubung ke server, koneksi terputus. Saya juga mendapatkan peringatan berikut di error.log apache:
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
Pada aplikasi web (server Tomcat) log akses menunjukkan permintaan akses aneh:
"?O^A^C / HTTP/1.1" 302
Berikut ini adalah permintaan akses kembali yang benar yang saya dapatkan ketika saya terhubung langsung ke https://host.example.org:8443 :
"GET / HTTP/1.1" 302
Akhirnya saya juga harus menyebutkan bahwa virtual host berfungsi dengan baik ketika saya tidak menggunakan SSL.
Bagaimana saya bisa membuat ini berfungsi?
sumber
ProxyPreserveHost On
hampir selalu salah, tidak berguna dan hampir selalu rusakProxyPassReverse
. Sebagai catatanProxyRequests off
adalah default, sehingga berlebihan.localhost
itu tidak berfungsi.Coba konfigurasi ini
Jika aplikasi Anda perlu memiliki akses ke informasi SSL dari koneksi yang diproksi, Anda harus mempertimbangkan untuk menggunakan mod_proxy_ajp, dan konektor tomcat ajp1.3.
sumber
Tetapi jika tujuan Anda adalah menjalankan beberapa aplikasi web yang diaktifkan ssl di server yang sama. menambahkan apache di depan tidak akan menyeimbangkan mereka menggunakan konfigurasi di atas, Anda masih memerlukan load balancer atau Anda dapat menggunakan modul penyeimbang proxy apache dengan sesuatu seperti berikut:
sumber
Nah, apa yang saya tidak mengerti di sini adalah mengapa Anda perlu memiliki koneksi SSL dari apache Anda ke aplikasi Anda yang tampaknya berada di mesin yang sama ( http: // localhost: 8443 / ).
Saya kira cara yang biasa untuk mengatur hal-hal seperti ini adalah memiliki apache yang menyediakan enkripsi SSL ke sisi "pelanggan", misalnya internet, dan memiliki koneksi yang tidak terenkripsi ke aplikasi. Ini juga memberi Anda lebih banyak kebebasan untuk men-debug respons aplikasi Anda.
Hal lain yang disebutkan Dave Cheney adalah menggunakan konektor tomcat asli agar memiliki load balancing dan fitur lainnya.
sumber
Apakah Anda benar-benar perlu proksi ke layanan HTTPS? Anda mungkin ingin proksi ke layanan non-ssl di localhost, mis
sumber
Pertama saya akan melihat apakah Anda dapat melakukan permintaan dari localhost ke localhost: 8443 dan lihat apakah itu berhasil (IE melakukan GET atau wget http: // localhost: 8443 )
Saya tidak begitu yakin mengapa Anda harus mendengarkan host virtual pada port 443 kemudian memproksi ke host ssl lain
mengapa aplikasi tidak bisa hanya menggunakan 443 secara asli? jika Anda tidak bisa mengubahnya, Anda bisa menggunakan iptables untuk mengarahkan ulang port
sumber
Periksa log kesalahan SSL Anda dan pastikan Anda tidak memiliki kesalahan tentang tidak dapat memverifikasi rantai sertifikat CA.
sumber