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>