:::

從臺灣博碩士論文知識加值系統匯入書目到Zotero

布丁布丁吃布丁

從臺灣博碩士論文知識加值系統匯入書目到Zotero

image

Zotero一直是我寫論文、整理文件的得力利器。而作為一個研究生,參考我國的臺灣博碩士論文知識加值系統(原名:全國博碩士論文網,以下仍簡稱博碩士論文網)也是很正常的一件事情。

由於Zotero是國外開發的工具,文獻管理主要是以國外知名的資料庫為主,包括Google Scholar。我們的博碩士論文網就沒有在Zotero的解析器清單中,因此如果要將博碩士論文網的書目匯入Zotero,就不能用點網址列右方的快速匯入功能,而是用類似EndNote的RIS format檔案匯入。

以下我將介紹如何從博碩士論文網中匯入書目資料到Zotero的過程。


工具介紹

原本Zotero是Firefox的一個擴充套件,但是由於Firefox往往會跟太複雜的擴充套件起衝突、造成運作效能不佳,因此後來Zotero又推出了獨立運作(standalone)的版本。我現在多是用獨立版本的Zotero,目前用起來很順利,沒什麼大問題。

獨立版本的Zotero可以跟Google ChromeSafari等瀏覽器搭配運作,但是要為瀏覽器安裝額外的Zotero Standalone Connectors套件。我目前使用的是Google Chrome Portable 12.0.742.100。


匯入步驟

接下來就是在博碩士論文網中找書目匯入Zotero的教學囉。

1. 用搜尋功能找到指定文獻

2011-10-01_202025 search (mask)

現在我以「基於數位閱讀標註行為探勘影響閱讀焦慮因素 提升閱讀成效」這篇論文為例。先用博碩士論文網的搜尋功能找到這篇論文,如上圖。勾選論文左邊的核取方塊,然後看到右邊的「輸出管理」功能。

2. 輸出管理匯出檔案

2011-10-01_202356 ris

在輸出管理中, 勾選「書目資料輸出格式」的「RIS format (EndNote…)」選項,然後按下最下面「TXT檔」旁邊的「儲存」按鈕,系統會給你一個「ris」副檔名的檔案,例如fb111001.ris

3. 匯入Zotero

image

接著再到Zotero視窗中,選擇「檔案」中的「匯入」功能(獨立版本的翻譯沒有很完整,所以實際上還是很多英文單字混雜),指定你剛剛下載的ris檔案。

2011-10-01_202840 imported

接著左邊的收集(collection)就會多出你剛剛匯入的檔案名稱,而該收集裡面就是你剛剛輸出的書目資料囉。


結語:EndNote做得到的,Zotero也能辦到

上述步驟其實是參考研究生好幫手(二)--筆記給您攢便便.EndNote 學習快易通這一篇的教學。事實上,只要是有提供EndNote匯出功能的資料庫,像是臺灣大學圖書館羅列的常用電子資源匯入教學,其中大部分也都能用在Zotero上。

現在學校的研究方法教學仍是以EndNote為主。我個人並不是很喜歡EndNote,而習慣使用Zotero。一方面是因為EndNote對中文支援仍有待改善(這是我三年前對它的印象,現在應該有改進了吧?),另一方面,我認為作為未來仍會長時間使用的書目管理工具來說,EndNote會受限於只有學校才能購買的窘境,而Zotero則沒有這方面的困擾。到現在,還是偶爾會有畢業的同學找我索取學校的EndNote,而這種學校外使用的違法行為,當然不是你我願意看到的事情。既然如此,為何不要一開始就用免費的Zotero呢?

希望這些教學能夠幫助大家輕鬆地從EndNote跳到Zotero,快快樂樂地寫論文。加油。

(more...)

GLPI管理知識庫類別教學 (knowledge base categories)

布丁布丁吃布丁

0 Comments

GLPI管理知識庫類別教學 (knowledge base categories)

以下是GLPI 0.80.2管理知識庫(Knowledge base)的類別(categories)的教學。


GLPI建立類別(category)並不太直覺,連管理類別的功能也讓我找了老半天。

image

如果要管理知識庫的類別,位置是在「主頁 > 設定 > 下拉列表」的「工具 > 類別」中。

image

你就可以看到所有建立好的類別。

2011-09-05_232244 edit

點選類別的名字,就能進入該類別,執行編輯更新或刪除的動作。

