[Apache] 反向代理設定 Reverse Proxy

反向代理設定 Reverse Proxy ,用於將外部網路連入的連線,再依據需求與設定各自分配到特定的IP或Port或網址上。進而達到 單一外部IP 對應多內部IP的功能。

 

應用情境:

1. 外部IP只有一個,卻要將不同的網址指向不同的服務時。

2. 單一主機架設超過一個Apache時,利用不同的網址來指向各個Apache服務

3. 當內網中有多台主機同時使用同一個外部IP時,用於各自指向網址時。

用個比較簡單的說法來說,或許可以把它當作一個簡單的DNS服務,來轉向網域、子網域等…
到指定的IP位置上 (通常為指定到虛擬IP上或是不同Port上)

 

1. 開啟Proxy的mod

首先要再 httpd.conf 之中開啟兩個mod,分別是

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_http_module modules/mod_proxy_http.so

請將這兩行前面的井號去掉。

2. 在 vhosts之中增加要轉換的網域

<VirtualHost *:80>
ServerName yourdomain.com
ProxyRequests off
<Proxy *>
Order allow,deny
Allow from all
</Proxy>

ProxyPass / http://192.168.1.99
ProxyPassReverse / http://192.168.1.99
  ProxyPreserveHost on
</VirtualHost>

以上的設定,代表 yourdonain.com 這個網域在連入你的Apache後,
會被重新指指向到 192.168.1.99 這個IP位置,這個可以是內網IP、外網IP、或網址。

但重點在於,你安裝Apache的這台主機必須要可以連到那個地方!

這裡有幾種變化可以參考:

  1.內網中另一台主機
    ProxyPass / http://192.168.1.99
ProxyPassReverse / http://192.168.1.99

2. 同一台主機上架設不同Port的服務 (或許是另一個Apache…)
ProxyPass / http://127.0.0.1:81
    ProxyPassReverse / http://127.0.0.1:81

說明:

第一個反斜線代表 yourdomain.com 這個網域連入時的目錄,這裡我們設定為根目錄就進行轉址。

 

3. 重啟 Apache

設定完成後,重新啟動 Apache,vhost就會自動進行IP的轉置了,
但此處你需要特別注意,如果你轉過去的服務也是Apache之類的服務,
你仍然必須要在那邊的設置中設定網域!才能夠對應到正確的目錄以及正確的功能。

 

參考資料:DAVIDOU的 BLOG http://blog.davidou.org/archives/1334 

[PHP] substr 字串擷取 (擷取字串中指定位置、長度的部分)

substr()

在一段字串中,擷取指定的位置以及指定的長度。


使用方式:

substr ( 字串, 起始位置, 長度 )

字串:在第一個值為輸入一個原始的字串。

起始位置:設定要開始擷取的位置,也就是從頭開始計算第幾位數。

長度:要擷取多少的長度

起始位置 與 長度 必須要是整數值,其中長度可以是正數或是負數,如果設定為負數則代表說擷取至該字串的倒數第幾個位數。

 

當只有設定 起始位置 且沒有設定 長度 時,會擷取該位置以後的所有字串,例如:

$text = "RicharLin";
echo substr($text, 3); //輸出 harLin
echo substr($text, -3); //輸出 Lin   (由倒數第三位數開始擷取)

 

當 起始位置 與 長度 都有設定時,若長度為負數則代表長度擷取到字串結束前第n位,例如:

$text = "RicharLin";
echo substr($text, 0); //輸出 RicharLin
echo substr($text, 0, 6); //輸出 Richar
echo substr($text, 0, -3); //輸出 Richar
echo substr($text, 4); //輸出 arLin
echo substr($text, 4, 2); //輸出 ar  (由第四位起,擷取兩位數)
echo substr($text, 4, -3); //輸出 ar (由第四位起,擷取至字串結尾前三位數)
echo substr($text, -7); //輸出 charLin (由倒數第七位起擷取全部)
echo substr($text, -7, 4); //輸出 char (由倒數第七位起擷取四位數)
echo substr($text, -7, -3); //輸出 char (由倒數第七位起擷取至倒數第三位);

實際使用範例:

情境:多筆資訊必須存在同一個字串之中。
例如:「座號_性別」

$Array_Data = array("001_F","002_F","003_M","004_M","005_F");

