Назад | Перейти на главную страницу

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, то в некоторых браузерах, таких как 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