Я использую Apache HTTPD перед Apache Tomcat со следующим виртуальным хостом:
$ cat /etc/apache2/sites-enabled/onlinetaskboarddotcom
<VirtualHost *:80>
ServerAdmin comented@out.com
ServerName www.onlinetaskboard.com
ServerAlias onlinetaskboard.com
DocumentRoot /home/ubuntu/www/apache/onlinetaskboarddotcom
ProxyPass / http://www.onlinetaskboard.com:8080/
ProxyPassReverse / http://www.onlinetaskboard.com:8080/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/ubuntu/www/apache/onlinetaskboarddotcom/>
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
</VirtualHost>
URL-адреса без www
поддомен как onlinetaskboard.com/login
и onlinetaskboard.com/someOtherValidPage
работают нормально, однако как только я включаю www
поддомен как www.onlinetaskboard.com
, то в некоторых браузерах, таких как Chrome, появляется ошибка 404.
Вот заголовки запроса / ответа, которые я наблюдал в Chrome.
С участием www
поддомен:
Request: Request URL:http://www.onlinetaskboard.com/ Request Method:GET Status Code:404 Not Found Request headers: Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Connection:keep-alive Cookie:JSESSIONID=DE44F60835D23E6AB3CC2A2E8B9D6279 Host:www.onlinetaskboard.com User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36 Response headers: Connection:Keep-Alive Content-Encoding:gzip Content-Length:377 Content-Type:text/html;charset=ISO-8859-1 Date:Thu, 14 Nov 2013 23:39:24 GMT Keep-Alive:timeout=5, max=99 Server:Apache-Coyote/1.1 Vary:Accept-Encoding X-Pad:avoid browser bug
И без www
поддомен:
Request: Request URL:http://onlinetaskboard.com/ Request Method:GET Status Code:302 Found Request Headers: Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Cache-Control:max-age=0 Connection:keep-alive Cookie:JSESSIONID=36D1DED5A3F7B5E185FE5D5EDD4457FC Host:onlinetaskboard.com User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36 Response headers: Connection:Keep-Alive Content-Length:0 Date:Fri, 15 Nov 2013 00:04:33 GMT Keep-Alive:timeout=5, max=100 Location:http://onlinetaskboard.com/login Server:Apache-Coyote/1.1
Как это вызвано и как я могу это решить?
Я думаю, что трудности, с которыми вы сталкиваетесь, заключаются в том, что ваша конфигурация обратного прокси-сервера использует то же имя хоста, что и имя сервера виртуального хоста apache.
Просто соблюдайте самые важные директивы:
<VirtualHost *:80>
ServerName www.onlinetaskboard.com
DocumentRoot /home/ubuntu/www/apache/onlinetaskboarddotcom
ProxyPass / http://www.onlinetaskboard.com:8080/
ProxyPassReverse / http://www.onlinetaskboard.com:8080/
</VirtualHost>
DocumentRoot немного избыточен, поскольку вы пересылаете все на tomcat с ProxyPass /
директива.
Я думаю, что использование того же ServerName в качестве имени хоста для URL-адреса tomcat может нарушать перенаправления, попробуйте следующее:
<VirtualHost *:80>
ServerName www.onlinetaskboard.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
Есть ли что-то, подтверждающее URL-адрес на другой стороне? Что произойдет, если вы просто перейдете на ip.address: 8080, получите ли вы 404? Мне просто интересно, может ли это делать кот.
Кроме того, если вы добавите
"ProxyPreserveHost On"
это сохранит заголовок запроса, чтобы вы могли передать его tomcat.
Кроме того, зачем вам все это? cgi-bin и тому подобное:
Параметры FollowSymLinks AllowOverride Нет
<Directory /home/ubuntu/www/apache/onlinetaskboarddotcom/>
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