for($i=0;$i<count($Array_Data);$i++){
  $number = substr($Array_Data[$i], 0, 3);
  $gender = substr($Array_Data[$i], -1);
  echo "座號:".$number." / 性別:".$gender." <BR>";
}

輸出結果為:

座號:001 / 性別:F 
座號:002 / 性別:F 
座號:003 / 性別:M 
座號:004 / 性別:M 
座號:005 / 性別:F

 

[網域] 免費DNS代管服務 FreeDNS.afraid.org

前言:

如果你申請了一個網域,但是它沒有提供好用的DNS可以供你設定網域的時候,

你就會需要一個有完整功能的DNS代管服務,才可以讓你的網域發揮更多用途,

而今天就要來推薦一個老牌且免費的DNS代管服務 FreeDNS.afraid.org !


官方網站:https://freedns.afraid.org/


註冊帳號:

第一步:

首先我們先連結到「首頁」,並將畫面拉到最下面找到 「Sign Up!」註冊一個帳號!

接下來我們會看到一個規格表,我們就選用最左邊的Basic方案,這就非常足夠我們使用囉~

 

第二步:

當我們選擇好方案後,這裡分別要填入「姓氏、名字、ID、密碼、確認密碼、Email、驗證碼」

並且在最下面勾選同意他們的條款,點擊「Send activation email」後,

到信箱收取驗證信後你的帳號就註冊完成啦~


新增一個網域至FreeDNS:

接下來我們就要使用上它的DNS代管服務,我們在左邊的選單選擇「Domains」

接著我們要點選「Add A Domain into FreeDNS」來把我們的網域新增到FreeDNS的服務之中!

 

接著我們要在「Domain」中填入你的網域 ,
(如果你剛註冊好一個.tk的網域,那麼就在這裡填入它吧!請注意這裡不要填入www哦)

並且在「Shared State」的位置選擇「Shared: Private」

點擊「Submit」後就可以了,這時候我們再點選左邊選單的「Domains」回到列表中,

我們就會看到網域已經被登入了,但是看到紅色的字表示目前還不能使用中!

 

接下來下個步驟我們就要去你註冊網域的網域商那邊,

把DNS主機設定為FreeDns.afraid.org所提供的網址位置!

快則幾分鐘慢則幾個小時後,再回來這邊看就會看到紅色的Broken消失了,

那就代表你的網域已經成功被指向過來FreeDNS的伺服器囉!


NS1.AFRAID.ORG
NS2.AFRAID.ORG
NS3.AFRAID.ORG
NS4.AFRAID.ORG


☆如果你是申請了一個.tk的網域,那麼請回到那篇教學文章的最後面,在「Nameservers」的欄位中填入以上四個網址並儲存,快的話大概幾分鐘後你再回來FreeDNS的頁面看,那行紅色的字就會消失了,消失後就代表你的網域已經成功被指向來FreeDNS這邊了!

 


 

設定網址的指向:

當我們要設定網域的時候,我們一樣點選左邊選單的 「Domains」,

接著找到你要管理的網域並點選後面的「Manage」,

你就會看到這個網域目前所含有的所有子網域了!

在尚未設定的時候系統會預設幫你設定六組子網域,但是都尚未指定位置,

這邊我們至少要先把無子網域的網域先指定好網址,只要點擊它並且在裡面設定,

如果是要把這個網址對應到主機的IP,那麼Type的部分就維持「A」即可,

接著在「Destination」的位置填入主機的IP位置,並點擊「Save!」就可以了

那麼如果你想要新增一個子網域例如 blog.richarlin.tk 的話,

就在上面子網域的列表中點選 「Add」,並且在「Subdomain」的位置填上「blog」,

而「Destination」的位置一樣填上主機的IP位置就可以囉!

(如果是自己架設的主機,那麼也必須要在主機的設定中去設定子網域才會有效果哦!)

[PHP][MySQL] fetch_array與fetch_assoc與fetch_row的比較

正常情況下我們用PHP再擷取MySQL的資料時,我們都習慣會使用 fetch_array() 來把資料從資料表中讀出,而這個功能會把資料存入陣列之中,而陣列中的Key值將會以數列與實際Key值來儲存。

但有些時候我們希望陣列不要重複取得資料,或者是我們希望他單純以數值命名……………..

閱讀全文