使用 Apache 做為 forward proxy

為了做點測試而需要架設 apache proxy server
按理說是挺簡單的東西,結果在 https 的地方卡了一下

以下安裝環境是 Debian 7:

就是少了那個 proxy_connect 害我 https 一直出現 500 錯誤。

如果少了 proxy_connect 的話就會出現這樣的錯誤訊息:

其它的像是 mod_ssl 之類的都不需要。

設定上層 proxy,導給 Squid:

注意這只是個人臨時測試用,架在區網內。若要用在正式的環境,需要對存取 proxy 的用戶做些控管,例如僅允許某些 IP 之類的。

Win8 Metro IE 不允許連往 localhost 127.0.0.1

挺奇怪的問題,在本機執行網頁伺服器做為開發環境,在桌面開啟 IE 可以正常瀏覽,但是若到 Metro UI 開啟 IE 就沒辦法看了。而且我桌面版的 IE 已經關閉了 EPM (Enhanced Protected Mode)。

然後,我在 MSDN Blog 看到了這一句:Metro style Internet Explorer always runs with Enhanced Protected Mode enabled

嗯這就是問題的來源了。

經過了一番 Google 以後,找到了解決辦法,必須要使用 CheckNetIsolation 這個指令來允許 Metro IE 存取 localhost:

第二行是用來恢復原狀用的。

參考資料:
http://msdn.microsoft.com/en-us/library/ie/hh771832(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/ie/hh780593.aspx
http://blogs.msdn.com/b/ieinternals/archive/2012/03/23/understanding-ie10-enhanced-protected-mode-network-security-addons-cookies-metro-desktop.aspx

HiNet 企業網路固定 IP 區網互連不通

前幾天才在 ithome 看到類似的問題,想不到今天就被我遇到了。

原本 ATUR 上面使用了第一到三孔,今天在第四孔上面接上了設備,發現完全無法連往區網內的其它固定 IP,而其它三個孔都是通的。

利用 tcpdump 查了一下,發現第四孔送到區網內的 ARP 封包沒有回應,所以沒辦法連線。猜測應該是 ATUR 內部有些設定造成的。

連進 ATUR 偷看一下,發現一個很可疑的東西:
cht_port_arp_1s
剛好 MOD 的 Port 是設定在第四孔,於是嘗試看看改成選第一個空白,並重開機器測試:
cht_port_arp_2s

然後就通了 xD 誤打誤撞的解決了。

FreeBSD 使用新的 pkgng 套件管理系統

pkgng 意思是 Next Generation (下一代)的套件管理系統,將用來取代原有的 pkg_* 系列指令。
主要的指令只有一個,就是 pkg。

新的 FreeBSD 將會預設使用 pkgng 來運作,所以是時候來練習一下了。
要在現有的 8.x 或 9.x 使用的話,步驟如下:

  • 安裝 ports-mgmt/pkg
  • 執行 pkg2ng 進行轉換
  • 增加 WITH_PKGNG=yes 到 /etc/make.conf
  • 設定 repository,在 /usr/local/etc/pkg/repos/FreeBSD.conf 加入以下內容:

這樣就可以了。

pkgng 依然與原有的 pkg_* 系列指令保有很好的相容性,只要將原有指令的底線拿掉就可以了。
例如 pkg_version -v 現在可以用 pkg version -v 來取代,其它依此類推。

試用了一下以後,覺得這個新系統用起來很方便,也改進了一些小缺點,例如剛安裝完新的東西不用再 rehash 就能用了。
因為是直接安裝編譯好的 binary 檔,所以速度也很不錯。當然要用 ports 依然是可以的,沒有問題。

不過新系統還是有些需要注意的地方,原本在 ports config 裡面設定的選項可能會壞掉。例如 php 如果要安裝 apache module,就需要另外安裝 mod_php5,直接使用 pkg upgrade 會把原本的 php module 給刪掉,造成 apache 無法啟動。另外 svn 附帶的 mod_dav_svn 則是只能由 ports 來安裝編譯,目前(2014/4/15)還沒有找到 pkgng 相對應的安裝方法。

