Nginx keeps looking for index.html
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.
Related videos on Youtube
Ben
Updated on October 31, 2022Comments
-
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 almost 7 yearsThanks 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 almost 7 yearsCan 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 almost 7 yearsI'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 almost 7 yearsIf 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.