by Devin Yang

建立于: 3年前 ( 更新: 3年前 )

Laravel的调试模式相当丰富,Laravel官网有提醒,在本地端开发可设置APP_DEBUG为true,
但是在产品环境,这个值必需永远都是False。

虽然可以用php artisan down的方式进入维护模式,加上secret就能访问。

artisan down --secret=NWQwODZhNTM0ODY5Zjc1MDdkMWI4NzIy

再用网址网启后补上设置的secret
https://yourserver.example/NWQwODZhNTM0ODY5Zjc1MDdkMWI4NzIy

但如果在开发的东西,就是需要有外网的环境时,例如BOT的webhook,怎么辨呢🥺,至少要能锁个外网IP吧。
我目前做法,调整config/app.php,这样就能透过外网的方式决定是否启动DEBUG模式了。

/*
    |--------------------------------------------------------------------------
    | Application Debug Mode
    |--------------------------------------------------------------------------
    |
    | When your application is in debug mode, detailed error messages with
    | stack traces will be shown on every error that occurs within your
    | application. If disabled, a simple generic error page is shown.
    |
    */

    //'debug' => (bool) env('APP_DEBUG', false),
   'debug' => env('APP_DEBUG', ($_SERVER[env("PROXY_REAL_IP","REMOTE_ADDR")]??"null") == env('APP_CAN_DEBUG','') ? true : false),

在上方设置中,我们可以把.env的APP_DEBUG变更成APP_CAN_DEBUG=我的外网IP。
需要的话,再补上PROXY_REAL_IP,用来定义主机或容器能取得的真实IP。

这样一来只有要在.env中进行相关设置,就可以安心的进入Debug mode罗,
不用时调.env中的APP_CAN_DEBUG等於false就可锁起来。

#APP_CAN_DEBUG=false
PROXY_REAL_IP=HTTP_X_REAL_IP
APP_CAN_DEBUG=111.248.117.140

PROXY_REAL_IP用来设置了Proxy在header中带的真实IP,可依自己的环境进行设置。
像是HTTP_X_FORWARDED_FOR或是HTTP_X_REAL_IP等。
 

我们可写个简单的Route用phpinfo查自己的外网IP及$_SERVER的header名称为何,确认有没有设置错误。

Route::get('/myphpinfo', function(){
    phpinfo();
});

Tags: laravel Laravel security

Devin Yang

文章内容无法一一说明,如果您有什么不了解处,欢印提问哦:)

No Comment

Post your comment

需要登入才可留言!

类似文章


laravel,oauth2

我最常用的Laravel passport命令

Laravel提供了相当多好用的Package,像Passport就是其中之一,当网站需要自架OAuth2验证主机时,真的是省时省力。本站为例,因为采前后台分离机制(有两个不同的Laravel项目),我都透过前台的WEB进行验证。基本上,我还有很多其他不同的项目,也都靠Laravel提供的OAuth2就搞定跨域验证。

laravel

我如何强制Laravel使用HTTPS网址

我碰到的问题大概是这样,容器环境跑Laravel,容器内没有HTTPS造成Laravel用没有https的方式传送表单。在AppServiceProvider的boot补上如下语法\URL::forceScheme('https');

laravel,dotenv,seo

我如何依子域名动态加载Laravel不同的dotenv档

开始前先来抱怨一下,本来我的网站可以依使用者的浏览器自动显示不同的语系的。这有何不可,但Google的SEO似乎不喜欢这么搞,他建议每种语言使用不同的网址,不要用cookie或浏览器设置来调整网页内容,好吧那我只能乖乖就范了。他的建议作法,第一种方案:依国家区分,像是example.tw或example.de这真的天方夜谭怎么可能,要嘛收购被注册的域名,要不然取个全球没人会取的怪域名还比较有机会。第二种方案:用子域名区分,这正式我准备要做的,等等来说明在Laravel中怎么弄。第三种方案:example.com/tw/ 之类的,Apple好像就这么弄的。第四种方案:site.com?loc=tw之类,不建议使用,确实我也觉的这个不是一个好主意。