(more...)

GLPI 新增知識庫教學 (knowledge base)

布丁布丁吃布丁

0 Comments

GLPI 新增知識庫教學 (knowledge base)

以下介紹GLPI 0.80.2新增知識庫(knowledge base)文章的教學。儘管有些複雜,但大致上GLPI的知識庫還算是堪用吧。

1. 登入並進入知識庫

image

請以有權限的使用者登入,並進入「主頁 > 工具 > 知識庫」中。

新增的按鈕在上方,一個小小的「+」圖示。

2. 建立知識庫文章

image

在建立知識庫文章頁面中,你可以為它設定「類別」、「標題」、「內容」。必須先建立文章之後,才能為該文章上傳文件。

2-1. 類別

image 

你可以用下拉式選單,選擇需要的類別。

如果要建立新的類別的話,請按右邊小小的「+」圖示。

image

在建立類別中,你可以設定名稱、備註,以及該類別的上層類別。例如我建立一個「測試2」類別,然後將上層類別選擇為「測試」,那麼在「測試2」類別中附屬在「測試」類別中。

新增完之後,視窗會回到剛剛的新增知識庫文章頁面,此處還要記得選擇剛剛新增的類別。

2-2. 標題與內容

image

「標題」是無格式的文字框;「內容」則可以HTML格式保存,但此處不能上傳圖片。請將「內容」當做是簡單說明來撰寫,複雜的知識庫文章,請另外儲存成文件檔案,稍後再上傳到文章中。

3. 上傳文件

接著要教的是如何上傳文件。首先你必須先找到剛剛新增的文章。

image

剛剛新增的文章,會在「主頁 > 工具 > 知識庫」左下角的「最近的文章」列表中,請點文章標題進入該文章。

image

文章下方即可上傳文件。

image

上傳完之後會顯示上傳成功的訊息。而下方相關文件則會顯示剛剛上傳的檔案。值得慶幸的是,以中文命名的文件也不會變成亂碼喔。

4. 調整上傳文件的檔案大小上限

image

GLPI可上傳的檔案大小受限於伺服器PHP參數設定的限制,預設最大只能上傳2MB。

如果要增加可上傳大小,請調整php.ini檔案中的upload_max_filesize參數跟post_max_size參數(兩個都要調整才有用喔),例如設定為100M,那麼可上傳的大小就會擴大到100MB。

php.ini的位置,在Linux中的路徑通常是/etc/php.ini;在Windows中的路徑通常是在C:\Windows\php.ini。

調整php.ini之後,還需要重新啟動Apache網頁伺服器才會生效。

關於知識庫的中文搜尋功能

GLPI有全文搜尋系統,可以搜尋標題與內容這兩個欄位。但是他並沒有中文斷詞,因此無法搜尋一連串中文句子中的某些單字。如果是很重要的單字,請盡量以 空格 斷開,好讓GLPI搜尋時能夠順利找到。

(more...)

GLPI 完全刪除使用者教學 (user)

布丁布丁吃布丁

0 Comments

GLPI 完全刪除使用者教學 (user)

以下說明GLPI 0.80.2中完全刪除使用者的步驟。

1. 登入並進入使用者頁面

2011-09-03_225713

請以超級管理者(super-admin)的使用者身分登入GLPI,然後進入「主頁」 > 「管理」 > 「使用者」 頁面。

接著點選你要刪除的使用者的登入名稱。

2. 刪除使用者

image

在使用者資訊右下角有個「刪除」的按鈕,請點此按鈕刪除使用者。

但是光是這樣子,使用者的資訊並沒有完全清除,其實還保留在資料庫當中。

3. 顯示已刪除的使用者

image

在使用者列表上方,請點選小小的垃圾桶按鈕。

image

接著就會列出已經被刪除的使用者。請點選確定要清除資料的使用者,點選他的登入名稱。

4. 清除使用者

image

在已刪除的使用者資訊右下角,有一個「清除」按鈕。點下此按鈕之後,使用者才算是完全刪除。

你也可以按下「恢復」按鈕,復原已刪除的使用者資料。

image

按下「清除」之後,就會看到「項目清除成功」的資訊,表示該使用者已經完全刪除了。

如果要回到使用者列表,請再按下垃圾桶按鈕即可。

(more...)

GLPI新增超級管理者 (super-admin) 教學

