Nginx keeps looking for index.html

18,036

Solution 1

The problem was that despite my own vhosts configuration being in /etc/nginx/conf.d/default.conf, nginx -T (which shows nginx's loaded configuration) didn't show the file having been read.

The include /etc/nginx/conf.d/*.conf; directive was missing from my nginx.conf.

Solution 2

nginx is using the default value for the index directive to process the URI / (as the directory does indeed exist).

You should add an explicit index statement to your server block.

server {
    ...
    index index.php;
    location / {
        try_files $uri /index.php?$query_string;
    }

    # nothing local, let fpm handle it
    location ~ [^/]\.php(/|$) {
        ...
    }
}

See this document for more.

Share:
18,036

Related videos on Youtube

Ben
Author by

Ben

Updated on October 31, 2022

Comments

  • Ben
    Ben over 1 year

    http://localhost is showing a 404 by nginx 1.13. When I look at the container logs I can see that nginx isn't passing the request off to php-fpm but is instead looking for an index.html. I can't figure out why it won't pass the request to php-fpm.

    /etc/nginx/conf.d/default.conf

    I've verified this file is loaded.

    server {
        listen   80;
        root /var/www/html/public;
        index index.php;
    
        charset utf-8;
    
        # look for local files on the container before sending the request to fpm
        location / {
            try_files $uri /index.php?$query_string;
        }
    
        # nothing local, let fpm handle it
        location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass            localhost:9000;
            fastcgi_index           index.php;
            include                 fastcgi_params;
            fastcgi_param           REQUEST_METHOD  $request_method;
            fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param           QUERY_STRING    $query_string;
            fastcgi_param           CONTENT_TYPE    $content_type;
            fastcgi_param           CONTENT_LENGTH  $content_length;
            # Httpoxy exploit (https://httpoxy.org/) fix
            fastcgi_param           HTTP_PROXY "";
    
            # allow larger POSTS for handling stripe payment tokens
            fastcgi_buffers 16 16k;
            fastcgi_buffer_size 32k;
       }
    }
    

    Process list within the web container:

    PID   USER     TIME   COMMAND
        1 root       0:00 s6-svscan -t0 /var/run/s6/services
       33 root       0:00 s6-supervise s6-fdholderd
      170 root       0:00 s6-supervise php-fpm
      171 root       0:00 s6-supervise nginx
      173 root       0:00 php-fpm: master process (/usr/local/etc/php-fpm.conf)
      174 root       0:00 {run} /bin/sh ./run
      177 root       0:00 nginx: master process nginx -g daemon off;
      187 nginx      0:00 nginx: worker process
      192 www-data   0:00 php-fpm: pool www
      193 www-data   0:00 php-fpm: pool www
      194 root       0:00 ps -ef
    

    Container logs

    web_1    | 2017/05/13 06:13:10 [error] 187#187: *1 "/etc/nginx/html/index.html" is not found (2: No such file or directory), client: 172.19.0.1, server: localhost, request: "GET / HTTP/1.1", host: "mysite.local"
    web_1    | 172.19.0.1 - - [13/May/2017:06:13:10 +0000] "GET / HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
    

    Update Removed all references to index.htm per a few of the below comments

  • Ben
    Ben almost 7 years
    Thanks for the feedback. After implementing that change and verifying it's in the filesystem by running docker-compose exec web cat /etc/nginx/conf.d/default.conf I'm still seeing the problem.
  • ThangTD
    ThangTD almost 7 years
    Can you give me content of /etc/nginx/conf.d/default.conf file ? Better you login inside your container and check files that I mentioned. Because after change you also need to refresh your nginx also.
  • Ben
    Ben almost 7 years
    I've updated the above configuration. I restarted by containers after making configuration changes to the virtual host. The vhost file is provided via a mount, so that's sufficient for updating it.
  • ThangTD
    ThangTD almost 7 years
    If that, you can the original file before it's mounted to that container, then reload container to take effect. Because we are now facing with problem on nginx so any way you need to do so.