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>
Другие вопросы по тегам