標籤:指定 操作 redirect 檔案讀寫 str 重要 export config roc
NFS相關介紹
一、NFS簡介
1. NFS(Network File System):NFS是一個檔案分享權限設定協議, 也是是在類Unix系統中在核心中實現的檔案系統。
2. 起源:最早是由SUN公司研發,非常古老,只是實現檔案分享權限設定,安全控制方面比較簡陋。 版本有, NFSv1, NFSv2,NFSv3,NFSv4. v4版開始支援kerberos 認證。
3. RPC(Remote Procedure Call):NFS協議是基於PRC(遠端程序呼叫)實現的。
基本過程如,用戶端某程式發起過程請求 >rpc用戶端接過請求 >通過通訊端通訊交給伺服器端 >伺服器端接過請求交給某程式執行 >執行後把結果或者狀態返回用戶端
RPC守護進程rpcbind監聽: 111/tcp 和 111/udp
RPC遠程調用進程rpc.mount 監聽: 2049/tcp 和 2049/udp
1437440473124205.png
4. 關於NFS的安全設定,原生的NFS服務只能基於IP認證。 NFSv4可以基於以下兩種認證方式認證
NIS: Network Information Service
Kerberos 5. 安裝配置 : nfs-utils包, NFS為核心實現,所以只需要工具包
6. 三個關鍵進程:
mountd: 掛載搜尋進程,負責用戶端源認證的進程
nfsd:檔案讀寫
idmapd:id映射進程
7. 設定檔/etc/exports:
配置格式:
檔案系統 用戶端1(檔案系統匯出屬性) 用戶端2(檔案系統匯出屬性)
/var/www/htdocs/Discuz/upload 192.168.98.128/24(rw,async,no_root_squash) 192.168.98.129/24rw,async,no_root_squash)
檔案匯出屬性:
rw async sync
root_squash: 壓縮root使用者,基於imapd,將root通過網路訪問時轉換為nfsnobody使用者
no_root_squash: 不壓縮root使用者;
all_squash: 壓縮所有使用者;
anonuid, anongid: 指定匿名使用者映射為的UID和GID;
相關命令
showmount
-e: 在nfs用戶端執行,探查某主機所匯出的nfs檔案系統;使用格式“showmount -e Server_IP”;
-d: 在nfs伺服器端執行,顯示哪個匯出的檔案系統已經被至少一個客戶掛載使用了;
-a: 在nfs伺服器端顯示所有的掛載會話;
exportfs:使用者不重啟服務重新匯出目錄
-a: 操作所有檔案系統
-ra: 重新匯出所有檔案系統
-ua: 取消匯入的所有檔案系統
v
: 顯示詳細資料
由於nfs輔助進程mountd預設監聽隨機連接埠,有可能會佔用一些重要連接埠,例如80,所以有時需要鎖定連接埠
在/etc/sysconfig/nfs 中實現
Port rpc.mountd should listen on.
MOUNTD_PORT=892
NFS實踐
雙web伺服器 +php-fpm + nfs + mysql 搭建discuz論壇,實現雙web伺服器共用後端資料。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Contracts\Factory as Socialite;
use Illuminate\Contracts\Auth\Guard as Auth;
class SocialLoginController extends Controller
{
/**
* @var Socialite
*/
protected $socialite;
/**
* @var User
*/
protected $auth;
/**
* @param Socialite $socialite
* @param User $user
* @param Auth $auth
*/
protected $request;
function __construct(Socialite $socialite, Auth $auth, Request $request)
{
$this->socialite = $socialite;
$this->auth = $auth;
$this->request = $request;
}
/**
* @param $provider
* @param Request $request
* @return \Illuminate\Http\RedirectResponse|\Symfony\Component\HttpFoundation\RedirectResponse
*/
public function login($provider)
{
return $this->execute($provider, $this->request->has(‘code‘));
}
/**
* @param $provider
* @param $hasCode
* @return \Illuminate\Http\RedirectResponse|\Symfony\Component\HttpFoundation\RedirectResponse
*/
public function execute($provider, $hasCode)
{
if( ! $hasCode)
{return $this->getAuthorization($provider);
}
$user = $this->socialUser($provider);
/***************************************************************
/*
/* dd($user->token); // will return something like this : "somerandomstring1232323123123"
/*
/***************************************************************/
}
/**
* @param $provider
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
public function getAuthorization($provider)
{
return $this->socialite->driver($provider)->redirect();
}
/**
* @param $provider
* @return \Laravel\Socialite\Contracts\User
*/
public function socialUser($provider)
{
return $this->socialite->driver($provider)->user();
}
}
as you can see $user->token returns string which contains access token, but in order to make it work we need the token in this format.
<?php
array:5 [%
NFS實現(雙httpd + php-fpm + nfs + mysql 搭建discuz論壇)的方法