Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(): Failed opening '/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php' for inclusion (include_path='.:/opt/cpanel/ea-php70/root/usr/share/pear') in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24
admin – 第 37 頁 – unethost無限空間虛擬主機 技術分享部落格

如果要創業,需要先考慮租虛擬主機嗎?

從統計來講,新創的公司90%活不過3年,這往往是成本控管的問題。由於,身為主機商的我也常被問這個問題:「如果要創業,需要先考慮租虛擬主機嗎?」

在此也提供我的觀點。我的觀點的核心思考,是先有盈餘再考慮投資。
(1) 最初期可以考慮不租用主機,買域名就好。域名一個價位約在台幣400塊一年,算是容易負擔得起的價位。有了自己的獨立域名,也可以用這個域名,設定轉址,指向自己在露天、雅虎的商城,或是自己的blog。

(2) 對於傳統產業
如果是賣衣服、鞋子、百貨等等的線上商店,且商品沒有違反善良風俗,也就是說:在露天、雅虎等線上商城都可以上架,那其實大可以把主機的費用先省下來,先用免費的就好。 門面固然重要,但是也可以不急於一時。等到線上商店起步一兩年後,已經有一定的營收時,例如,每年營收100萬。這時候,可以開始考慮逐步引入虛擬主機。初期的話,由於unethost提供的主機是無限流量的,可以考慮先租來做為圖床使用。中後期,則可以考慮在租用的空間裡,發展自己的帳務系統、進銷存系統、購物車等。

(3) 對於科技資訊業
一般而言, 科技資訊業本身的員工,對於網站有一定的維護能力,不一定需要租用虛擬主機。然而這時候,可以考慮成本和穩定性。舉個例子,租用虛擬主機之後,由於公司對外網站,是架在主機商的共用伺服器中,如此就避免了架在公司內部電腦,常有的停電、中毒等因素,造成的網站停擺。

最初期,可以考慮先只購買域名。等到公司對外網站逐步發展到一定的規模時,例如:每天上站人數1000人、或是說,每天有大量的檔案下載,這時就可以考慮換成租用虛擬主機。

(4) 對於內容文化產業
這個行業的特色是,一方面賣的商品,算是虛擬的商品( 影片、文字等),所以對網站的需求比較高,另一方面,這個行業的核心,並不是資訊處理。也就是說,從事這個行業的人員,通常不會有高水準的IT素養。在這樣子的現實之下,儘早租用主機,把非核心的網站架設交給主機商。等到論壇/blog等程式架好了之後,再來自己維護。該外包的外包,業主本身專心於本業,算是比較經濟的作法。

 

延伸閱讀: 如何取網域名稱?可以幫助seo的優化嗎?

apache mod_security關閉單一網域

有一些程式,例如Ecshop,遇到apache mod_security這個模組,ecshop的舊版本,會有不相容的情況。這種時候,如果客戶不願意升級,我必須採取的處理方式,就是針對該客戶的單一網域,關閉apache mod_security

要針對單一網域關閉apache的mod_security,根據我的測試,無法使用.htaccess檔來做,會當掉。一定要直接把相關的指令,寫在apache的config檔裡。而cpanel/WHM的apache config檔,是配合GUI自動生成的,不能隨便修改。所以這個改法,必須考慮cpanel的檔案配置。方法如下:

mkdir -p /usr/local/apache/conf/userdata/std/2/username/domain.com

然後生成檔案:

/usr/local/apache/conf/userdata/std/2/username/domain.com/mod_security.conf

在這個檔案中,加入:

<IfModule mod_security2.c> SecRuleEngine Off </IfModule>

存檔

然後,執行:

/scripts/ensure_vhost_includes --user=username

其中,username是cpanel的使用者名稱,而domain.com是網域名稱。

msn對話重新編排

常常遇到一種情境,需要把msn的對話記錄,截取下來做為資料。

典型的MSN對話長成這樣子:

21/8/2012 PM 3:22:52 http://unethost.com QQ 其實我是希望你‧‧‧
21/8/2012 PM 3:23:13 http://unethost.com QQ 我們公司的購物車系統,叫做WHMCS 
21/8/2012 PM 3:23:21 http://unethost.com QQ 我有找到免費的影片教學 
21/8/2012 PM 3:23:30 http://unethost.com QQ 但是,這個影片教學是4.0版的

這樣子的資料,如果直接貼上的話,因為前面的日期/時間/使用者名稱太多了,造成閱讀者的困難,所以比較細心的作法,應該要改成這樣子:

我:其實我是希望你直接以錄製的方式來做 
我:我們公司的購物車系統,叫做WHMCS 
我:國外有這個的影片教學 
我:但是,這個影片教學是4.0版的

這個修改,把日期/使用者取代掉,是很容易的,因為pattern是固定的。然而,如果要取代掉幾點幾分,這個時間的部分時,就困難多了,因為pattern是不固定的。時間會一直變動。

以這個例子裡,要取代掉時間的話,需要用到正規表示法(regular expressions),以geany為例子的話,就是先按下ctrl +H 。出現「取代的視窗」,在Search for這邊填上[0-9]:[0-9][0-9]:[0-9][0-9],並且勾選 Use regualr expressions,在Replace All這邊,按下 In Document。這樣子就可以一口氣消去所有的時間。

減少垃圾信的技巧

一般而言,只要把Email信箱公佈在web之後,由於網路上會有很多的掃名單機器人,不停地爬網頁,網頁上的email信箱很自然就會被列入廣告信的名單。

如果要避免因為公布email而收到垃圾信,其實是有方法的。其中一種方法,就是利用機器人看不懂「圖檔」的特性而設計的。將機器人可以讀的email address轉換成圖檔,再放到網站上。

要找這種轉換器,英文的關鍵字是Email icon generator。下方提供操作方法。

  1. 請先連到:http://services.nexodyne.com/email/
  2. 在”Enter your e-mail address:”中填入您的e-mail帳號
  3. 在@後方的下拉選單選好你的E-Mail是哪一家廠商提供的。
  4. 按下”Generate”後,就會產生資料

而產生出來的範本圖檔就像這樣子:

什麼是mod_evasive?

mod_evasive是Apache伺服器的一個第三方模組,可以回避HTTP DoS或DDoS攻擊。它在設計上,是網路檢測和網絡管理工具, 可以很容易地配置與iptables以及諸如此類的防火牆模組溝通。 mod_evasive可以透過電子郵件或syslog程序來回報網路檢測 的結果。

工作原理
通過建立內部動態的IP地址和URI hash表,如果下列的任一條件滿足,就會阻擋某一IP地址對網站的存取:
(1) 對同一網頁每秒超過某個次數的請求。
(2 )每秒針對同一個apache的子程序,送出超過50個請求。
(3) 當某個IP地址被暫時列入黑名單時,依然送出請求。

mod_evasive對於單一伺服器的腳本攻擊或是分布式攻擊,都相當有效。然而就和其它迴避的方法一樣,如果伺服器的頻寬或 是記憶体已經被攻擊的流量佔用,伺服器依然會變慢。所以使用mod_evasive時,將其與iptables這類的防火牆整合,可以更有效地發揮它的功效。

這個模塊會在每個apache子程序中,產生獨立的監聽者(listener),因此mod_evasive有內建的記憶体清理機制和縮放 (scaling)的能力。由於這種在每一個apache子程序中獨立計算攻擊的機制,正常的http請求,幾乎不會被誤判為攻擊。只有 腳本攻擊會被判定為攻擊。就算正在瀏覽網頁的使用者,不停地按F5,使網頁重新載入,也不會被mod_evasive誤判為攻擊。

如何安裝:
(1) 下載
(2) tar zxvf  mod_evasive_1.10.1.tar.gz
(3) cd mod_evasive_1.10.1
(4) ./configure
(5) make && make install
(6) 重新啟動 apache