詳細的指令用法可以參考 https://wiki.freebsd.org/pkgng#the_pkg_command

XP 更新 ESXi 及 VMware vSphere Client 後出現錯誤 An unknown connection error occurred. The Client could not send a complete request to the server.

今天給 ESXi 更新到 5.1 update2 (1483097) 以後,我平常用來跑 vSphere Client 的 XP 就沒辦法連上 ESXi 了
用 Windows 7 卻沒什麼問題,所以重新檢查了 XP ,確認安裝的確實是相應的新版本
上網查了一下,發現是個普遍問題,ESXi 5.5 或 ESXi 5.1 update2 都有這樣的情況

原因簡單來說,是因為 ESXi 停用了較不安全的 cipher suite
而 XP/2003 正是使用了不夠安全的 cipher suite 去連線,所以就失敗了
若是 64 位元的系統,可以透過安裝 Windows 更新來解決:
http://hotfixv4.microsoft.com/Windows%20Server%202003/sp3/Fix192447/3790/free/351403_ENU_x64_zip.exe
http://hotfixv4.microsoft.com/Windows%20Server%202003/sp3/Fix192447/3790/free/351385_ENU_i386_zip.exe

偏偏我用的是 32 位元的 XP 啊…那就只能降低 ESXi 的安全性設定了
方法如下:

  1. ssh 連線到 ESXi
  2. 移動到設定檔的位置:cd /etc/vmware/rhttpproxy/
  3. 先做個備份:cp config.xml config_bak.xml
  4. 修改 config.xml :vi config.xml
  5. 找到 <vmacore> 裡面的 <ssl> 區塊
  6. 在裡面加上一行:<cipherList>ALL</cipherList>
  7. 存檔後重啟服務:/etc/init.d/rhttpproxy restart

修改後的 ssl 區塊應該長成這樣:

上述步驟做完後我就可以正常連線了。

參考資料:
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2049143

在 Ubuntu Server 12.04 安裝 Redmine

寫這篇主要是簡化了官方的安裝教學
官方教學裡面包含了很多不同的情況,所以看起來複雜了一些。
如果你的 Ubuntu 是剛裝好的新系統,而且只是要將 Redmine 安裝起來,只打算跑 Redmine 一個網站,那只要把下面這些命令跑完就行了:

上面的命令會修改到 /etc/apache2/sites-available/default,讓 Redmine 成為預設網站,修改後的設定檔應該長成這樣:

另外,如果要安裝新版的 Redmine,那需要多一些步驟:

接著就可以用瀏覽器打開 Redmine 網頁了,記得先修改 admin 的密碼。
這篇算是最簡化的作法了,如果這個 Redmine 是放在網路上公開存取的話,建議還要加上 https 與其它安全性設定。

vsftpd 設定共用資料夾

平台是 Linux + vsftpd 3
主要用途是公司部門內同事分享檔案用,所以需要有個共用資料夾讓大家能共同存取。
基本的設定就略過,這邊主要將分享共用資料夾的方法記錄下來。

首先先建立一個群組用來分享檔案

然後建立分享用的資料夾

將權限設定好, 除了給群組完整的權限以外, 還要加上sticky bit, 讓ftp新增或上傳的檔案有相同的群組權限

接著是修改 vsftpd.conf, 加入 umask 的設定

以上準備工作就算完成了, 下面針對每個要存取共享資料的帳號做設定
先是將帳號加進群組裡, 假設帳號是 peter

然後在家目錄內增加共享資料夾

以上, 所有的使用者就可以共享一個資料夾, 也都可以任意刪除檔案
如果希望使用者只能刪除或修改自己上傳的東西也可以
只要將 vsftpd.conf 裡的 umask 改成 027 即可

Windows Server 2012 安裝 IIS PHP MySQL

今天下載了 Windows Server 2012 試用版來玩玩。
第一個感想:不知道怎麼關機…
以下隨性的紀錄一下過程與問題。

安裝 IIS,PHP 與 MySQL
IIS 就從 Server Manager 去新增 Role 就可以了,PHP 跟 MySQL 則是去下載 Web Platform Installer (WebPI) 來安裝。

