为什么要用不同的域名? laravel 经常是用 /admin 的这种方式来访问管理员端的,但是这样用户端和管理员端是在同一个域名下的,可能会有几个问题:

用户是可以通过修改 url 来进入管理员端的登录界面,或者说由于管理员端的 bug 导致用户误入了后台的敏感地区 用户端的 session 和管理员端的 session 冲突,只能登陆一个,另一个的 session 就被 replace 了 一些常用的黑客爆破工具也可以对 url 进行猜解爆破(比如说御剑),虽然域名也有类似于 subDomainsBrute 这些爆破工具,但是能增加点入侵难度,就是增强了安全性 就是看着不舒服,就是不爽,就是想要用域名 所以我们有时想要用不同的域名来访问,例如 admin.hippo-studio.com ,来操作管理员端,用api.hippo-studio.com来提供用户端接口(如果前后端没有分离,那就是直接用hippo-studio.com来访问了)

后端是不是要分成两个laravel的项目来写? 对于后端来说,由于一个项目的前台(假设是给用户端 api 接口)和后台(管理员端)的代码可复用性很强,如果用两个项目,我们可能要写很多重复的代码,比如说建立的所有 Model 几乎相同,所以我们常常是写在同一个项目里的。

如何做到多域名 修改 app/Providers/RouteServiceProvider.php

public function map()
{
    $this->mapApiRoutes();

    $this->mapAdminRoutes();

    //
}

protected function mapAdminRoutes()
{
    Route::group([
        'domain' => config('app.admin_domain'),
        'middleware' => 'web',
        'namespace' => $this->namespace,
    ], function ($router) {
        require base_path('routes/admin.php');
    });
}

protected function mapApiRoutes()
{
    Route::group([
        'domain' => config('app.api_domain'),
        'middleware' => 'api',
        'namespace' => $this->namespace,
    ], function ($router) {
        require base_path('routes/api.php');
    });
}

config/app.php

'api_domain' => env('API_DOMAIN', 'api.hippo-studio.com'),
'admin_domain' => env('ADMIN_DOMAIN', 'admin.hippo-studio.com'),

.env

API_DOMAIN=api.hippo-studio.local ADMIN_DOMAIN=admin.hippo-studio.local 然后在 routes 目录下新建一个 admin.php 写路由

Route::group([ 'namespace' => 'Admin', ], function () { Auth::routes(); }); 然后配置 nginx

server {

#配置两个 server name
server_name api.hippo-studio.com admin.hippo-studio.com;
# 处理跨域
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Headers' 'Content-Type, Accept, Cookie, X-Requested-With, X-XSRF-TOKEN';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE';
add_header 'Access-Control-Allow-Credentials' 'true';

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

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

} 完

results matching ""

    No results matching ""