接下來,是設定檔的部分:

APACHE v1.3
   -----------
   <IfModule mod_evasive.c>
       DOSHashTableSize    3097
       DOSPageCount        2
       DOSSiteCount        50
       DOSPageInterval     1
       DOSSiteInterval     1
       DOSBlockingPeriod   10
   </IfModule>
APACHE v2.0
   -----------
   <IfModule mod_evasive20.c>
       DOSHashTableSize    3097
       DOSPageCount        2
       DOSSiteCount        50
       DOSPageInterval     1
       DOSSiteInterval     1
       DOSBlockingPeriod   10
   </IfModule>

根據敝公司的實務經驗,調節上述的參數,對於阻擋的效果,並沒有很大的影響。但是,有兩點需要特別注意:
(1) apache的keep-alive要設定為true, 否則,mod_evasive的效果會很差。
(2) 安裝完畢之後,務必使用mod_evasive隨安裝包附的 test.pl 程式,來驗証是否mod_evasive被正確的設定了。

附註:防禦DDoS是很複雜困難的技術,如果mod_evasive你無法獨立安裝,或是你安裝了mod_evasive還是無法解決DDoS的問題,請你參考unethost的WAF解決方案

php指定對外連線使用的IP位置

一般而言,主機商的主機,不會只有一個IP位置。通常會有超過一個,以備不時之需。然而,由於網路上的有些服務,常會鎖IP,所以透過php去存取遠端的網站時,有時候就必須考慮這個對外連線使用的IP位置。

使用ifconfig指令,通常eth0上附加的這個ip就是預設的對外連線用IP(outgoing IP address)。由於使用者登入主機時,是一般user,無法使用ifconfig。所以要用其它方法來判斷。其中一種方式是curl。下面這個指令就可以得到系統預設對外主動連線時所使用的IP了。

curl -s ip.appspot.com

而,如果對外是透過php去存取遠端的資料,又必須指定php一定要透過某個網路介面/IP address來連線的話,可以考慮使用php curl library。範例的code如下:

<?
$url = “http://www.google.com”
$curlh = curl_init($url);
curl_setopt($curlh, CURLOPT_USERAGENT, $uagent);
curl_setopt($curlh, CURLOPT_INTERFACE, “888.888.888.888“);
curl_setopt($curlh, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curlh);

echo $result;
?>

其中,”888.888.888.888″,就是要被指定用對外連線用的IP位置。

利用lftp來做資料的備分

lftp本來是linux下才能用的程式,通常我們是推荐客戶使用filezilla這種有GUI的,比較容易學習。不過,由於lftp有一些特性,例如說mirror,讓我們覺得,還是推一下它吧。

在centOS linux下安裝:

安裝lftp前要先增加CentOS官方認可的rpmforge這家的repo。
rpm –import http://apt.sw.be/RPM-GPG-KEY.dag.txt

i386系統
rpm -ihv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
x86_64系統
rpm -ihv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

最後下yum install -y lftp就可以完成安裝。

在windows XP下安裝:

由於通常需要處理Cygwin的問題,比較麻煩。也因此,我們此處提供一個懶人包,是已經打包好Cygwin的lftp zip檔,解開資料夾就可以用了。要用的時候,滑鼠去點mirror.bat這個執行檔。而mirror.txt則是用來給lftp用的command。這個mirror.txt請用記事本修改。

Lftp的常用指令教學:

(1) 登入ftp
lftp 用戶名稱:密碼@ftp地址:通訊端口(預設值21)
或是
open -u 用戶名稱, 密碼 -p 通訊端口 ftp地址

(2) 在本機端的目錄裡移動
lcd 本機電腦的資料夾
// 註:lftp的指令命名原則是,如果命令是L開頭,指的就是local,即本機電腦的操作。所以cd就是對應ftp站的操作。