布丁布丁吃布丁

10 Comments

GLPI新增超級管理者 (super-admin) 教學

image

GLPI(Gestion Libre de Parc Informatique)是一套給資訊管理人員使用的資產管理系統。母語是法文,也有中文的翻譯介面。GLPI不僅具備IT管理的功能,也有知識管理用的「知識庫」。現在我一邊使用這個系統,一邊把一些不容易操作、需要說明的部份寫成知識庫,作為後人使用GLPI時的指引。

在此使用的是GLPI 0.80.2。正體中文語系檔是我自己修改過的版本,因此用詞有些不同,下面會再說明。


適用狀況

GLPI可以設定不同權限的使用者(user)。一開始新增使用者時,預設的權限是post-only,能做到的事情很少。如果要讓使用者能夠使用所有的管理功能,必須給他super-admin權限才行。

接下來開始說明各個步驟。因為我並沒有很仔細地去確認各個功能的意義,主要是將操作的步驟寫出來而已。畢竟GLPI有些複雜,沒有太多時間去摸熟所有功能。如有寫錯的地方,請不吝指教,我會儘快修正。

用詞說明

原本我使用的GLPI語系檔@version $Id: zh_TW.php 14708 2011-06-21 06:28:45Z moyo $中,有時候將「用戶」翻譯為「使用者」,總覺得不是很統一。「用戶」是中國大陸的用詞,臺灣這邊主要是以「使用者」為主。

此外還有「授權」、「外部連結」等零零總總許多翻譯都看起來很奇怪。我一邊修改這個語系檔,一邊把他上傳到SkyDrive。等到改到自己覺得合適時,我再發佈這個訊息。

如果你使用的是moyo的版本,那麼有些用詞看起來會不太一樣,這是因為我這邊介紹的是修改過的版本的關係。


以下開始介紹如何新增超級管理者

1. 以管理者登入

image

GLPI安裝好之後通常會有預設的超級管理者,預設是:

  • 帳號:glpi
  • 密碼:glpi

請先以超級管理者的使用者身分登入GLPI吧。

2. 新增使用者

image

接著到「主頁」>「管理」>「使用者」中。

image

進入「新增使用者」。

image

建立新的使用者。必須注意的是,右邊欄位的「密碼」即使沒有填也能新增,只是該使用者就無法登入。請記得要填一下密碼喔。

寫完之後就按下「新增」按鈕吧。

image

順利的話就能看到新增成功的訊息。

3. 新增權限使用者

image

回到「主頁」>「管理」>「使用者」頁面,點選剛剛新增的使用者的名字。

image

確認是在權限的頁籤中。

image

在使用者資訊下方,有個「新增權限給使用者」的區塊。請將「個人配置」選擇「super-admin」,然後按下右邊的「新增」按鈕。

image

確認底下的權限列表已經有了「super-admin」即可。

4. 以新增的使用者登入

image

為了測試新的使用者是否能正常登入,首先先要登出目前的使用者。「登出」的功能在右上角。

image

接著以剛剛新增的使用者名稱與密碼登入。

image

一開始登入時,只會看到「post-only」權限可以使用的功能。

如果要改變權限,請在導覽列下方的下拉式選單中,選擇「super-admin」的權限。

image

改為「super-admin」之後,就能看到所有功能了。

(more...)

IPFire 實作反向代理伺服器(Reverse Proxy)

IPFire 實作反向代理伺服器(Reverse Proxy)

2011-09-01_123836 ipfire logo 

IPFire是我最近在研究防火牆套裝系統中覺得較為合適的一套軟體。它是以Linux為基礎發展而成的作業系統,專門用來作為防火牆、DHCP伺服器、NAT路由器等功能。

IPFire在安裝Pound套件之後一樣可以作為反向代理伺服器(reverse proxy)使用,不過Pound的設定檔必須要透過指令列來修改,不是很方便。我用PHP寫了一個pound.cfg設定檔編輯器,並將之整合到IPFire的管理介面中。

以下簡介IPFire、反向代理伺服器套件Pound、IPFire安裝Pound與pound.cfg設定檔編輯器的方法,以及如何設定Pound反向代理伺服器。


IPFire簡介

2011-09-01_123836 ipfire logo

IPFire是一個設計作為防火牆的伺服器系統,採GNU第三版發佈,可供人免費自由使用。它主要是用於可設定、調整大小的中小型企業網路與家庭網路中。

