Apache başka bir bağlantı noktasına yönlendiriyor


157

Bununla bir süredir mücadele ettim ve kesinlikle yanlış bir şeyler yapıyorum.

Aynı makinede apache sunucum ve bir JBoss sunucum var. Mydomain.com trafiğini JBoss localhost: 8080 / example'a yeniden yönlendirmek istiyorum. DNS şu anda alanadim.com için ayarlanmıştır ve tarayıcıya girildiğinde doğrudan bağlantı noktası 80'e gidecektir.

Sorum şu: apache'ye belirli bir alan adı geldiğinde (bu durumda, "alanadim.com") farklı bir bağlantı noktasına nasıl yönlendirebilirim?

<VirtualHost ip.addr.is.here> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

GÜNCELLENDİ w / Öneriler - Hala 8080 numaralı bağlantı noktasına iletilmiyor

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

Bu oldukça iyi görünüyor. Belirtileriniz neler?
Martin Vilcans

Semptomlar, tarayıcıya www.alanim.com'u koymam ama apache kök dizinine gitmesidir. Bunun yerine, bir jboss alt dizini localhost: 8080 / alt dizine yönlendirmesini istiyorum. Şu anda çeşitli etki alanlarını doğrudan bağlantı noktası 80'e yeniden yönlendirmek için çalışıyorum, ancak başka bir bağlantı noktasına gitmesini sağlayamıyorum.
agentcurry

Bende de tamamen aynı istek var: bir çözüm buldunuz mu?
Cystack

1
@Cystack - Tam olarak çalışmasını sağlayamadım. Yapılandırmada o kadar çok varyasyon denedim ki beni çılgına çevirdi. Bundan vazgeçtim = / Bir çözüm bulursanız lütfen buraya gönderin, bunun nasıl işe yarayacağını bilmek istiyorum. iyi şanslar dostum!
agentcurry

Bu benim için çalıştı: serverfault.com/a/195831/111707
jjrv

Yanıtlar:


227

Alan adını http://example.comProxyPass ve ProxyPassReverse'de bırakmalı ve olarak bırakmalısınız /. Ek olarak, yönlendirme yaptığı yerin /sonunda bırakmanız gerekir example/. Ayrıca, http://example.comvs ile ilgili bazı sorunlar yaşadım http://www.example.com- SunucuAdı www.example.com ve ServerAlias ​​example.com'u yapana kadar yalnızca www çalıştı. Aşağıdakileri bir deneyin.

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.example.com
  ServerAlias example.com
  ProxyPass / http://localhost:8080/example/
  ProxyPassReverse / http://localhost:8080/example/
</VirtualHost> 

Bu değişiklikleri yaptıktan sonra, gerekli modülleri ekleyin ve apache'yi yeniden başlatın

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart


1
Bu bir CentOS sunucusu için aynı mı olur? (Neden olmadığını anlamıyorum, sadece emin olmak). Ve bu hangi yapılandırma dosyası olabilir? (/ etc / httpd / conf içinde bir yerde tahmin ediyorum ...)
Jeremy

2
İşe yaradı, ancak uygulamamın karşılama sayfasında css'nin yüklenmediğini gördüm (daha önce example.com:8080/example üzerinde çalışıyordu). ve bazı istisnalar da var. ne kaçırdığım hakkında bir fikrin var mı?
Rajarshee Mitra

1
bu, ben yapana kadar /usr/sbin/setsebool -P httpd_can_network_connect 1
httpd'mde

@vladkras Bu ipucu için çok teşekkürler, çok faydalı!
2016

29

Bu sorunu aşağıdaki kodla çözdüm:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName myhost.com
ServerAlias ww.myhost.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

Ben de kullandım:

a2enmod proxy_http

10

Kök etki alanından Jenkins'e erişebilmek için tam olarak bunu yapmak istedim.

Bunun çalışması için varsayılan siteyi devre dışı bırakmam gerektiğini fark ettim. İşte yaptığım tam olarak.

