Laravel 维护模式 --allow ip not working

Posted

技术标签:

【中文标题】Laravel 维护模式 --allow ip not working【英文标题】:Laravel maintenance mode --allow ip not working 【发布时间】:2019-02-19 10:05:35 【问题描述】:

我正在尝试在 vps 上的 laravel 中通过维护模式允许我的公共互联网 ip。

--allow 命令是在互联网上工作还是只在本地主机上工作? 因为我无法使用以下命令通过维护模式页面:

$ php artisan down --allow=xx.xx.xx.xx (my public internet ip)
Application is now in maintenance mode.
$ php artisan up
Application is now live.

【问题讨论】:

我从未在远程网站上测试过这个。但正如我看到的it should 您可以添加一个虚拟路由来验证您的 IP:Route::get('/what-is-my-ip', function() return request()->ip();); 并验证您是否允许正确的 IP 地址 你是对的,我按照你说的做了,由于某种原因,它显示的 IP 比 google show my ip 显示的 IP 不同。我在 vps 上使用 cloudflare 这可能是一个原因吗?如果您发表评论作为答案,我将投票正确。你知道为什么ip不同吗?谢谢! 根据我的经验,IP 服务并不那么聪明。其中一些显示(我认为是)我的提供商 IP。我在 Ubuntu 上做了一个别名 myip='curl https://ipinfo.io/ip' 我知道这个自己是正确的。 https://ipinfo.io/ip 向我显示了与谷歌相同的 IP。但由于某种原因,我的 vps Route::get('/what-is-my-ip', function() return request()->ip();); 显示了另一个 IP。如果我在维护模式下使用它,它可以工作,但非常奇怪,它显示的 ip 与任何其他 show my ip 站点完全不同。 确实很奇怪。请确保 Laravel 不会为每个人看到相同的 IP。如果你支持 cloudflare,我相信它会返回 canflare IP 而不是用户 IP。 laracasts.com/discuss/channels/laravel/cloudflare-and-user-ip 【参考方案1】:

您可以验证您的应用程序看到的 IP 地址并允许它:

Route::get('/what-is-my-ip', function() 
    return request()->ip();
);

但请注意,如果您使用内容交付网络服务(如 cloudflare),您将看到服务的 IP 而不是用户。这意味着,每个人都将拥有相同的 IP。

例如Cloudflare,您可以通过在public/index.php中重新设置正确的用户IP来使其工作

<?php

if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) 
    $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];

更多解释的来源:https://laracasts.com/discuss/channels/laravel/cloudflare-and-user-ip

【讨论】:

小心盲目地相信任何设置HTTP_CF_CONNECTING_IP 标头的人。你可能想看看 Laravel 的信任代理选项。

以上是关于Laravel 维护模式 --allow ip not working的主要内容,如果未能解决你的问题,请参考以下文章

text Laravel维护模式,除了我的IP

维护模式与中间件在 Laravel 中重定向

Laravel 5.1 维护模式不起作用

特定子域上的 Laravel 维护模式

不使用 Artisan 的维护模式?

sh 用于部署Laravel应用程序的脚本包括维护模式,编写器,迁移,清除缓存和重新启动队列