在這個前提之下,IPFire原始安裝時只提供了最小的功能,但附有大量的擴充套件(add-ons),只要點點滑鼠就能輕易安裝。這也是IPFire與其他防火牆系統的差異所在:它很容易設定各種功能,並易於管理。

IPFire的安裝與設定都十分簡單,就跟它企鵝火燒屁股的標誌一樣可愛。儘管它並沒有許多UTM(Unified Threat Management,整合式威脅防護系統)主打的複雜功能,但容易上手、設定、並能夠滿足我的需求,對我來說就足夠了。

不過老實說,它網頁管理端的防火牆設定只能設定單一來源位置,如果要規劃複雜的防火牆規則,例如我之前的iptables設定,那麼就得要用指令列來手動設定iptables了。

Pound簡介

Pound是一種反向代理伺服器(reverse proxy)、負載平衡器(load balancer)以及網頁伺服器的前端(front-end)HTTPS管理器。Pound可將流量負載分散至多台網頁伺服器,並能夠使用方便的SSL包裝器加密HTTP封包,讓原本沒有HTTPS功能的網頁伺服器也能夠使用HTTPS提供服務。Pound是以GPL發佈,可供人免費自由地使用。

網路上實作反向代理伺服器的套件很多,大多人都使用Squid與Apache,而之前我也用Lighttpd來做反向代理伺服器。Squid設定複雜不易上手;Apache我試過,但不太穩定;Lighttpd雖然不錯用,但是以Lighttpd作為網頁伺服器的情況不常碰到(IPFire是用Apache);而這個Pound則是專門用來作為反向代理伺服器的套件,跟前面敘述的套件不同的地方是,Pound並沒有代理伺服器特有的快取功能,而完全只負責轉遞封包,這是在使用Pound需要注意到的問題。此外,Pound設定簡單容易上手,這也是我喜歡Pound的特色。

來聊個題外話:通常Pound套件會安裝在獨立的負載平衡伺服器中,但偶爾也會遇到將網頁伺服器與Pound套件安裝在同一台伺服器的情況。由於Pound必須監聽連接埠80才能引導封包流向,這會與一般的網頁伺服器(如Apache)監聽連接埠80相互衝突。我看有些設定是修改網頁伺服器的連接埠,例如改為8080,然後讓Pound在引導封包流向時將80轉為8080,達到兩種服務共同相處的目的。稍後在介紹Pound設定檔pound.cfg的內容時,相信應該很容易理解這個作法。不過本篇並不會處理這樣的問題,當做閒聊看看就算了。


接下來開始介紹IPFire上安裝Pound與Pound設定檔pound.cfg編輯器的方法,以及設定Pound反向代理伺服器的方法。

IPFire安裝Pound

我參考了原本IPFire安裝Pound的教學,加入我額外開發的pound.cfg設定檔編輯器,所以步驟變得有點複雜。如果有任何講述錯誤的地方,請多多指教。

1. 前置作業:安裝IPFire與開啟網頁管理介面(Web Interface)

安裝IPFire的步驟挺簡單的,就跟安裝普通的Linux作業系統一樣,我就不再贅述。

一開始常見的問題通常是要如何連上網頁管理介面(Web Interface)。不過這也不是本篇的重點,我也沒打算花太多篇幅敘述這個作法。簡單來說:

  1. 請使用內部網路(LAN)的電腦來連線。
  2. 連線到https://192.168.0.1:444
  3. 預設帳號為admin,密碼為IPFire安裝時設定的密碼。

以下所有步驟都必須要從網頁管理介面操作,請想辦法努力做到這一步吧。

2. 設定防火牆

這一步也是要在內部網路的電腦中連到IPFire網頁管理介面進行操作。

image

請進入firewall > External Access頁面中,設定網際網路連線可連入IPFire的規則。

主要欄位說明如下:

  • TCP:封包類型。我們大部分的服務都是用TCP進行,此處請選TCP。
  • Destination port:目標連接埠。為了讓網際網路的電腦可以連到IPFire的網頁管理介面,此處請開放444連接埠。
  • Remark:說明。我們為此規則加入「ipfire web interface」的說明。也可以輸入中文。

最後按下「Add」按鈕,就完成了新增規則的作業。以下就能用任意電腦連線至IPFire的網頁管理介面了。