$ sudo vi /etc/apache2/sites-available/jenkins

Ve bunu dosyaya ekleyin:

<VirtualHost *:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias mydomain
  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/
  <Proxy *>
        Order deny,allow
        Allow from all
  </Proxy>
</VirtualHost>

Ardından, uygun siteleri etkinleştirmeniz / devre dışı bırakmanız gerekir:

$ sudo a2ensite jenkins
$ sudo a2dissite default
$ sudo service apache2 reload

Umarım birine yardımcı olur.


@Louth'a katkıda bulunduğunuz için teşekkürler. Uzun zamandır bundan vazgeçtim ve artık sunucuya sahip değilim. Yine de onu asla çalıştırmamam beni rahatsız ediyor, sadece tekrar test etmek için yeni bir sunucu başlatabilirim. Tekrar teşekkürler, bunu tekrar denersem / denersem güncelleme yapacağımdan emin olacağım.
agentcurry

Jenkins wiki, Jenkins'i Apache'nin arkasında nasıl çalıştıracağınızı açıklıyor: wiki.jenkins-ci.org/display/JENKINS/…
2016

6

Bunu deneme yanılma yoluyla buldum. Yapılandırmanız bir SunucuAdı belirtiyorsa, VirtualHost yönergenizin de aynısını yapması gerekir. Aşağıdaki örnekte, awesome.example.com ve amazing.example.com'un her ikisi de, 4567 numaralı bağlantı noktasında çalışan bir yerel hizmete yönlendirilir.

ServerName example.com:80

<VirtualHost example.com:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName awesome.example.com
  ServerAlias amazing.example.com
  ProxyPass / http://localhost:4567/
  ProxyPassReverse / http://localhost:4567/
</VirtualHost>

Bunun soruyu tam olarak yanıtlamadığını biliyorum, ancak bunu buraya koyuyorum çünkü bu Apache bağlantı noktası yönlendirmesi için en iyi arama sonucu. Bu yüzden bir gün birine yardımcı olacağını düşündüm.


Bu benim için çalışan tek kişi. *:80Bunun yerine kullanılması example.com:80, bağlantı noktasının yeniden yönlendirilmeyeceği anlamına geliyordu.
Seb123

4

Sunucuda proxy'nin etkin olduğundan emin olmalısınız. Bunu aşağıdaki komutları kullanarak yapabilirsiniz:

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart

3

Bu eski bir soru olabilir ama yaptığım şey şu:

Apache tarafından yüklenen bir .conf dosyasında:

<VirtualHost *:80>
  ServerName something.com
  ProxyPass / http://localhost:8080/
</VirtualHost>

Açıklama: Yerel makinenin 80 numaralı bağlantı noktasına gelen tüm istekleri dinleyin. " http://something.com/somethingorother" " " İstersem , bu isteği " http://localhost:8080/somethingorother" adresine iletin . Bu, harici bir ziyaretçi için çalışmalıdır, çünkü belgelere göre, uzak isteği yerel sunucunun alanına eşler.

Apache 2.4.6-2ubuntu2.2'yi çalıştırıyorum, bu yüzden "-2ubuntu2.2" nin bu cevabın daha geniş uygulanabilirliğini nasıl etkilediğinden emin değilim.

Bu değişiklikleri yaptıktan sonra, gerekli modülleri ekleyin ve apache'yi yeniden başlatın

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

2

JBoss için bir proxy kullanmak zorunda değilseniz ve alanadim.com:8080 dünyaya "ifşa olabilir", o zaman bunu yapardım.

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>

80'den farklı bir bağlantı noktası kullanmak sadece çirkin görünmekle kalmaz, aynı zamanda proxy sunucularında veya ISS'lerde sorunlara da neden olabilir. Bu durumda, Apache'yi kaldırın ve bunun yerine 80 numaralı bağlantı noktasında JBoss'u çalıştırın!
Martin Vilcans

