【问题标题】:Laravel routes not found after nginx install安装 nginx 后找不到 Laravel 路由
【发布时间】:2016-06-08 15:41:51
【问题描述】:

在我将 ICG 更改为 nginx 后,除索引页面之外的所有路由都不起作用。

Laravel 配置:

#/etc/nginx/sites-enabled/laravel
server {
    listen 80;

    root /var/www/home;
    index index.php;

    server_name 192.168.178.71;

    access_log /var/www/home/storage/app/logs/laravel-nginx-access.log;
    error_log  /var/www/home/storage/app/logs/laravel-nginx-error.log error;


    location /home {
        root /home/public;
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt  { log_not_found off; access_log off; }


    # ERROR
    error_page 404 /index.php;


    # DENY HTACCESS
    location ~ /\.ht {
        deny all;
    }
}

默认配置:

# /etc/nginx/sites-enabled/default
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www;

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

        server_name 192.168.178.71 localhost;

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

        autoindex on;

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


        }

            location ~ \.php$ {
        #try_files $uri /index.php =404;
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME document_root$fastcgi_script_name;

        }

        location ~ /\.ht {
                deny all;
        }
}

我的 nginx 配置

#/etc/nginx/nginx.conf
user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
         disable_symlinks off;
        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

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

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
       ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";



        ##
        # Virtual Host Configs
        ##

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

我尝试了什么:

/var/www/home# (home folder is laravel folder)
sudo chown -R www-data:www-data *


/var/www/home# 
sudo chown -R root:root *

我也尝试过改变

 try_files $uri $uri/ /index.php?$query_string;
 try_files $uri $uri/ /index.php$is_args$args;
 try_files $uri $uri/ /index.php;


php artisan cache:clear  

我读过谷歌的大部分问题,但没有任何帮助。

我的phpinfo - link

【问题讨论】:

  • 您收到的具体错误是什么?

标签: php apache laravel nginx fastcgi


【解决方案1】:

我发现这解决了我的 Laravel 路由问题。 我将位置 ~ .php$ 嵌套在位置 / 中。

例子:

server{
    listen 9000;

    server_name _;

    root /var/www/myapp/public;

    index index.php index.html;

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

        location ~ \.php$ {

            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

        }
    }
}

【讨论】:

    【解决方案2】:

    在我的 Ubuntu 16.04 上,Routes not working on Nginx 也遇到了同样的错误

    为了解决路由问题,我尝试了以下代码,它对我来说工作正常。

    使用以下命令打开项目配置文件

    sudo nano /etc/nginx/sites-available/projectname 
    

    然后在这个文件中做如下修改

    server {
            listen 80;
            listen [::]:80;
    
           root /var/www/project_name/public;
    
           server_name server_name;
    
    location / {
      
                 try_files $uri $uri/ /index.php$is_args$args;
             }
    
    }
    

    重要的是更改位置块中的try_files。

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

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,但更新默认配置使其工作。

      location @rewrite {
              rewrite ^/(.*)$ /index.php?_url=/$1;
          }
          location / {
                  try_files $uri $uri/ @rewrite;
          }  
      

      让我知道这是否适合您。
      sudo service nginx restart 更改配置后。

      【讨论】:

      • 对于未来的 SO 访问者,我配置了我的 nginx,就像他们在这里所说的 dzone.com/articles/… 一样,然后按照这个答案解决了路由问题
      【解决方案4】:

      这是 Laravel 和 Nginx 的正确基本配置:

      server {
          listen   80 default_server;
      
          root /var/www/laravel/public/;
          index index.php index.html index.htm;
      
          location / {
               try_files $uri $uri/ /index.php$is_args$args;
          }
      
          # pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm.sock
          location ~ \.php$ {
                  try_files $uri /index.php =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;
          }
      }
      

      编辑: 而不是:

      fastcgi_pass unix:/var/run/php5-fpm.sock;
      

      截至 2018 年 11 月,随着 PHP 7.2 的发布,它将是:

      fastcgi_pass unix:/var/run/php7.2-fpm.sock;
      

      【讨论】:

      • 我不知道我的配置文件有什么问题,但这个配置最终可以工作
      • 老兄,你节省了黄金时间。惊人的 。我在 Centos 6.4 中遇到了问题。
      • 我是来帮忙的:D,如果您还有其他问题,请告诉我!
      • 您好!现在它发出“502 Bad Gateway”错误。我该怎么办?
      • 这需要在 Laravel 文档中。它是如此简单,是唯一对我有用的配置。谢谢!
      【解决方案5】:

      当我通过 get 发送参数时,我无法识别它们,我只需要激活以下内容: try_files $uri $uri/ /index.php$is_args$args;

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

      【讨论】:

        【解决方案6】:

        更新几行 nginx 工作正常后我遇到了同样的问题..

        适用于 Windows(根据您的文件系统更改根目录)

        1.root html/laravel; #Update Here - 在html后添加项目文件夹名称

        2.try_files $uri $uri/ /index.php$is_args$args; #Update Here - 为 404 not found 错误添加此内容

        server {
            listen 80; # IPv4
            server_name localhost;
        
            ## Parametrization using hostname of access and log filenames.
            access_log logs/localhost_access.log;
            error_log logs/localhost_error.log;
        
            ## Root and index files.
            root html/laravel; #Update Here - add project folder name after html
            index  index.php index.html index.htm;
        
            ## If no favicon exists return a 204 (no content error).
            location = /favicon.ico {
                try_files $uri =204;
                log_not_found off;
                access_log off;
            }
        
            ## Don't log robots.txt requests.
            location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
            }
            ## Try the requested URI as files before handling it to PHP.
            location / {
        try_files $uri $uri/ /index.php$is_args$args; #Update Here - Add this for 404 not found error
                ## Regular PHP processing.
                location ~ \.php$ {
                    try_files  $uri =404;
                    fastcgi_pass   php_processes;
                    fastcgi_index  index.php;
                    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
                    include        fastcgi_params;
                }
        
                ## Static files
                location ~* \.(?:css|gif|htc|ico|js|jpe?g|png|swf)$ {
                    expires max;
                    log_not_found off;
                    ## No need to bleed constant updates. Send the all shebang in one
                    ## fell swoop.
                    tcp_nodelay off;
                    ## Set the OS file cache.
                    open_file_cache max=1000 inactive=120s;
                    open_file_cache_valid 45s;
                    open_file_cache_min_uses 2;
                    open_file_cache_errors off;
                }
        
                ## Keep a tab on the 'big' static files.
                location ~* ^.+\.(?:ogg|pdf|pptx?)$ {
                    expires 30d;
                    ## No need to bleed constant updates. Send the all shebang in one
                    ## fell swoop.
                    tcp_nodelay off;
                }
                } # / location
        
        } 
        

        【讨论】:

          猜你喜欢
          • 2015-10-08
          • 2016-04-16
          • 2021-05-21
          • 2016-11-15
          • 2014-05-30
          • 2015-08-29
          • 2020-09-19
          • 2015-11-26
          • 2021-03-20
          相关资源
          最近更新 更多