如果请求来自特定IP

时间:2016-07-12 05:40:21

标签: nginx laravel-4 routes

我有一个Laravel 4设置,如果我直接访问它可以正常工作(例如,导航到10.1.1.4显示网站就好了。)

但是我们运行了一个nginx服务器,它将proxy_pass向服务器发出请求。这样做的问题是proxy_pass只会在我们去(例如)转到10.1.1.5/ttt时执行,这将适用于初始请求,但所有资源/重定向都将被破坏(因为使用Laravel 4的url生成时缺少/ttt

所以我的问题非常简单。如何动态设置将重定向到的根?因此,如果您直接访问该网站,它将重定向如下:

return Redirect::to('/login');

但是如果你从nginx访问它,它将重定向到:

return Redirect::to('/ttt/login');

我已经检查了$_SERVER变量,SERVER_NAME保存了nginx的IP。因此,由于这将是静态的,我可以检查SERVER_NAME是否等于nginx IP。问题是我不知道该怎么做。我应该创建一个包含“前缀”的全局变量,还是有另一种方法将/ttt添加到每个url代?

1 个答案:

答案 0 :(得分:0)

对于有同样问题的人,这是我的肮脏黑客:

我在public/index.php

中创建了两个定义
define('REQ_NGINX', ($_SERVER['SERVER_NAME'] == '10.1.1.5'));               // boolean
define('TTT_URL', 'http://' . $_SERVER['SERVER_NAME'] . (REQ_NGINX?'/ttt':'')); // without leading slash!!!

然后我将所有路线包裹在Route::group

Route::group(['prefix' => REQ_NGINX ? 'ttt' : ''], function () {
    Route::get('/',             'HomeController@root');
    .....
});

这将在ttt等于REQ_NGINX的所有路线前面加上true字符串

然后我编辑了文件 vendor / laravel / framework / src / Illuminate / Routing / UrlGenerator.php
在构造函数的最后,我添加了这一行:

$this->forceRootUrl(TTT_URL);

最后一步是修改.htaccess并添加以下行 BEFORE RewriteCond index.php

# Handle css, js, img...
RewriteCond %{REQUEST_URI} \.(css|js|png|jpg|gif|eot|svg|ttf|woff)$
RewriteRule ^ttt/(.*)$ /$1 [L]

那将剥夺ttt部分的css,js ...文件

我希望这个自我回答可以帮助将来遇到同样问题的人。一直在努力解决这个问题。不过,如果您找到了更好/更清洁的解决方案,请不要犹豫,回答这个问题。