Her şeyi JBoss altında çalıştırmak bir seçenek, sadece apache sitelerini JBoss'a taşımaktan kaçınmaya çalışıyordum, ancak aşırı zaman alıcı olmamalı. Geri dönüşünüz için teşekkür ederiz.
agentcurry


1

Apache'm 2 farklı portu dinliyor,

Listen 8080
Listen 80  

Şeffaf bir URL istediğimde 80'i kullanıyorum ve bağlantı noktasını URL'den sonra yerel url'ye izin vermeyen google hizmetleri için yararlı olacak şekilde koymuyorum?

Ancak 8080'i, bağlantı noktasını bir "dev ortamı" için referans olarak kullandığım dahili geliştirme için kullanıyorum


0

Apache isme dayalı ve IP tabanlı sanal konakları destekler. Görünüşe göre ikisini de kullanıyorsunuz, muhtemelen ihtiyacınız olan şey bu değil.

Aslında isme dayalı sanal barındırma kurmaya çalıştığınızı düşünüyorum ve bunun için IP adresini belirtmenize gerek yok.

Gerçekten ip tabanlı sanal barındırma istemiyorsanız, tüm IP adreslerine bağlanmak için <VirtualHost *: 80> seçeneğini deneyin . Sunucunun birden fazla IP adresi varsa ve farklı adreslerde farklı sitelere hizmet vermek istiyorsanız bu durum söz konusu olabilir. En yaygın kurulum (tahmin ediyorum) isme dayalı sanal konaklardır.


Bu mantıklı, tek ihtiyacım olan isme dayalı. Değiştirdim ama yine de diğer bağlantı noktasına yönlendirilmiyor
agentcurry

0

2 şeye ihtiyacınız var:

  1. ServerAlias www.mydomain.comYapılandırmanıza bir ekleyin
  2. ProxyPassMatch ^(.*)$ http://localhost:8080/example$1mod_dir ve sondaki eğik çizgilerin karışmasını engellemek için proxypass'ınızı olarak değiştirin .

ServerAlias ​​ekledim ama yine de şansım yok.
agentcurry

0

Bunların tümü, sanal sunuculardaki alan adları aracılığıyla bağlantı noktalarına erişim konusunda mükemmel bilgilerdir. Bununla birlikte, sanal sunucuları etkinleştirmeyi unutmayın; bu yorumlanabilir:

NameVirtualHost *:80
<Directory "/home/dawba/www/">
 allow from all
</Directory>

WSGI'yi sxxxx.com etki alanında bir Apache sunucusu ve 6800 bağlantı noktası üzerinde çalışan bir golang sunucusu ile çalıştırıyoruz. Bazı güvenlik duvarları bağlantı noktalı etki alanı adlarını engelliyor gibi görünüyor. Bu bizim çözümümüzdü:

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName wsgi.sxxxx.com
 DocumentRoot "/home/dxxxx/www"
  <Directory "/home/dxxx/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
 ScriptAlias /py/ "/home/dxxxx/www/py/"
 WSGIScriptAlias /wsgiprog /home/dxxxx/www/wsgiprog/Form/Start.wsgi
</VirtualHost>

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName sxxxx.com 
 ServerAlias www.sxxxx.com
 ProxyPass / http://localhost:6800/
 ProxyPassReverse / http://localhost:6800/
</VirtualHost>

0

Bu ISPConfig'te de çalışıyor. Web sitesi listesinde bir etki alanına girin, Seçenekler sekmesine tıklayın, şu satırları ekleyin:;

ProxyPass / http://localhost:8181/
ProxyPassReverse / http://localhost:8181/

Sonra web sitesine gidin ve wolaa :) Bu da HTTPS protokolü çalışıyor.


0

Bunu dene-

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.adminbackend.example.com
  ServerAlias adminbackend.example.com
  ProxyPass / http://localhost:6000/
  ProxyPassReverse / http://localhost:6000/
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost> 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.