(3) 從ftp站上,把某一資料夾連同子資料完整地全部抓下來。
mirror 欲下載的目錄

(4) 從本機端,把某一資料夾連同子資料完整地全部傳上去。
mirror -R 欲上傳的目錄

(5) 從ftp站上,把某一資料夾連同子資料完整地全部抓下來,並且,若本地端有遠端沒有的檔案,則把這些多餘的檔案刪除。
mirror -e   欲下載的目錄

Lftp的完整指令,可以查linux的man page,這邊有,不過是英文的。

cpanel主機下,設定不同的帳戶可以共用資料夾

收到了客戶的要求,希望在他所租用的獨立主機下的二個account,A和B,有共用的資料夾。也就是說:

/home/A/public_html/share
/home/B/public_html/share
這兩個資料夾,是指到同一個位置。

本來我以為,只要用ln -s來建softlink,就可以把問題解決了。結果卻失敗了,softlink所在的那個帳戶,用ftp登入後,看不到share這個資料夾。這是為什麼呢?原因是在這邊,它寫說,symbolic link只能指向「正確的」的地方。使用者的ftp帳戶基本上是一個被chroot的環境,所以當然不能去看到別的使用者的檔案。

A symbolic link is a pointer to the “right” file. But if that original file is outside the jail then you can’t access it. This is the goal of a jail. Otherwise a normal user could create a symbolic link in the jail to/etc/passwd and just read it. What a security risk!

So jailed is jailed. Probably a hard link will do the job, as this is a “copy without duplicating the used size”. And for the FTP server it is like a normal file (with all the problems).

那麼,這樣的問題該如何處理呢?用 mount –bind來處理吧。這個是正確的作法。

mkdir /home/website/files/
mount –bind /home/shared/files /home/website/files/

像這樣子的作法,shared這個使用者ftp登入後,就看得到 website這個使用者的資料夾files了。因為 /home/shared/files 和 /home/website/files是同一個資料夾。

如何安裝perl的模組(module)

這幾天在debug時,發現原來bug的來源是因為有perl的模組沒有裝好,於是我們就來研究一下安裝perl module的方法吧。

(1) 先檢查,現在系統裝了那些perl的模組:
先打指令instmodsh,再打l,這樣就會列出系統中的perl modules了。

[root@proxy vhost]# instmodsh
Available commands are:
l – List all installed modules
m <module> – Select a module
q – Quit the program
cmd? l
Installed modules are:
Class::Loader
Crypt::Random
Digest::SHA
Digest::SHA::PurePerl
IPC::SysV
Math::Pari
Net::IP::Match::Regexp
Perl

(2) 來安裝模組吧:

A) 首先啟動 CPAN Shell:
# perl -MCPAN -e shell

B) 在CPAN Shell的環境下,安裝 perl module,以模組IPC::SharedMem為例子
# cpan> install IPC::SharedMem

參考資料:
(1) http://www.cyberciti.biz/faq/how-do-i-find-out-what-perl-modules-already-installed-on-my-system/
(2) http://www.cyberciti.biz/faq/how-do-i-install-a-perl-module/

Discuz的圖形驗証碼出不來

客戶反映,他們的獨立主機上,有Discuz的圖形驗証碼出不來的錯誤。

我們一查php生成的error檔,看到的訊息是:
PHP Fatal error:  Call to undefined function imagettftext()

看來是有少php的library。這個imagettftext()所對應的php library,是GD和freetype這兩個。所以解決之道就是:

  1. 執行cpanel的easyapache:WHM -> Software -> EasyApache
  2. If prompted to upgrade, do so then repeat the above step
  3. Begin customizing based on the current provile
  4. Proceed through the screens until you get to “Step 5”
  5. On “Step 5,” click on “Exhaustive Options”
  6. Under PHP, check the checkbox for GD, ttf
  7. Proceed with Build & Compile Process

一旦成功了,圖形驗証碼就出來了。