302/301 и 404 проблема перенаправления для перенаправления Apache для Tomcat
Я использую 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затем я получаю ошибку 404 в некоторых браузерах, таких как Chrome.
Вот заголовки запроса / ответа, которые я наблюдал в Chrome.
С www субдомен:
Запрос:
URL запроса:http://www.onlinetaskboard.com/
Метод запроса:GET
Код статуса:404 не найден
Заголовки запроса:
Accept: Текст / HTML, приложение / XHTML + XML, приложение / XML; д =0,9,*/*; д =0,8
Accept-Encoding: GZIP, выкачать, SDCH
Accept-Language: EN-US, ан; д =0,8
Подключение: держать-жив
Cookie:JSESSIONID=DE44F60835D23E6AB3CC2A2E8B9D6279
Ведущий:www.onlinetaskboard.com
Пользователь-агент:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, как Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36
Заголовки ответа:
Connection:Keep-Alive
Content-Encoding: GZIP
Content-Length:377
Content-Type: Текст /html; кодировка =ISO-8859-1
Дата: четверг, 14 ноября 2013 г. 23:39:24 GMT
Keep-Alive: тайм-аут =5, максимум =99
Сервер: Apache-Койот /1.1
Vary:Accept-Encoding
X-Pad: избежать ошибки браузераИ без www субдомен:
Запрос:
URL запроса:http://onlinetaskboard.com/
Метод запроса:GET
Код статуса:302 найдено
Заголовки запроса:
Accept: Текст / HTML, приложение / XHTML + XML, приложение / XML; д =0,9,*/*; д =0,8
Accept-Encoding: GZIP, выкачать, SDCH
Accept-Language: EN-US, ан; д =0,8
Cache-Control: макс возраста =0
Подключение: держать-жив
Cookie:JSESSIONID=36D1DED5A3F7B5E185FE5D5EDD4457FC
Ведущий:onlinetaskboard.com
Пользователь-агент:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, как Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36
Заголовки ответа:
Connection:Keep-Alive
Content-Length:0
Дата: пятница, 15 ноября 2013 г. 00:04:33 GMT
Keep-Alive: тайм-аут =5, максимум =100
Расположение: Http://onlinetaskboard.com/login
Сервер: Apache-Койот / 1.1Как это вызвано и как я могу решить это?
2 ответа
Есть ли что-то проверяющее 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
Я думаю, что трудности, с которыми вы сталкиваетесь, состоят в том, что ваша конфигурация обратного прокси-сервера имеет то же имя хоста, что и имя сервера виртуального хоста 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>