Apache Webserver ReverseProxy to serve Apache Solr

2019-07-26 09:38发布

问题:

I'm trying to run an Apache Solr Service (on its emdedded jetty server) on a remote server. The admin has provided me following information:

DNS: my.server.com

IP: xxx.xxx.xxx

Server OS: 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64 GNU/Linux

Only Port 80 is accessible. On the server we want to deploy Apache Solr and a microservice which uses Solr as search engine. I want to use Apache Webserver to forward the HTTP-Request to the Solr Admin UI and to the microservice UI, but it doesn't seem to work, I use Apache Server version: Apache/2.4.10 (Debian) Server built: Sep 15 2016 20:44:43.

I installed Apache and started the server, so far everything works as expected. I can access the admin view from Apache entering the DNS in my browser.

I enabled a few modules following this articel https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension:

  • a2enmod proxy
  • a2enmod proxy_http
  • a2enmod proxy_ajp
  • a2enmod rewrite
  • a2enmod deflate
  • a2enmod headers
  • a2enmod proxy_balancer
  • a2enmod proxy_connect
  • a2enmod proxy_html

Then I tried to configure a virtual host under /etc/apache2/sites-available/myconf.conf:

 <VirtualHost *:80>
  DocumentRoot /var/www/html
  ErrorLog /var/log/apache2/error.log
  CustomLog /var/log/apache2/access.log combined

  ProxyPass        /solr http://my.server.com:8983 retry=0 timeout=5
  ProxyPassReverse /solr http://my.server.com:8983
  ProxyPass        /microservice http://my.server.com:6868 retry=0 timeout=5
  ProxyPassReverse /microservice http://my.server.com:6868
  LogLevel debug

</VirtualHost>

Solr uses its standard port 8983 and the microservice will be on port 6868. When I try to acces solr with http://my.server.com/solr I get an HTTP 503 Service unavailable.

I first tried this:

/usr/sbin/setsebool -P httpd_can_network_connect 1

But it changed nothing. I also had to install first:

apt-get install policycoreutils

to make this option available. The solr service seems to be ok:

solr status

Found 1 Solr nodes:

Solr process 14082 running on port 8983
{
  "solr_home":"/etc/apache-solr/solr-6.2.0/server/solr",
  "version":"6.2.0 764d0f19151dbff6f5fcd9fc4b2682cf934590c5 - mike - 2016-08-20 05:41:37",
  "startTime":"2016-10-07T12:02:05.300Z",
  "uptime":"0 days, 1 hours, 29 minutes, 55 seconds",
  "memory":"29.7 MB (%6.1) of 490.7 MB"}

The Apache log keeps saying:

The timeout specified has expired: AH00957: HTTP: attempt to connect to xxx.xxx.xxx:8983 (my.server.com) failed
AH00959: ap_proxy_connect_backend disabling worker for (my.server.com) for 0s
AH01114: HTTP: failed to make connection to backend: my.server.com

Without my timeout setting everthing keeps the same but it takes ages before I get the 503 Error.

Any hints? After one day struggeling I'm depressed ... all I want is to finish the task.

Thanks in advance!

回答1:

It turns out that I needed to append a slash to the urls:

  ProxyPass        /solr/ http://my.server.com:8983/ retry=0 timeout=5
  ProxyPassReverse /solr/ http://my.server.com:8983/
  ProxyPass        /microservice/ http://my.server.com:6868/ retry=0 timeout=5
  ProxyPassReverse /microservice/ http://my.server.com:6868/