0

I'm using Apache HTTPD in front of Apache Tomcat with the following virtual host:

$ 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>

The URLs without www subdomain like onlinetaskboard.com/login and onlinetaskboard.com/someOtherValidPage work fine, however once I include the www subdomain like www.onlinetaskboard.com, then I get a 404 error in some browsers like Chrome.

Here are the request/response headers which I observed in Chrome.

With www subdomain:

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

And without the www subdomain:

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

How is this caused and how can I solve it?

0

Is there something validating the URL on the other side? What happens if you just go to ip.address:8080 do you get a 404? I am just wondering if it is something tomcat could be doing.

Also, if you add

"ProxyPreserveHost On"

this will keep the request header so you can pass it to tomcat.

Also, why do you have all of this? cgi-bin and such:

Options FollowSymLinks AllowOverride None

<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
  • well, its vhost for the domain name only so putting just the ip in the browser wont work. I tried. but nice approach for other things you said. the issue has surprisingly gone away and works fine now. I dont know how. i never changed anything. still investigating. I hope I dont need mode_ajp or mod_jk – user199487 Nov 16 '13 at 16:04
0

I think the difficulties you experience are that your reverse proxy configuration is to the same hostname as the apache virtualhost servername.

Just keeping the most relevant directives:

<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>

The DocumentRoot is a bit redundant since you forward everything to tomcat with the ProxyPass / directive.

I think using the same ServerName as the hostname for the tomcat URL might be breaking redirects, try the following:

<VirtualHost *:80>
    ServerName www.onlinetaskboard.com
    ProxyPass / http://localhost:8080/
    ProxyPassReverse /  http://localhost:8080/
</VirtualHost>
  • all is fine in firefox for both www inclusive and www exclusive. What I cant understand is all browsers just make request in same manner. this concludes that chrome is requesting or receiving the response in a different way? – user199487 Nov 15 '13 at 17:52
  • I have no, idea, forced to use IE here... – HBruijn Nov 15 '13 at 18:14

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.