Alt alanları aynı sunucudaki farklı bir bağlantı noktasına nasıl yönlendiririm?


67

Aynı sunucudaki belirli bağlantı noktalarına yönlendirmek istediğim bazı alt etki alanlarım var. Benim dediğimi söyle

dev.mydomain.com 

İstediğim dev.mydomain.comşeffaf yönlendirmek için mydomain.com:8080ve ben orijinal alan adı sadece tarayıcının url korumak istiyorum.

Bunu Apache 2.2 ile nasıl yaparım? Varsayılan bağlantı noktasında Apache 2.2 çalışıyor 80. Bunun gerçekleşmesi için yazma ayarını çözemiyorum.

dev.mydomain.comDNS’de çözmek için zaten ayarlarım mydomain.com.

Bu, yönlendirilemeyen bir IP adresine sahip bir intranet geliştirme sunucusu içindir, bu nedenle halka açık bir sunucuyu tehlikeye atacak istismarlar ve güvenlik hakkında endişelenmiyorum.

Yanıtlar:


69

Çözüm

İşte Miles Erickson tarafından doğru yönde ayarlandıktan sonra nihayet geldiğim şey. Adres çubuğunun, yönlendirilen sunucu ve bağlantı noktasını değil, isteğin orijinal alt etki alanını / etki alanını yansıtmasını istedim, ancak Google’ı kullanarak bir çözümü kullanarak doğru yola soktum VirtualHostve sonunda kullanımı içeren bir çözüm buldum mod_proxy.

<VirtualHost *:80>
    ServerAdmin me@mydomain.com
    ServerName dev.mydomain.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8888/
    ProxyPassReverse / http://localhost:8888/
</VirtualHost>

7
Bu cevabın işe yaramadığı herkes için modları mod_proxyolduğu kadar modları da etkinleştirmeniz gerektiğini unutmayın proxy_http.
matewka

9

Dev.mydomain.com adresinin mydomain.com IP'sine çözülebileceğini varsayarsak, httpd.conf dosyasına aşağıdakileri ekleyebilirsiniz:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev.mydomain.com
    redirect / http://mydomain.com:8080/
</VirtualHost>

İlgili Apache dokümantasyonu:

  1. İsme dayalı sanal konak oluşturma rehberi
  2. VirtualHost ve NameVirtualHost dahil olmak üzere çekirdek
  3. yönlendir

İlgili soru: Ana bilgisayar adına göre Apache yönlendirmesi

(Not: bu cevabın orjinal versiyonu yanlış bir şekilde, @ChrisS'in yardımcı bir şekilde işaret ettiği gibi, URL'nin alan kısmını ayrıştıramayacağı RedirectMatch kullanımını önermiştir.)


1
gerçekte kullandıklarım için kendi sağladığım yanıtı görün, bu, yeniden yönlendirme yapmak yerine orijinal sunucuyu korumak için bu VirtualHost fikridir. Bu bir iç sunucudur bu yüzden mod_proxy'nin güvenliği ya da istismarları ile ilgilenmiyorum.

1
Çok sayıda başka öneri buldum ancak bu sonuçta benim için Windows Server 2008 R2 / Apache 2.2.25'te çalıştı.
HPWD

1
Bu çözümle ilgili sorun kardeşinizde birinci alanda kalmamanız, ikinciye 302 almanız.
Pleymor

7

Terminalde aşağıdaki satırı çalıştırın (etki alanınızı ve alt etki alanı adınızı doğru belirtin)

sudo nano /etc/apache2/sites-available/subdomain.example.com.conf 

Aşağıdaki kodu yapıştırın ve gereği olarak değiştirin

<VirtualHost *:80>
        ServerAdmin admin@example.com
        ServerName subdomain.example.com
        ServerAlias subdomain.example.com
        ProxyRequests Off

        #ProxyPass / http://localhost:8080/
        <Location />
                ProxyPreserveHost On
                ProxyPass http://example.com:8080/
                ProxyPassReverse http://example.com:8080/
        </Location>
     # Uncomment the line below if your site uses SSL.
     #SSLProxyEngine On
</VirtualHost>

Terminalde aşağıdaki satırları çalıştırın (alan adınızı ve alt alan adınızı doğru belirtin)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart

3
Bu ve kabul edilen cevap arasında önemli bir fark var mı?
kasperd

1
İnsanların çoğu eklemeyi unutuyor, sudo a2enmod proxy_httpbu yüzden doğru koşmada zorluk çekiyorlar. Ayrıca daha doğru bir şekilde yardımcı olmak için bir dizide baştan sona tüm süreci vermeye çalışıyorum. Sorunuz için teşekkürler.
MAK Ripon

1
"ProxyRequests Off" u bahsettiği için +1
Sebastian

1
Bu sadece benim için çalışmıyor. 'sudo a2enmod subdomain.domain.com.conf' der ki "HATA: Modül xyz mevcut değil!" 'Varsayılan' yapılandırmada belirtilmesi gerekiyor mu?
Dirk Schumacher

2
sudo a2ensite sub.yourdomain.com
Ali Azhar

5

Ana vhost yapılandırmanıza aşağıdaki satırları ekleyin:

ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/

Bunun Apache'de mod_proxy gerektirdiğini unutmayın.


Bu bir yönlendirme değil; bağlantıyı proxy'ye verir. Yapılandırırken çok dikkatli değilseniz mod_proxy'yi etkinleştirmek çok kolay olabilir. Buna karşı şiddetle tavsiye ediyorum.
Chris S

4
OP'sine göre bir yönlendirme istemiyor. Orijinal URL’nin adres çubuğunda kalmasını istiyor; Bu mod_proxy veya mod_rewrite kullanarak anlamına gelir ve hepiniz mod_rewrite önlemek daha iyidir.
adaptr

4

Mod_rewrite'ı arıyorsunuz. İşte Apache'nin temel ve gelişmiş yapılandırmalar için pek çok örnek içeren belgelerine bağlantı .

Ve belgeleri kendiniz yorumlayamıyorsanız, bunu httpd.conf dosyasına eklemeyi deneyin:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC]        
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]    

Ve bu net bir örnek değilse, işte mod_rewrite yeni başlayanlar için de bir link .


1
Paylaşılan barındırmadayım. Yeniden yazma tek seçenek. Bir .htaccess dosyası oluşturabilir, ancak bir proxy veya sanal ana bilgisayar oluşturabilirim.
abalter
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.