【问题标题】:Laravel Homestead: 403 forbidden on nginxLaravel Homestead:在 nginx 上禁止 403
【发布时间】:2014-08-26 01:50:54
【问题描述】:

我刚刚按照他们的说明安装了 Laravel Homestead。当我打开http://homestead.app:8000 时,我得到了 nginx 403 禁止的 HTTP 响应。

我尝试将应用程序/存储权限设置为 755,但这不起作用,所以我重新加载了 Vagrant。没有进一步的结果。

我也尝试更改 nginx 配置,但没有成功。

【问题讨论】:

    标签: laravel nginx


    【解决方案1】:

    好的,经过几个小时的搜索和调试,我得到了question 的答案。

    问题:

    1. 我有 GET 路由 /admin
    2. 我还有 /public/admin/ 文件夹,里面有资产。
    3. 我有 403 次访问被 nginx 拒绝,导致此重复;

    所以,如果你不想重命名路由或资产文件夹,你需要做的就是替换

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        #              ^^^^^
    }
    

    用这个:

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

    如果您可以在不进行任何重构的情况下重命名您的路由或资产文件夹,那么您可以在不修复 nginx 配置的情况下执行此操作。

    希望这会有所帮助。

    【讨论】:

    • 为了清楚起见,将“不会”更改为“不想要”。告诉我们此更改应该转到的文件。例如:/etc/nginx/sites-available/yoursite.app
    • 这是解决方案,我还需要在此之后做vagrant reload
    【解决方案2】:

    要修复,请通过 ssh 进入您的宅基地,然后执行以下操作: nano /etc/nginx/sites-available/the-name-of-your-project.test

    之后,您需要做的就是删除您将在 location 对象中找到的 $uri/,然后执行 vagrant reload 并修复错误。

    【讨论】:

    • 这行得通,但下次您配置机器时,此更改将丢失。
    • 我知道,但配置并不经常发生。
    【解决方案3】:

    检查 vagrant box 中的 nginx 错误

    vagrant ssh

    sudo cat var/log/nginx/yoursite.tld-error.log

    "*1 FastCGI sent in stderr:"Unable to open primary script: /home/vagrant/code/public/index.php (No such file or directory)" "

    Homestead.yaml 的变化

    nano Homestead.yaml

    到 地图:homestead.app 到:/home/vagrant/code/Laravel/public

    那么..

    vagrant reload --provision

    【讨论】:

      【解决方案4】:

      配置 Nginx 站点:

      网站: - 地图:homestead.test 到:/home/vagrant/project1/public

      【讨论】:

        【解决方案5】:

        我的解决方案是将主机文件中的地址移动到文件底部。它发生在我身上两次。

        【讨论】:

          【解决方案6】:

          在您的情况下,由于Homestead.yaml 中的 站点 配置不当,您会收到 nginx 403 disabled HTTP 响应, 如果您正确配置它,它应该可以工作。

          如何逐步解决问题:

          1) 转到您的 vagrant box 并创建 laraval 应用程序

          $vagrant ssh
          $cd ~/code
          
          $#lets create basic blog 
          $laravel new blog
              Crafting application...
              Loading composer repositories with package information
              ........
          
          $cd blog
          $ll
             # You should be able to see public folder in this dir.
             # this is the entry point for your application.
             # this is your public dir: ~/code/blog/public
             # more explicitly: /home/vagrant/code/blog/public
          
          $exit   # exit ssh
          

          2) 使用正确的站点信息更新 Homestead.yaml

           - map: homestead.app
             to: /home/vagrant/code/blog/public  # should be same as in step1
          

          3) 重新配置你的 vagrant

          $vagrant reload --provision
          

          您现在应该可以使用http://homestead.app 访问它了 谢谢!

          【讨论】:

            【解决方案7】:

            在您的浏览器中访问

            homestead.app/public
            

            /home/vagrant/Code/Laravel/public

            中使用 composer 安装 laravel/laravel 之前

            【讨论】:

              【解决方案8】:

              对于某些人来说,这可能就像将 git 克隆到现有的公共文件夹中一样简单,例如:

              - map: hello-world.dev
                to: /home/vagrant/Code/Laravel/public/hello-world
              

              正确的文件夹结构是:

              - map: hello-world.dev
                to: /home/vagrant/Code/hello-world/public
              

              另一个注意事项是忽略有关编辑主机文件的 laravel 文档,使用 git shell 或 cygwin (windows) 安装 vagrant hostsupdater,只需将主机和别名的条目添加到 ~/.homestead/Homestead.yaml 文件。

              【讨论】:

                【解决方案9】:

                以下是完整的解决方案步骤:

                1. 运行homestead edit

                2. /public 添加到目录的末尾

                sites: - map: homestead.app to: /full/path/to/the/laravel-app/public

                1. 运行homestead halt && homestead up --provision

                【讨论】:

                  【解决方案10】:

                  就我而言,出于测试目的,我在 public 目录中只有 phpinfo.php 文件。服务器一直显示 403 错误,直到我将一个名为 index.php 的文件放入公用文件夹!

                  【讨论】:

                  • 是的,我遇到了类似的问题,因为我已经从源代码管理中删除了我的整个 /public 目录,然后当我(后来)克隆该版本的项目时,我无法让它运行!呵呵
                  【解决方案11】:

                  我遇到了同样的问题,对我来说,原因是在 Homestead.yaml 文件中,我错误地输入了这个:

                  sites:
                  - map: homestead.app
                    to: /home/vagrant/Code
                  

                  而不是正确的语法:

                  sites:
                  - map: homestead.app
                    to: /home/vagrant/Code/path/to/public
                  

                  【讨论】:

                  • 我认为您需要在此之后重新配置
                  • 我实际上不得不做 /home/vagrant/Code/path/to/public
                  • 就我而言,我忘记添加 /public 目录;-P
                  【解决方案12】:

                  此响应的另一个原因可能是使用公共目录中的文件夹复制您的路由。例如,您的 /public 目录中可能有 homestead.app/lists GET 路由和 lists 文件夹。这将导致相同的 403 错误(服务器将假定您正在尝试访问 /public/lists 目录而不是您的 /lists 路由)。

                  【讨论】:

                  • 这只是帮助我解决了我的问题!我的网站上有一个音频页面 (/audio),在我的公共文件夹中,有 /audio 文件夹...
                  • 伟大的收获!一个安全的解决方案(我认为)是在 .htaccess RewriteCond %{REQUEST_FILENAME} !-d 中禁用此规则,因为从不允许目录列表。刚刚这样做,似乎工作正常
                  • 好的,这实际上是我的 /admin/ 路由和 /public/admin 目录重复的情况。但是我应该怎么做才能在没有目录或路由重命名的情况下修复 nginx 403 错误?有可能吗?
                  • 你拯救了我的一天!
                  【解决方案13】:

                  更改 Nginx 的配置

                  将该行放在“位置/”部分:

                  try_files $uri $uri/public/index.php?$query_string;
                  

                  如果它不起作用,则将您的“public”替换为包含“index.php”的文件夹名称,

                  这对我使用 ServerPilot 非常有用,

                  祝你好运!

                  【讨论】:

                    【解决方案14】:

                    我一直在努力解决同样的问题,我只是为我的案例解决了这个问题。

                    我确定我已正确设置了 yaml 文件,但我不断收到 403 错误,并且在尝试某些路由时,我收到“未指定输入文件”。

                    我的解决方案来自http://laravel.com/docs/4.2/homestead,它涉及使用 serve 命令。我没有添加任何其他网站,只是想尽一切办法让第一个网站运行。

                    SSH 进入我的 vagrant box 并使用命令“serve my_app_name.app /home/vagrant/Code/path/to/public”完成了这项工作。请注意,我已经在我的主机文件中为这个应用添加了一个条目。

                    希望这对某人有所帮助。

                    【讨论】:

                    • 这行得通!非常感谢,希望他们在功能版本中修复它
                    • 这个答案应该被接受为解决方案。工作得很好。非常感谢!
                    • 我正在使用 Laravel 5.1 和最新的宅基地版本,这对我不起作用。相反,它使其他一切都停止工作。
                    【解决方案15】:

                    我在尝试手动创建第一个网站时遇到了这个问题。 @GregD 的回答帮助我发现了问题!如果您使用内置功能,Vagrant/Homestead/Laravel 通常会让一切顺利运行。

                    Homestead 的配置文件为一个站点预配置,位于/Code/Laravel/。启动并运行此测试平台的一些步骤:

                    1. Install Homestead(记得设置你的hosts文件)
                    2. vagrant up 并通过 ssh 连接到您的虚拟机(如果您的机器上还没有终端,Chrome Secure Shell 非常好)
                    3. Download and set upPHAR package
                    4. cd ~/Code
                    5. laravel new Laravel
                    6. 浏览至http://homestead.app:8000

                    这将创建您的第一个具有适当权限的网站。您可以在此权限之后对未来的站点进行建模,或者仅使用Homestead.yamllaravel new <site> 的“站点”节点来构建未来的新站点。

                    【讨论】:

                      【解决方案16】:

                      我建议检查 nginx 日志 - 使用 sudo tail /var/log/nginx/homestead.app-error.log

                      【讨论】:

                        猜你喜欢
                        • 2019-01-23
                        • 2017-07-15
                        • 1970-01-01
                        • 2020-03-12
                        • 2019-06-07
                        • 2019-04-17
                        • 1970-01-01
                        • 2015-10-19
                        相关资源
                        最近更新 更多