Apache Mysterious 404 Error

Home » CentOS » Apache Mysterious 404 Error
CentOS 18 Comments

Hey guys,

Just have a question about apache. Hoping to get an opinion on this.

I’ve just setup a site under apache 2.4.

And made sure that the document root setup in the vhost for the site I’m serving has permissions for the apache user. Yet some of the files are throwing a 404 error in a browser even tho they are clearly present and accounted for on the file system.

For example, I’m getting this error:

(index):1 GET http://stage.theshopatmycomany.com/mycomanyStore/images*/altImg.png
404 (*Not Found)

(index):1 GET http://stage.theshopatmycomany.com/mycomanyStore/images*/Jimmy_485x1215_R2.jpg
404* (Not Found)

(index):1 GET http://stage.theshopatmycomany.com/mycomanyStore/images*/Jimmy_792x802_R2.jpg
404* (Not Found)

(index):1 GET http://stage.theshopatmycomany.com/mycomanyStore/images*/Jimmy_792x413_R2.jpg
404* (Not Found)
And yet as I mentioned all those files are definitely there on the file system:

[root@aozwsls00019la apache2]# ls -l
/var/www/mycomanystore/images/altImg.png
/var/www/mycomanystore/images/Jimmy_485x1215_R2.jpg
/var/www/mycomanystore/images/Jimmy_792x802_R2.jpg
/var/www/mycomanystore/images/Jimmy_792x413_R2.jpg

-rw-r–r–. 1 daemon daemon 128 Aug 27 12:22
/var/www/mycomanystore/images/altImg.png

-rw-r–r–. 1 daemon daemon 260983 Jul 16 14:03
/var/www/mycomanystore/images/Jimmy_485x1215_R2.jpg

-rw-r–r–. 1 daemon daemon 126628 Jul 16 14:00
/var/www/mycomanystore/images/Jimmy_792x413_R2.jpg

-rw-r–r–. 1 daemon daemon 222568 Jul 16 13:56
/var/www/mycomanystore/images/Jimmy_792x802_R2.jpg

And all those files have the correct ownership for apache:

[root@aozwsls00019la apache2]# egrep -i “user|group” conf/httpd.conf |
egrep -i -v -e ‘#’ -e log -e module

User daemon

Group daemon

All the files are owned by daemon:daemon!! So why on earth are these files giving a 404?

This is my virtual host for the site:

ServerAdmin timothy.dunphy@mycomany.com

DocumentRoot /var/www/mycomanystore

ServerName stage.theshopatmycomanystudios.com

ServerAlias 173.213.219.48

ErrorLog logs/store_error_log

LogFormat “%h %l %u %t \”%r\” %>s %b” common

CustomLog logs/store_access_log common

DirectoryIndex index.html

AddHandler cgi-script .cgi

Options -Indexes +FollowSymLinks +ExecCGI +Includes

AllowOverride All

Require all granted

ExpiresActive On

ExpiresDefault “access plus 30 minute”

RewriteEngine On

RewriteCond %{REQUEST_METHOD} ^TRACE

RewriteRule .* – [F]

Thanks

Tim