同時,也請你以相同的步驟,開啟以下幾個之後會用到的連接埠:

  • 連接埠222:IPFire使用的SSH通訊協定。
  • 連接埠80:Pound監聽的HTTP通訊協定。
  • 連接埠443:Pound監聽的HTTPS通訊協定。
3. 開啟SSH

2011-08-31_184738 ssh access (draw)

請開啟網頁管理介面中的system > SSH Access頁面。

在ssh區塊中,勾選以下選項:

  • SSH Access:讓IPFire可以使用SSH。
  • Allow TCP forwarding:允許TCP封包轉遞。
  • Allow password based authentication:允許密碼認證。
  • Allow public key based authentication:允許公開金鑰認證。

加上前一步驟中開放了防火牆,接下來你可以就用你的電腦以SSH連線至IPFire。IPFire的SSH連接埠為222,這跟一般預設的22有所不同,因此比較不容易被駭客猜到。

稍後我們會透過SFTP(SSH的FTP模式)上傳檔案,我是使用FileZilla來上傳。如果要用SSH的指令列模式操作IPFire的話,我通常是使用PieTTY,但是指令列模式操作比較困難,本篇也不打算多談,僅供進階使用者使用而已。

4. 檔案上傳

以下幾個檔案請以SFTP方式上傳到IPFire的指定路徑中。

pound
  • 下載位址
  • 存放路徑:/etc/sysconfig/pound
  • 開機時自動啟動pound的設定。
ipfire-interface-ssl.conf
  • 下載位址
  • 存放路徑:/etc/httpd/conf/vhosts.d/ipfire-interface-ssl.conf
  • 讓Apache可以使用PHP程式。其實IPFire的Apache本來就有載入PHP元件,但並沒有設定PHP關連。此檔案就是加入了PHP的關聯設定。
pakfire.cgi
  • 下載位址
  • 存放路徑:/srv/web/ipfire/cgi-bin/pakfire.cgi
  • 在IPFire網頁管理介面中加入開啟pound.cfg的連結。
pound_edit.php
  • 下載位址 (如果新版本IPFire的pound.cfg路徑有修改的話,請下載這個檔案)
  • 存放路徑:/srv/web/ipfire/html/pound_edit.php
  • 編輯pound.cfg設定檔的程式

檔案放完之後,要記得重新啟動apache喔。指令如下:

[root@ipfire ~]# /etc/init.d/apache restart
Restarting Apache daemon... [ OK ]

5. IPFire安裝Pound套件

2011-08-31_172002 pound install (draw)

在網頁管理介面端,進入ipfire > Pakfire頁面,請在Available Addons中選擇「pound」(我目前使用的是pound-2.5-2版本),然後按下下面的「+」按鈕進行安裝。

2011-08-31_172904 pound install comfirm

接著IPFire會要你確認是否要安裝。按下綠色向右箭頭確認即可。稍微等待一段時間,IPFire一下子就會裝好Pound套件,並跳回剛剛的Pakfire頁面中。

6. 開啟pound.cfg editor

2011-08-31_173052 pound.cfg editor path

安裝完Pound套件之後,網頁管理介面的ipfire > Pakfire下方應該會出現pound區塊。請開啟pound.cfg editor連結。

2011-08-31_172934 pound.cfg editor

接著會開啟pound.cfg editor視窗,你就可以在此畫面中編輯Pound的設定檔了。詳細的設定稍後會再敘述,此處只要確認可以開啟即可。

7. 重新啟動IPFire

2011-09-01_132305 reboot

以上設定完畢之後,需要重新啟動Apache跟Pound,設定才會生效。你可以從網頁管理介面中的 system頁面找到「Reboot?」按鈕,按下去之後就會讓IPFire重開機了。

如果你會使用SSH指令列操作IPFire,也可以輸入以下兩個指令,各別將Apache與Pound重新啟動:

[root@ipfire /]# /etc/init.d/apache restart
[root@ipfire /]# /etc/init.d/pound restart

到此為止,IPFire安裝Pound就大功告成了。


設定pound反向代理伺服器

反向代理伺服器是一種特殊的網路架構,它利用FQDN(Fully Qualified Domain Name)透過反向代理伺服器連接到內部網路的伺服器。其原理我已經在之前討論pfSense時介紹過了,在此不再贅述。

