NFS實現(雙httpd + php-fpm + nfs + mysql 搭建discuz論壇)的方法

來源:互聯網
上載者:User

標籤:指定   操作   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論壇)的方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.