WebPI 這東西很像 Linux 上的套件管理系統,可以幫你安裝許多東西,還順便弄些初始設定。

MySQL安裝好後,預設是 listen 0.0.0.0 的。所以如果只是本機用,二話不說先去改成 127.0.0.1。
去 Program Files 裡找到 MySQL 的資料夾,修改 my.ini ,加入 bind-address=127.0.0.1 然後重啟服務就可以了。

PHP 的部份沒遇到什麼特殊的問題,基本上直接就可以使用。

接著將一個使用 CodeIgniter 的網站放上去測試看看,第一步先設定 url rewrite:

  • 打開IIS Manager
  • 選擇要編輯的站台
  • 點選 URL Rewrite
  • 點選 Add Rules
  • 點選 Blank rule
  • Name: 隨意取個名字
  • Pattern: 輸入 ^(.*)$
  • 點開 Conditions
  • 新增 rule,選擇 Is Not a File
  • 新增 rule,選擇 Is Not a Directory
  • 最後到底下的 Action,Rewrite URL 填入 index.php

這樣子就設定好了,正常運作。
參考: http://quitedestroyer.blogspot.tw/2012/05/codeigniter-url-rewriting-on-iis-7.html

若是需要上傳檔案,對資料夾要有寫入權限。
安全性比較要求的站可以針對 IIS 來設定權限。
懶一點的就將上傳資料夾直接開放所有權限給 Users 群組即可。

當 php 連往 localhost 的資料庫時,會有延遲。
在我的環境大約是延遲了一秒鐘,簡直慢到想直接放棄…
最後查到這個是普遍問題,在 Server 2012 以及 Windows 8 都會發生。
最佳解法就是在 php 連接資料庫時,不要用 “localhost”,而是改用 127.0.0.1 去連線。
參考: http://forums.iis.net/t/1200661.aspx

FreeBSD 使用 vsftpd 的亂碼問題

這是一個困擾我已久的問題,使用 FileZilla 去連 ftp 時偶爾就會跑出亂碼來。明明 FreeBSD, vsftpd, FileZilla 三者都有支援 utf8 的編碼,但就不知道為什麼還會出這種問題。其實我一度以為是 vsftpd 太機車了所以跟別人格格不入,但這單純只是我的猜測而已。

以前都是在 FileZilla 的站台設定裡面強制使用 utf8 來解決這個問題,但是昨天在幫別人測試 ftp 時,卻發現他們家的 vsftpd 不需要強制使用 utf8,FileZilla就可以正常的偵測到要使用 utf8 !發現這個情況以後我開始找原因,首先看看是不是設定檔哪裡沒設定好,但卻發現他用的設定檔裡面也沒有什麼特別不一樣的,跟我用的差不多。難不成是 vsftpd 偏心嗎?在 CentOS 上面就乖乖的開啟 utf8 ,在 FreeBSD 上就搗亂。

連上朋友的 ftp 以後,可以看見他的 feat 回應是:

然後這是我的:

為什麼硬生生的少了最後的 utf8 啊!?為了這個問題,我去Google了半天都找不到原因,看起來也沒什麼人遇到類似問題。心情非常不愉快,所以就跑去看 vsftpd 的原始碼到底是怎麼回事。

首先就從 feat 的部份查起,feat 指令的回應是在 features.c 裡面,可以看到下列程式碼:

OK,看樣子 tunable_convert_charset_enable 這個變數決定了 feat 裡面有沒有包含 utf8。接著就查這個變數的底,看到底怎麼來的。在 parseconf.c 裡面看到這行:

哦,原來要在設定檔裡面設置 convert_charset_enable=1 就可以了。

設定好以後再試一次看看,還是沒有 -ㄦ- …繼續翻 code 。

接著在 main.c 裡面看到這個:

這下總算抓到了,原來要在設定檔裡面同時存在著 local_charset 與 convert_charset_enable 才可以。最後在 vsftpd.conf 裡增加下面這兩行就搞定了:

雖然問題解決了很高興,但這過程還真是曲折啊….