ProxyPass: Arahkan ulang direktori URL ke port non-standar

13

Saya telah mencari di Google dan tidak memiliki banyak keberhasilan dalam menemukan jawaban. Saya menjalankan server di Ubuntu dan saya memiliki program yang diinstal yang menggunakan berbagai port non-standar. Masing-masing menggunakan port yang berbeda, dalam kasus saya mereka adalah 9090, 9091, 9092, 9093, dan 9094. Saya membuat server apache dan memiliki nama domain yang sekarang dapat menjangkau server saya daripada harus mengetikkan alamat IP saya. Apa yang saya cari adalah cara untuk membuat direktori yang dapat menunjuk ke berbagai port yang saya daftarkan. Saya menginginkan sesuatu seperti:

https://www.mydomain.com/app1
https://www.mydomain.com/app2
http://www.mydomain.com/app3

Beberapa port lebih dari SSL, ada juga yang tidak, saya hanya mengaturnya (9090-9094) agar mudah digunakan di pihak saya. Saya ingin mendapatkan / app1 untuk menunjuk ke port SSL 9090, / app2 untuk menunjuk ke port SSL 9091, dan / app3 untuk menunjuk ke port non-SSL 9092. Apakah ada cara sederhana untuk melakukan itu? Saya sudah mencoba menambahkan ProxyPass dan sejenisnya berdasarkan posting lain tetapi tidak ada yang berhasil. Apakah saya perlu menambahkan situs baru?

Juga, jika ini melibatkan pengeditan file, yang saya harapkan akan, akan sangat dihargai jika Anda bisa mendaftar lokasi default file dan di mana menambahkan sesuatu. Saya terus melihat posting yang mengatakan untuk menambahkan ProxyPass, jadi saya hanya berasumsi itu masuk ke dalam VirtualHost, tapi saya tidak sepenuhnya yakin. Pada dasarnya, saya tahu sedikit tentang pengaturan server web dan saya perlu diperlakukan seperti itu.

Saya meminta maaf atas tag yang salah dan saya menghargai waktu yang Anda ambil untuk membaca posting dan bantuan yang Anda berikan.

EDIT: Untuk klarifikasi, aplikasi sudah dapat diakses https://www.mydomain.com:9090, dll. Saya hanya ingin cara yang digunakan https://www.mydomain.com/appNameuntuk sampai ke lokasi / halaman yang sama yang diterbitkan oleh aplikasi tersebut.

EDIT 2: Dari / etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /app1 https://localhost:9090/
    ProxyPassReverse /app1 https://localhost:9090/
</VirtualHost>
Serneum
sumber
Bisakah Anda memposting output arahan konfigurasi yang Anda gunakan untuk mengatur ini? Jika mereka ada di dalam vhost, dapatkah Anda memposting seluruh vhost?
Marcos Velazquez
Atur apa? Port? Semua port diatur melalui UI program masing-masing dan saya mencari cara untuk menghindari mengetikkan port ketika mengakses setiap aplikasi di server saya. Saya dapat menggali aplikasi untuk melihat apa yang dapat saya temukan, tetapi port biasanya hanya disimpan dalam file config.ini
Serneum
Tidak bukan itu. Maksud saya, jika Anda menggunakan ProxyPass dan yang lainnya, Anda harus meletakkannya di dalam vhost, bukan? Jika demikian, dapatkah Anda memposting seluruh konten vhost jika memungkinkan? yaitu <VirtualHost 10.0.0.1:80 > ServerName server.domain.com DocumentRoot /usr/local/apache/htdocs </VirtualHost>
Marcos Velazquez
Saya telah membatalkan sebagian besar perubahan saya untuk mendapatkan yang bersih sebelum meminta bantuan. Saya baru saja menambahkan file / etc / apache2 / sites-available / default yang saya miliki dan saya menambahkan hal-hal Proxy pada akhirnya berdasarkan apa yang saya lihat di berbagai situs / pencarian lainnya
Serneum

Jawaban:

13

Pastikan modul apache berikut diinstal dan dimuat:

mod_proxy
mod_proxy_http
mod_ssl

Anda dapat memeriksa melalui menjalankan perintah berikut sebagai root (dengan asumsi httpd ada dalam $ PATH Anda)

httpd -t -D DUMP_MODULES

Setelah itu, coba ubah konfigurasi Anda ke yang berikut:

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Proxy>
SSLProxyEngine on
ProxyPass /app1 https://localhost:9090
ProxyPassReverse /app1 https://localhost:9090

Proxy sekarang akan berfungsi jika Anda mengunjungi http://localhost/app1atau http://mydomain.com/app1dengan asumsi mydomain.com menunjuk ke localhost.

Marcos Velazquez
sumber
Masalah yang sama seperti sebelumnya, saya tidak tahu bagaimana menginstal mod_proxy dan a2enmod mod_proxy mengatakan bahwa mod_proxy tidak ada. Saya akan terus mencari cara mendapatkan 3 mod tersebut sehingga saya bisa menyelesaikan pekerjaan. Yang sedang berkata, saya punya proxy, proxy_http, dan ssl berjalan sekarang. Jika itu yang saya butuhkan, maka solusi ini sepertinya masih tidak berhasil. Saya mendapatkan pesan Terlarang yang saya anggap terkait dengan "Izinkan dari 127.0.0.1" tapi saya tidak sepenuhnya yakin
Serneum
Catatan samping, mydomain.com menunjuk ke IP eksternal saya dan bukan localhost. Saya sudah mencoba mengubah localhost: 9090 ke ip saya: 9090 tetapi tidak berhasil. Apakah "Izinkan dari" dan " localhost " di sebelah ProxyPass relatif ke server atau relatif terhadap apa yang mencoba mengaksesnya?
Serneum
Dapatkan itu berfungsi dengan melakukan Izinkan dari semua sementara. Kelemahannya adalah bahwa tidak ada css, dll yang muncul di halaman, tetapi itu adalah masalah terpisah yang akan saya lihat sendiri. Terima kasih.
Serneum
Ke file konfigurasi mana yang harus saya tambahkan ProxyRequests Off <Proxy *> Order deny,allow Deny from all Allow from 127.0.0.1 </Proxy> SSLProxyEngine on ProxyPass /app1 https://localhost:9090 ProxyPassReverse /app1 https://localhost:9090?
kiltek
Aset halaman yang tidak ditampilkan mungkin bukan masalah yang terpisah. Arahan ProxyPass di sini hanya berlaku untuk dokumen (app1). Untuk direktori Proxy app1 dengan semua isinya, tambahkan garis miring. ProxyPass /app1/ https://localhost:9090/dan sama untuk ProxyPassReverse jika digunakan. Dan kedua, tambahkan pengarahan ulang RewriteRule: RewriteRule ^/app1$ /app1/ [R]as / app1 tidak akan diproksi saat itu.
papo