18 thoughts on - Apache Mysterious 404 Error

  • Hi apache on GNU/Linux is case-sensitive samples:

    /var/www/mycomanystore/images/altImg.png
    /var/www/mycomanystore/images/Jimmy_485x1215_R2.jpg
    /var/www/mycomanystore/images/Jimmy_792x802_R2.jpg
    /var/www/mycomanystore/images/Jimmy_792x413_R2.jpg

    on browser :

    (index):1 GET
    http://stage.theshopatmycomany.com/mycomanyStore/images*/altImg.png

    try :

    (index):1 GET
    http://stage.theshopatmycomany.com/mycomanystore/images/altImg.png
    <http://stage.theshopatmycomany.com/mycomanyStore/images*/altImg.png>

    2015-08-27 19:18 GMT-03:00 Tim Dunphy :

  • Hey Rodrigo,

    Thanks for your reply.

    Well those errors are pulled from the Chrome developer tools.

    I notice if I do a GET on that file using both all lower case as well as the upper case that’s in the URL I get the same result:

    [root@aozwsls00019la apache2]# GET
    http://stage.theshopatmycompanystudios.com/mycopmanyStore/images/altImg.png


    404 Not Found

    Not Found

    The requested URL /mycompanyStore/images/altImg.png was not found on this server.

    [root@aozwsls00019la apache2]# GET
    http://stage.theshopatmycompanystudios.com/mycompanystore/images/altImg.png


    404 Not Found

    Not Found

    The requested URL /mycpmpanystore/images/altImg.png was not found on this server.

    This is how that file looks on the command line. I made a symlink to account for the change in case, because I realize that’s relevant:

    -rw-r–r–. 1 daemon daemon 128 Aug 27 12:22
    /var/www/nbcstore/images/altImg.png

    -rw-r–r–. 1 daemon daemon 128 Aug 27 12:22
    /var/www/mycompanyStore/images/altImg.png

    Still not sure why I’m not able to do a GET on that and those other files. Appreciate your input tho! And any other advice is certainly welcome!

    Tim

  • Do you get any errors in the error logs ? And also have you checked whether selinux is having an effect ?

    Phil.

  • I can’t tell if you are sending a literal ‘*’ in your GET request, but if you are, I would try without it as I don’t believe there is globbing in http nor do I believe that ‘*’ is a legal character in a URL. I could be wrong about all of this, but that is what stands out to me.

  • A GET request should not include the protocol (http) or hostname
    (stage.theshopatmycomany.com). Also as others pointed out it is case-sensitive and you cannot use globbing (*) in the request. Try this:

    GET /mycomanystore/images/altImg.png HTTP/1.1
    Host: stage.theshopatmycomanystudios.com

    (note hit enter twice after the Host: line)

    Peter

  • Tim Dunphy wrote on 28/08/2015 00:18:

    Put

    CheckSpelling on CheckCaseOnly on

    in vhost or Apache configuration

    You have to enable mod_speling in /etc/httpd/conf.modules.d/00-base.conf

  • Hi,

    It could be due to some dependency issue aslo, please see the error logs for more information.

    –Regards Ashishkumar S. Yadav

  • Hi Tim,

    It really helps both the web server and us if you are consistent with both spelling and capitalisation. I don’t know whether you retyped stuff into your posting or copied and pasted it, but if you look below you will see at least these variations:

    /mycopmanyStore/
    /mycompanystore/
    /mycpmpanystore/
    /mycompanyStore/

    And your original posting showed the path as containing /mycomanystore/ (without p)

    Always copy-and-paste if possible, rather than inaccurately re-typing, so we are not trying to help you with the wrong problem!

    In addition, if you are indeed using symlinks to point at the real directories or files, you need to make sure that Options FollowSymLinks is enabled in your httpd configuration file.

    Cheers Tony

    In article , Tim Dunphy wrote:

  • Check the links again. Remove the * from images*/ and you should be all set.

    —–Original Message—

  • Hey guys,

    Sorry for the failed attempts at obscuring the company I work for. My boss wouldn’t take too kindly to it if I revealed that information on a mailing list. :)

    So anyway, I realized that capitalization might be the problem. So I
    renamed the directory to match what was in the URL. That didn’t solve the problem.

    However I noticed this message turning up in the logs:

    [Fri Aug 28 01:27:30.057020 2015] [proxy:warn] [pid 23782:tid
    139661984888576] [client 173.213.212.234:14579] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/Jimmy_792x802_R2.jpg. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    [Fri Aug 28 01:27:30.057216 2015] [proxy:warn] [pid 23780:tid
    139661995378432] [client 173.213.212.234:14577] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/Jimmy_485x1215_R2.jpg. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    [Fri Aug 28 01:27:43.377172 2015] [proxy:warn] [pid 23890:tid
    139661827540736] [client 173.213.212.234:2425] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/altImg.png. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    [Fri Aug 28 01:27:43.377269 2015] [proxy:warn] [pid 23889:tid
    139661942929152] [client 173.213.212.234:2426] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/Jimmy_485x1215_R2.jpg. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    [Fri Aug 28 01:27:43.377384 2015] [proxy:warn] [pid 23889:tid
    139661953419008] [client 173.213.212.234:2427] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/Jimmy_792x802_R2.jpg. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    [Fri Aug 28 01:27:43.382079 2015] [proxy:warn] [pid 23891:tid
    139662047827712] [client 173.213.212.234:2430] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/Jimmy_792x413_R2.jpg. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    [Fri Aug 28 01:28:01.750944 2015] [proxy:warn] [pid 23977:tid
    139661911459584] [client 173.213.212.234:6011] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/altImg.png. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    [Fri Aug 28 01:28:01.751086 2015] [proxy:warn] [pid 23978:tid
    139662016358144] [client 173.213.212.234:6013] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/Jimmy_485x1215_R2.jpg. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    [Fri Aug 28 01:28:01.755018 2015] [proxy:warn] [pid 23977:tid
    139661890479872] [client 173.213.212.234:6012] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/Jimmy_792x413_R2.jpg. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    [Fri Aug 28 01:28:01.755120 2015] [proxy:warn] [pid 23978:tid
    139662005868288] [client 173.213.212.234:6014] AH01144: No protocol handler was valid for the URL /mycompanyStore/images/Jimmy_792x802_R2.jpg. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer:
    http://stage.theshopatmycompanystudios.com/

    So taking the advice of that eror I tried enabling all the proxy modules in the apache config:

    LoadModule proxy_module modules/mod_proxy.so

    LoadModule proxy_connect_module modules/mod_proxy_connect.so

    LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

    LoadModule proxy_http_module modules/mod_proxy_http.so

    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

    But those files are still 404ing. Not sure where to take it from here. I’d appreciate any help you can give!

    Thanks

  • What is the absolute path on the server that /mycompanyStore/images/ is store in?

    —–Original Message—

  • Hi Robert,

    It’s this:

    drwxr-xr-x. 2 daemon daemon 4096 Aug 27 12:34 /var/www/mycompanyStore/images

    Thanks,

    Tim

  • In article , Tim Dunphy wrote:

    It’s easily deducible from the IP addresses anyway…

    Well if it’s a single web server that you want to serve its own files, it shouldn’t be doing any proxy operations anyway. So rather than enabling proxy modules, it would be better to understand why it is trying to do a proxy operation.

    It’s hard to help further without seeing your http config files in
    /etc/http/conf and /etc/http/conf.d. To save space, you can filter out all comments and blank lines like this:

    # grep ‘^ *[^# ]’ /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf >/tmp/http-config.txt

    That will output all lines that start with zero or more spaces followed by at least one character that is not a space or a hash. It will also precede each line with the name of the file it is in.

    You can then edit /tmp/http-config.txt with some global replaces if you want to obscure the domain name and document root names, and post the result.

    Cheers Tony

  • Also need to see the error_log entries from the back-end httpd server that’s serving from the documentroot. The proxy server’s logs
    (whether it should be there or not) only show the proxy issues, not the issues that are causing the 404s, so aren’t really relevant to the 404 issue. The back-end server’s logs will indicate why the file can’t be found, or generally at least pretty good hints.

  • In article <0F55E883640C125375C75506@ritz.innovate.net>, Richard wrote:

    The first question is: are there even a separate back-end and front-end, or is it just a single server that is misconfigured and is trying to do proxy operations when it shouldn’t? It sounds to me like the latter.

    Cheers Tony

  • Guys,

    We actually found the problem. The problem was actually in a javascript file. It was referring to it’s parent directory as mycompanyStore. So once I noticed that, I went into that directory and created a symlink.

    ln -s . mycompanyStore from within that directory. That let the java script know that the directory it was in was actually the one that it wanted. Before that was done Apache was looking for the image files in
    /var/www/mycompanyStore/mycompanyStore/images/foo.img