Question

php + nginx = 500 error, help fix please

Hello. Followed the tutorial https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-12-04

Wall went well.

But when i try to run my project i get(nginx error.log) *16 rewrite or internal redirection cycle while internally redirecting to “/index.html”

my server block:

server { listen 80;

    root /var/www/project/public;
    index index.php index.html index.htm;

    server_name myip;

    location / {
            try_files $uri $uri/ /index.html;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
          root /var/www/project/public;
    }

    # pass the PHP scripts to FastCGI server listening on the php-fpm socket
    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;

}

Show comments

Submit an answer


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

KFSys
Site Moderator
Site Moderator badge
June 12, 2023
Pinned Answer

Heya,

Your issue seems to be related to a redirection loop in your NGINX configuration. Let’s try to address it.

You have this block in your server configuration:

location / {
    try_files $uri $uri/ /index.html;
}

What it does is it tries to serve the request URI as a file if it exists ($uri), then as a directory if it exists ($uri/), and then falls back to /index.html if neither exists.

If /index.html does not exist, NGINX will keep trying to redirect to /index.html because of the try_files directive, leading to the redirection loop.

The solution to this issue depends on your application. If you are running a PHP application, you probably want to redirect to /index.php instead of /index.html:

location / {
    try_files $uri $uri/ /index.php;
}

If you are serving a static website and /index.html should exist but doesn’t, you need to check that the file is present in the /var/www/project/public directory and that NGINX has sufficient permissions to read the file.

Remember to restart or reload the NGINX server after making changes to the configuration:

or

sudo systemctl restart nginx

Kindly check if this file is available or not. /var/run/php5-fpm.sock And restart the php-fpm server

No idea what are you trying, but did you just made a rewrite to fix the loop?

Also whats the point of this with an html file?

    location / {
            try_files $uri $uri/ /index.html;
    }

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel