Saya menggunakan Apache di depan aplikasi yang di-host Karaf (Apache dan Karaf berada di server terpisah). Saya ingin Apache beroperasi sebagai proxy terbalik dan juga menyembunyikan bagian dari URL.
URL untuk mendapatkan halaman masuk aplikasi langsung dari server aplikasi http://app-server:8181/jellyfish. Halaman dilayani oleh instance Jetty yang berjalan di dalam Karaf. Tentu saja, perilaku ini biasanya akan diblokir oleh firewall untuk semua hal kecuali server proxy terbalik.
Dengan firewall dimatikan, jika Anda menekan URL ini maka Jetty memuat halaman login. Bilah alamat browser berubah dengan benar http://app-server:8181/jellyfish/login?0dan semuanya berfungsi.
Yang saya inginkan adalah http://web-server(yaitu dari root) untuk memetakan ke Jetty pada server aplikasi dengan nama app ( jellyfish) ditekan. mis. Peramban akan berubah untuk tampil http://web-server/login?0di bilah alamat dan semua URL serta konten selanjutnya akan disajikan dengan domain server web dan tanpa jellyfishkekacauan.
Saya bisa membuat Apache beroperasi sebagai proxy terbalik sederhana, menggunakan konfigurasi berikut (snippet): -
ProxyPass /jellyfish http://app-server:8181/jellyfish
ProxyPassReverse / http://app-server:8181/
... tetapi ini membutuhkan URL browser untuk memuat jellyfishdan pergi ke URL root ( http://web-server) memberikan 404 Tidak Ditemukan.
Saya telah menghabiskan banyak waktu untuk mencoba menggunakan mod_rewritedengan dan tanpa [P]benderanya untuk mengatasi ini, tetapi tidak berhasil. Saya kemudian mencoba ProxyPassMatcharahan, tetapi sepertinya saya juga tidak bisa mengerti.
Inilah konfigurasi saat ini, seperti yang dimuat ke /etc/apache2/sites-available/dalam server web. Perhatikan bahwa ada direktori gambar yang dihosting secara lokal. Saya juga menjaga mod_rewrite proxy exploit protection dan saya menekan beberapa mod_securityaturan yang memberikan false positive.
<VirtualHost *:80>
ServerAdmin admin@drummer-server
ServerName drummer-server
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /images/ "/var/www/images/"
RewriteEngine On
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{REQUEST_URI} !^/
RewriteRule .* - [R=400,L]
ProxyPass /images !
ProxyPassMatch ^/(.*) http://granny-server:8181/jellyfish/$1
ProxyPassReverse / http://granny-server:8181/jellyfish
ProxyPreserveHost On
SecRuleRemoveById 981059 981060
<Directory "/var/www/images">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Jika saya pergi ke http://web-server, saya diarahkan ke http://web-server/jellyfish/hometetapi ini memberikan 404, dengan keluhan tentang mencoba mengakses /jellyfish/jellyfish/home- NB bilah alamat browser tidak mengandung ganda /jellyfish.
HTTP ERROR 404
Problem accessing /jellyfish/jellyfish/home. Reason:
Not Found
Dan, jika saya pergi ke http://web-server/login, saya diarahkan ke http://web-server/jellyfish/login?0tetapi ini memberikan 404, dengan keluhan tentang mencoba mengakses /jellyfish/jellyfish/login.
HTTP ERROR 404
Problem accessing /jellyfish/jellyfish/login. Reason:
Not Found
Jadi, saya kira saya entah bagaimana melewati peraturan dua kali. Saya juga sedikit bingung ke mana homebit URL berasal dari dalam contoh pertama.
Bisakah seseorang mengarahkan saya ke arah yang benar?
Terima kasih, J.
ProxyPassMatchdengan penggunaan yang setaramod_rewrite, yang mengatasi tantangan untuk menghapusjellyfishdari URL. Saya sekarang melihat ke sejumlah 404 yang kemudian muncul sehubungan dengan elemen yang mendasarinya seperti komponen Wicket yang dibutuhkan oleh Karaf. Berikut cuplikan kode:# proxy to the Jellyfish server (ignoring images) RewriteCond %{REQUEST_URI} !^/(images)(.*)$ RewriteRule ^(/.*)$ http://app-server:8181/jellyfish$1 [P] ProxyPassReverse / http://app-server:8181/jellyfish/