Only the last error_page 404 will be triggered, so if you want to let Codeigniter handle the error_page handle it to /index.php
error_page 404 /index.php;
Also, this is unnecessary if you want to let Codeigniter handle the error_page 404.
location = /404.php {
internal;
...
}