server { listen 80; listen [::]:80 ipv6only=on; server_name www.example.com; root /var/www/vhosts/example.com/public/; location / { index index.php index.html index.htm; } # Enforce No WWW - I put this in an include: # include /etc/nginx/includes/enforce_non_www; if ($host ~* ^www\.(.*)) { set $host_without_www $1; rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent; } # Check if file exists if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?/$1 last; break; } # catch all error_page 404 /index.php; # The PHP Inclusion Block # include /etc/nginx/includes/php; location ~ \..*/.*\.php$ { # I'm pretty sure this stops people trying to traverse your site to get to other PHP files return 403; } location ~ \.php(.*)$ { # Pass the PHP files to PHP FastCGI for processing try_files $uri = 404; fastcgi_split_path_info ^(.+\.php)(/.+)$; include /etc/nginx/fastcgi_params; # fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; } # Deny Any Access to .htaccess Files That May Be Present (not usually in issue in Laravel) # include /etc/nginx/includes/deny_htaccess; location ~ /\.ht { deny all; } }