Trying to setup Laravel 4.1 installation on a nginx server (first time) and I'm given "not found" for every Laravel route instead of the view expected. The main page loads fine.

Please note, site can only be accessed by IP which is why I have the filler IP for server_name.


listen 80;

user  nginx;

worker_processes 4;

worker_rlimit_nofile 200000;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections 4000;

    use epoll;

    multi_accept on;

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    include  /etc/nginx/conf.d/*.conf;
    include  /etc/nginx/sites-enabled/*;


server {
    listen 80;
    server_name "";
    access_log  /srv/www/mysite/logs/access.log;
    error_log  /srv/www/mysite/logs/error.log;
    root  /srv/www/mysite/public_html/public;
    rewrite_log  on;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log /var/log/nginx/access.log main buffer=16k;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_proxied any;
    #gzip_proxied expired no-cache no-store private auth;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;

    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    sendfile on;

    tcp_nopush on;

    tcp_nodelay on;

    keepalive_timeout 90;

    keepalive_requests 100000;

    reset_timedout_connection on;

    client_body_timeout 30;

    send_timeout 30;

    # Remove trailing slash to please Laravel routing system.
    if (!-d $request_filename) {
        rewrite  ^/(.+)/$ /$1 permanent;

    location / {
        index  index.html index.htm index.php;

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;

    # We don't need .ht files with nginx.
    location ~ /\.ht {
        deny  all;

    # Set header expirations.
    location ~* \.(?:ico|css|js|jpe?g|JPG|png|svg|woff)$ {
        expires  365d;

2 Answers 2


I had exactly the some problem like you.

I added this in my config file and finally it works now!

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

If you don't have the correct IP address in server_name, then your requests go to the nginx default vhost.

If you want your Laravel application to be the default ghost, add default_server to the listen directive in mysite.conf, and remove /etc/nginx/sites-enabled/default

  • The listen 80; entry at the top of nginx.conf is being rejected entirely now. Can't start the server with it there so I removed it. Now every time I visit the IP, it gives me the web page as a file to download instead of showing it like normal.
    – eComEvo
    Commented Apr 16, 2014 at 1:02
  • I also tried adding default_server to the listen directive in the mysite.conf file but that didn't fix.
    – eComEvo
    Commented Apr 16, 2014 at 1:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .