Bagaimana cara mengkonfigurasi mod_proxy ke ProxyPass berdasarkan http vs https?

9

Saya menjalankan Apache Tomcat dengan SSL diaktifkan. Saya memiliki Apache HTTP Server yang bertindak sebagai proxy terbalik jadi jika pengguna saya menekan http: // myserver / tomcat / mereka diteruskan ke http: // myserver: 8080 .

ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/

Saya memiliki server HTTP Apache yang dikonfigurasi untuk SSL juga sehingga ketika pengguna menekan https: // myserver / tomcat / mereka harus diteruskan ke https: // myserver: 8443 / .

Dengan konfigurasi ProxyPass & ProxyPassReverse saat ini, mereka akan dialihkan ke URL non-ssl. Bagaimana saya bisa mengatur pass proxy sehingga mengalihkan ke protokol dan port yang berbeda berdasarkan permintaan yang masuk?

Artinya, jika seseorang masuk melalui HTTPS bagaimana saya bisa mengarahkan mereka ke kucing jantan saya di https: // myserver: 8443 ?


Memperbarui:

@ mike-insch

Saya mencoba:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ https://myserver:8443/
    ProxyPassReverse /tomcat/ https://myserver:8443/
</VirtualHost>

Sekarang ketika saya mengunjungi: https: // myserver / tomcat / Saya mendapatkan "halaman tidak ditemukan". Dalam log kesalahan saya melihat "File tidak ada: / var / apache2 / htdocs / tomcat"

Mana yang benar, tetapi saya mengharapkan permintaan untuk dialihkan ke tomcat berjalan di https: // myserver: 8443 / .

Kira saya perlu melihat lebih banyak pada host virtual, kecuali ada sesuatu yang tampak salah.

codecraig
sumber
Saya tidak berpikir Anda perlu NameVirtualHostarahan di sini. Anda juga perlu menambahkan arahan yang sesuai untuk mengaktifkan SSL di dalam <VirtualHost *:443>bagian Anda .
Mike Insch

Jawaban:

5

Anda perlu melakukan ini melalui dua <VirtualHost *:X>arahan independen . HTTPArahan Anda masuk ke dalam <VirtualHost *:80>sementara HTTPSarahan Anda masuk ke dalam <VirtualHost *:443>. Sesuaikan seperlunya jika server Anda memiliki beberapa host virtual Berbasis Alamat atau Berbasis Nama yang dikonfigurasi. Lihat dokumentasi Apache 2 untuk detail lengkap.

Mike Insch
sumber
Jadi saya telah menambahkan yang berikut ini: NameVirtualHost *: 443
codecraig
3
Jangan lupa untuk menambahkan SSLProxyEngine pada arahan
Ryan
6

Untuk kelengkapan: jika ini merupakan opsi, itu ide yang baik untuk mengakhiri SSL di Apache, daripada meminta Tomcat menanganinya juga. Menyediakan Tomcat hanya dapat diakses dari Apache, ini lebih sederhana dan tidak kalah aman.

Dalam pengaturan ini, Apache akan mem-proxy HTTP dan HTTPS ke http://myserver:8080/:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>
David Carboni
sumber
1
Jika melakukan ini, Anda tidak perlu mengulangi arahan proxy di kedua VirtualHosts. Anda bisa menarik mereka keluar ke konteks server.
Amit Naidu