Pound作為反向代理伺服器的設定方式很容易上手,在此我謹介紹最簡單的範例。我先講述一下範例的網路拓蹼,然後再講要如何設定Pound。如果要進行更複雜的設定,請參考Pound官方網站的說明

1. 網路拓蹼規劃

ipfire 網路拓蹼

現在的網路拓蹼架構如上圖,IPFire作為防火牆與路由器,負責連接網際網路(外部網路)與內部網路兩者。

在內部網路中,有一台網頁伺服器提供Joomla網站服務,內部網路的IP為192.168.0.20

為了讓網際網路的電腦可以連線至Joomla網站,我們先註冊一個FQDN:joomla.example.com,並指向IPFire伺服器的外部網路IP:140.119.61.254

接著我們就要設定IPFire中的Pound套件,讓它知道接收到來自joomla.example.com的封包時,要轉遞到內部網路中的Joomla伺服器。

2. 進入pound.cfg editor

Pound的設定檔是/etc/pound.cfg。如果你在上述步驟中一起安裝了pound.cfg編輯器,那麼你可以透過它從IPFire網頁管理介面中編輯pound.cfg。

請開啟IPFire的網頁管理介面,進入ipfire > Pakfire,找到最下面的pound.cfg editor,開啟視窗。

3. 編輯pound.cfg

依照目前的網路拓蹼規劃,有幾個參數是必須要確定的:

  • IPFire的外部網路IP位置:140.119.61.254 (以藍色表示)
  • FQDN:joomla.example.com (以紅色表示)
  • 內部網路伺服器的IP位置:192.168.0.20 (以綠色表示)

如此設定pound.cfg之後的內容如下,請注意顏色的對應:

ListenHTTP
Address 140.119.61.254
Port 80
Service
HeadRequire "Host: .*joomla.example.com*"
BackEnd
Address 192.168.0.20
Port 80
End
End
End

設定應該算蠻好懂的,在此就不多解釋了。

4. 重新啟動IPFire

修改pound.cfg之後,要重新啟動Pound才會生效。你可以從IPFire的網頁管理介面中將IPFire重新啟動,也可以透過SSH輸入指令「/etc/init.d/pound restart」來重新啟動Pound。

以上Pound的設定就大功告成了。


F&Q

為什麼pound.cfg editor抓不到檔案內容?

可能是IPFire設定的pound.cfg路徑有所修改,詳細請看IPFire addons: pound的說明。


結語

我本來是打算用pfSense作為反向代理伺服器。但很遺憾的是,不知道是不是硬體不支援的關係,我的實體伺服器並沒辦法安裝pfSense。所以我只好臨時找尋其他的方案,而找到現在的這個IPFire。

老實說,IPFire並沒有pfSense容易上手,但還算是堪用就是。希望他真的能夠讓我安裝到實體伺服器中,別讓我又要重找了啊。

至於為什麼pound.cfg editor是用PHP開發的這點,雖然IPFire主要的功能都是用Perl寫成的cgi網頁,但我對cgi並不熟,所以才會折衷用PHP來寫。雖然安裝手續上複雜了一點,但操作時應該比較容易才是吧?至少不必用到vi來編輯pound.cfg設定檔,這點應該可以讓許多管理者容易上手許多才是。

光是研究各個防火牆系統套件花了不少時間,本來想說這個pound.cfg editor應該可以很快完成,結果又因為其他意外拖了很久,實在是很慚愧。希望未來也能繼續努力加油,嗯!

(more...)

pfSense 實作反向代理伺服器(Reverse Proxy)

pfSense 實作反向代理伺服器(Reverse Proxy)

2011-08-12_182742 lighttpd

最近在研究用pfSense(1.2.3版)當做路由器架設內部網路,然後利用FQDN(Fully Qualified Domain Name)透過pfSense連到內部網路中的網頁伺服器的方法。

最簡單的作法是連接埠轉遞(port forward),可是網址帶個連接埠號就是不好看。在此介紹在pfSense中設定Lighttpd的反向代理伺服器(Reverse Proxy),以FQDN連接到內部網路伺服器的作法。這方法只能適用於HTTP跟HTTPS,其他通訊協定就要另外想辦法了。


網路拓蹼狀況說明

網路拓蹼

