2017-09-04 77 views
5

Tek bir yol dışında 80 üzerindeki tüm apache isteklerini 8080'de tomcat'e yönlendirmem gerekiyor. 8080:> tomcat -Apache ProxyPass hatası

Yani, eğer http://example.com/anything alırlar.

Ama, url o ise: http://example.com/site -> apache hizmet etmeli ve hiçbir yönlendirme gereklidir.

Halen /var/www/html/site adında bir klasör var.

Bu benim şimdiki yapılandırma dosyasıdır:

site.conf(bu dosya yalnızca aşağıdakileri içerir ve conf.d klasörünün içindeyse)

<LocationMatch "/*"> 
     Allow from all 
     ProxyPass    /site ! 
     ProxyPass    http://127.0.0.1:8080 
     ProxyPassReverse  http://127.0.0.1:8080 
</LocationMatch> 

Bunu düşünmek apache ile gerçekleştirmek için basit bir şeydir, ama ben bulabildiğim her şeyi denedim ve hala hata alıyorum:

ProxyPass|ProxyPassMatch can not have a path when defined in a location. 

İşin aslı, kök web sitesinin tomcat üzerinde çalıştığı, ancak diğerinin apache üzerinde çalıştığıdır (bu soruda sitesi numaralı telefonu aradım).

Herhangi biri yardımcı olabilirse, minnettarım.

Teşekkürler!

Güncelleme 1 - Ben LocationMatch kaldırıp .conf dosyada ProxyPass doğrudan koyarsanız işe almak 09/06/2017

:

ProxyPass    /site ! 
ProxyPassReverse  /site ! 
ProxyPass    /http://127.0.0.1:8080 
ProxyPassReverse  /http://127.0.0.1:8080 

Fakat, isterim bilmek ister, neden bu? Bu yönergeleri LocationMatch etiketinin dışına yerleştirmenin etkisi nedir? Ve en önemlisi, neden aynı sonucu LocationMatch kullanarak gerçekleştiremiyorum?

cevap

4

hata oldukça açık olduğunu düşünüyorum: Sen

When used inside a <Location> section, the first argument is omitted and the local directory is obtained from the <Location> . The same will occur inside a <LocationMatch> section; however, ProxyPass does not interpret the regexp as such, so it is necessary to use ProxyPassMatch in this situation instead.

:

the documentation göre
ProxyPass|ProxyPassMatch can not have a path when defined in a location. 

, Location veya LocationBlock gibi bir bağlam bloğunun içinde ProxyPass yönergesi bir yol kabul etmez

ProxyPass    /site ! 
: bir yol kullanmaya çalıştığınız çünkü hata alıyorum

Bunu, <Location> kesitler birden kullanarak teoride bu sorunu çözmek için deneyebilirsiniz: ordering of these sections is important

<Location /> 
    ProxyPass http://backend/ 
</Location> 

<Location /site> 
    ProxyPass ! 
</Location> 

.

LocationMatch bloğu dışındaki ProxyPass yönergelerini kullanmanın çözümünüz, muhtemelen en basit çözümdür.


Bir kenar notu olarak, LocationMatch yönergesinin yanlıştır. LocationMatch argümanı normal bir ifadedir ve /* sadece / karakterden oluşan URL'lerle eşleşir. Yani, / veya // veya ///////// vb. Ile eşleşir. Bence gerçekten /.* kastediyorsunuz. Düzenli ifadedeki * "önceki karakter, sıfır veya daha fazla zaman" anlamına gelir.

+0

Tamam, anladım. Teşekkürler! Çözümünüzü 'Location' kullanarak deneyeceğim. Ancak, 'Yer' kullanmadan, fark nedir? Bu proxy değerlerini doğrudan dosyada ayarlamak, VirtualHost'un kendisi veya "Directory" için ayarlarla aynı mıdır? Bu yaklaşımla ilgili herhangi bir sorun var mı? – Luiz

+0

'ProxyPass'ı ayarlamak için' Location' bloğunu kullanıyorsanız '' '' '' '' '' '' '' '' '' '' '' '' proxyPass'ı yapılandırma dosyasının en üst seviyesinde kullanarak bir farkın çok fazla olduğundan emin değilim. "Konum" bölümünde sadece "ProxyPass" den daha fazlasını yapıyorsanız, ilgili yapılandırma öğelerini birlikte tutmayı tercih edebilirsiniz. – larsks