Report this

What is the reason for this report?

Laravel 7 reverse proxy access denied Nginx

Posted on October 2, 2020

I have seeting NGINX for Laravel 7 Apps, but i got erro for acces denid. how should i do?

2020/10/02 09:38:31 [crit] 54509#54509: *14 stat() "/var/www/html/laravel/wadrobe/public/favicon.ico" failed (13: Permission denied), client: 172.69.135.130, server: laksmi.sembara.site, request: "GET /favicon.ico HTTP/1.1", host: "laksmi.sembara.site", referrer: "http://laksmi.sembara.site/"
2020/10/02 09:38:31 [crit] 54509#54509: *14 stat() "/var/www/html/laravel/wadrobe/public/favicon.ico" failed (13: Permission denied), client: 172.69.135.130, server: laksmi.sembara.site, request: "GET /favicon.ico HTTP/1.1", host: "laksmi.sembara.site", referrer: "http://laksmi.sembara.site/"
2020/10/02 09:38:31 [crit] 54509#54509: *14 stat() "/var/www/html/laravel/wadrobe/public/index.php" failed (13: Permission denied), client: 172.69.135.130, server: laksmi.sembara.site, request: "GET /favicon.ico HTTP/1.1", host: "laksmi.sembara.site", referrer: "http://laksmi.sembara.site/"
2020/10/02 09:38:31 [crit] 54509#54509: *14 stat() "/var/www/html/laravel/wadrobe/public/index.php" failed (13: Permission denied), client: 172.69.135.130, server: laksmi.sembara.site, request: "GET /favicon.ico HTTP/1.1", host: "laksmi.sembara.site", referrer: "http://laksmi.sembara.site/"

My nginx setting

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
	listen 80;
	listen [::]:80;

	# SSL configuration
	#
	# listen 443 ssl default_server;
	# listen [::]:443 ssl default_server;
	#
	# Note: You should disable gzip for SSL traffic.
	# See: https://bugs.debian.org/773332
	#
	# Read up on ssl_ciphers to ensure a secure configuration.
	# See: https://bugs.debian.org/765782
	#
	# Self signed certs generated by the ssl-cert package
	# Don't use them in a production server!
	#
	# include snippets/snakeoil.conf;

	root /var/www/html/laravel/wadrobe/public;

	# Add index.php to the list if you are using PHP
	index index.html index.htm index.nginx-debian.html;

	server_name laksmi.sembara.site www.laksmi.sembara.site;

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ /index.php$is_args$args;
	}

	# pass PHP scripts to FastCGI server
	#
	location ~ \.php$ {
	#	include snippets/fastcgi-php.conf;
	#
	#	# With php-fpm (or other unix sockets):
	#	fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
	#	# With php-cgi (or other tcp sockets):
	#	fastcgi_pass 127.0.0.1:9000;
        try_files $uri /index.php =404;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
	    fastcgi_index index.php;
    	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#
	location ~ /\.ht {
		deny all;
	}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#	listen 80;
#	listen [::]:80;
#
#	server_name example.com;
#
#	root /var/www/example.com;
#	index index.html;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}



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!

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.

Hi there @sembara9090,

It looks like that your permissions are not correct. Can you run the following two commands and share the output so that I could see what are your exact file permissions and ownership set to:

  1. ls -lah /var/www/html/laravel/wadrobe/public

And then also check the user that Nginx is running as:

  1. ps aux | grep -i nginx

Another thing that I could suggest is using the LaraSail community tool, it will set up your server and allow you to deploy new projects with just 1 command:

https://www.digitalocean.com/community/tools/larasail

Or you could use the 1-Click installation for Laravel from the Marketplace:

https://marketplace.digitalocean.com/apps/laravel

Here is a quick video on how to do that as well:

Hope that this helps! Regards, Bobby

Step 1: Verify Nginx User

First, determine the user under which Nginx is running. This is typically www-data on Ubuntu systems, but you can confirm by checking the Nginx configuration:

grep 'user' /etc/nginx/nginx.conf

This will output the user Nginx is configured to run as, which is usually the first line in nginx.conf.

Step 2: Set Correct Ownership and Permissions

You need to ensure that the www-data user (or whichever user Nginx runs under) has the correct permissions to read and execute files within your Laravel project’s directory.

  1. Change the Ownership: Assuming your Laravel application is located at /var/www/html/laravel/wadrobe/public and Nginx runs as www-data, you can set the proper ownership with:
sudo chown -R www-data:www-data /var/www/html/laravel/wadrobe
  1. Set Correct Directory and File Permissions: Ensure directories have 755 and files have 644 permissions. You can set these permissions with:
find /var/www/html/laravel/wadrobe -type d -exec chmod 755 {} \;
find /var/www/html/laravel/wadrobe -type f -exec chmod 644 {} \;

Step 3: Configure the Correct Index Files

Your Nginx configuration suggests that it’s not correctly set up for Laravel, which uses index.php as the primary entry point. Update your index directive in the Nginx configuration to include index.php:

index index.php index.html index.htm;

Step 4: Update the PHP Location Block

Make sure that the PHP processing block is correctly configured. It seems alright in your provided configuration, but ensure that fastcgi_param points exactly to where the PHP files reside:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Step 5: Restart Nginx

After making these changes, restart Nginx to apply them:

sudo systemctl restart nginx

Step 6: Check the Error Logs

If the problem persists after making these changes, check the Nginx error logs again to see if there are new or unresolved issues:

sudo tail -f /var/log/nginx/error.log

Step 7: Check SELinux (Security Enhanced Linux)

If SELinux is enforcing and causing issues (common on some distributions), you might need to adjust its policies to allow Nginx to interact with your web content:

sestatus

If it’s enforcing, you might need to update SELinux permissions or set it to permissive mode temporarily to diagnose the issue.

By following these steps, you should

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.