在介紹原理跟作法之前,必須先讓人搞清楚我現在的網路拓蹼狀況。上圖是目前的網路拓蹼圖。中間的伺服器是用pfSense架設,主機名稱為pfSense,對外網卡的IP是140.119.61.254,這也是我唯一一個可以使用的公用IP(public IP)。對內的內部網卡是192.168.1.1,提供內部區域網路連線到網際網路。內部區域網路中有兩台甚至更多的伺服器,其中一台主機名稱為joomla,內部區域IP為192.168.1.20,執行我架設的joomla網站

現在我跟DNS註冊一個FQDN:joomla.example.com,對應到公用IP 140.119.61.254,也就是pfSense主機。而我要藉由設定pfSense作為反向代理伺服器,讓joomla.example.com連到joomla主機。

再回到上面的網路拓蹼圖,圖片上方是網際網路(internet)的電腦,當他想要連結到「http://joomla.example.com」時,實際上是會先連到pfSense主機,然後我們要想辦法讓pfSense主機再去存取Joolma主機,以達到我們的目標:用FQDN連到pfSense伺服器背後內部區域網路中的網頁伺服器。

達到這個目標的方法很多,其中一個方法就是將pfSense主機設置成反向代理伺服器。


反向代理伺服器(Reverse Proxy)

一般常聽到的代理伺服器(Proxy),像是在家裡要用圖書館的資料庫要先設定代理伺服器的這種,指的都是正向代理伺服器(Forward Proxy)。其運作方式為:客戶端(client)跟代理伺服器要求要下載的資料,代理伺服器先去抓好,然後再回傳給客戶端。

而本篇討論的網路拓蹼中,目標是要讓網際網路的電腦連到內部區域網路的伺服器,這個作法則是透過中間的反向代理伺服器來進行。反向代理伺服器的運作方式一樣是根據網際網路上客戶端的請求,從內部區域網路中的伺服器抓取資料,然後回傳給客戶端。

反向代理伺服器的好處有:

  1. 當網路被隔離外部與內部時,可以讓外部電腦取用內部伺服器的網站。
  2. 可以直接用FQDN來連接內部伺服器,如:http://joomla.example.com;不需要像連接埠轉遞還附帶額外的連接埠,如:http://joomla.example.com:64080/
  3. 代理伺服器可以進行快取與負載平衡的機制。

詳細的內容請參考聯成電腦的使用 Reverse Proxy代理服務

然而,跟NAT的連接埠轉遞相比之下,反向代理伺服器設定比較麻煩,還有一些額外的速度考量等缺點。

在本篇要討論的情況中,pfSense就是扮演反向代理伺服器的角色。

架設反向代理伺服器的工具很多種,網路上大家常使用的工具為SquidApache。pfSense雖然可以安裝Squid,但是Squid設定反向代理伺服器的配置挺複雜的,我沒有仔細研究。Apache的反向代理伺服器設定就很簡單,但是pfSense預設不是用Apache執行網頁伺服器,而是用Lighttpd

Vadim Tkachenko有介紹Lighttpd設定反向代理伺服器的方法,但在pfSense中操作Lighttpd的方式有點不同。在此我主要介紹的是在pfSense(1.2.3版)中設定Lighttpd作為反向代理伺服器的過程。


Lighttpd設定反向代理伺服器

現在我們要設定Lighttpd作為反向代理伺服器,而我們有個FQDN:joomla.example.com,指向pfSense主機的IP。而實際上架設joomla的主機內部IP為192.168.1.20。這些設定必須事先配置好,接下來才能開始設定反向代理伺服器。

1. 開啟pfSense的SSH連線

我大部分的操作都是用SSH進行,遠端操作比起在主機前面還要方便,要編修檔案時也可以用FileZilla以sftp來傳送,所以在此建議打開pfSense的SSH連線。

pfSense開啟SSH連線的設定是在Adcanced中的Secure Shell,請勾選「Enable Secure Shell」,再按下「Save」按鈕儲存。

2. 下載/var/etc/lighty-webConfigurator.conf

你可以利用FileZilla下載該檔案到本機電腦編輯。我一直無法習慣pfSense內建的vi編輯器,還是下載回來編輯,然後再上傳回比較方便。

3. 加入反向代理伺服器設定

接著我們編輯lighty-webConfigurator.conf這個檔案。

首先是要先額外載入mod_proxy模組,請在server.modules參數中加入"mod_proxy”。請注意以下紅字的部份,中間要相隔逗號:

## modules to load
server.modules = (

"mod_access", "mod_accesslog",
"mod_fastcgi", "mod_cgi",
"mod_proxy"

)

然後在檔案的最後插入反向代理伺服器的設定:

#### Reserve Porxy
$HTTP["host"] == "joomla.example.com" {
cache.enable = "false"
proxy.server = ( "" => ( ( "host" => "192.168.1.20") ) )
}

必須要說明的是cache.enable設定。在本篇當中,反向代理伺服器的目的不在於加速,而只是在於連結外網與內網而已。因此這邊是不使用快取,避免讀取到過期的舊檔案。

詳細的代理伺服器設定請參考Lighttpd的mod_proxy說明

修改之後,請再上傳到/var/etc/目錄,覆寫原本的lighty-webConfigurator.conf檔案。

4. 重新啟動Lighttpd服務

pfSense主機上的Lighttpd服務要重新啟動,剛剛修改的設定才會生效。但是pfSense的Lighttpd不知道是怎麼執行的,我找不到restart選項來用。所以在此我是關閉既有的Lighttpd,再開啟Lighttpd服務,來達到重新啟動的效果。

請以SSH連接到pfSense主機,然後用以下步驟來重新啟動Lighttpd。

4.1 關閉執行中的Lighttpd

pfSense預設開啟時會執行Lighttpd,我們要先把它關掉。

查詢執行中的Lighttpd的指令是ps,執行之後的結果如下,請注意紅字的執行緒編號。這個指令每次執行的結果都不同,執行緒編號也不會相同,請依據你的狀況來取得現在的Lighttpd執行緒編號:

# ps aux | grep light
root 13839 0.0 2.6 5316 3068 ?? S 12:08PM 0:05.15 lighttpd -f /var/etc/lighty-webConfigurator.conf

然後再用kill指令關閉Lighttpd,kill指令後面接的是Lighttpd的執行緒編號:

# kill 13839

這樣就關閉Lighttpd了。

4.2 開啟Lighttpd

開啟Lighttpd的方法如下:

# lighttpd -f /var/etc/lighty-webConfigurator.conf

這樣就重新啟動Lighttpd了。

不過,用kill殺掉執行緒好像會有很多問題,如果可以的話,還是重新啟動pfSense主機,這樣就能確保Lighttpd一定會重新載入。

4.3 測試 joomla.example.com

這樣就設定完成了,請試著用外部網路的電腦連到 joomla.example.com ,看看能不能連接到 joomla主機吧。

討論

反向代理伺服器可以上傳檔案

2011-08-12_202946 phpfilemanager upload 成功

反向代理伺服器看起來只是下載、轉交檔案而已,那麼像是上傳檔案這種要跟伺服器互動的操作,反向代理伺服器可以完成嗎?測試之後是可以的。

我在內部網路伺服器中架設了XAMPPphpFileManager,然後嘗試上傳檔案,結果很順利。

反向代理伺服器效能與速度的考量

由於客戶端瀏覽網站的所有動作都必須經過反向代理伺服器,因此反向代理伺服器的運作效能也不能太差,否則會拖慢網頁速度,這是他的缺點。

不過另一方面,反向代理伺服器也可以考慮設置快取與負載平衡,加快網頁的速度。這部份的設定請參考Lighttpd的mod_proxy說明

只用於HTTP跟HTTPS通訊協定

我這篇主要是用於HTTP通訊協定。

HTTPS的設定有些不同,雖然mod_proxy說明中沒有寫,不過網路上很容易可以找到相關設定說明,例如lighttpd論壇中的SLL trough reverse proxy。我對HTTPS並沒有這麼熟,也沒有急迫需求,所以並沒有動手設定。如果有人設定成功,歡迎留言分享一下作法。

至於其他通訊協定,例如SSH,好像就不是Lighttpd管轄的範圍,必須仰賴其他程式,或是直接設定連接埠轉遞比較快。


結語

網路上pfSense的討論很少提及lighttpd,而pfSense的lighttpd操作也跟一般在FreeBSD上的操作不太一樣,我為此找了好一段時間。上述方法其實並不太漂亮,特別是重新啟動Lighttpd的方法。如果有人對pfSense很熟悉的話,請務必指正我這個錯誤的方法吧!

好,繼續研究pfSense。

(more...)