Apache mod_vhost_alias 大量虛擬主機設定

先前於研究 suPHP 時,有老師提出自動三級域名自動轉址之服務,例如 test1.example.com 會自動連結與 www.example.com/~test1 的網頁,而不需要做額外的 Virtual Host 或 alias 設定,如此一來各單位若有需要就不必再分別註冊 DNS record,而只需要註冊一筆 wildcard DNS 即可,例如  * CNAME example.com. 即可。

後來發現,Apache 不愧為一包山包海的軟體,連這樣的功能都有內建模組,就是 mod_vhost_alias 模組。將其啟動之後,可以於目錄下建立以下的設定檔:

<VirtualHost *:80>
        UseCanonicalName Off
        VirtualDocumentRoot /usr/local/www/apache22/vhosts/%1

<Directory /usr/local/www/apache22/vhosts/*>
            AllowOverride All
            Options MultiViews +Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
            <Limit GET POST OPTIONS>
                Order allow,deny
                Allow from all
            </Limit>
            <LimitExcept GET POST OPTIONS>
                Order deny,allow
                Deny from all
            </LimitExcept>
</Directory>

</VirtualHost>

其中 mod_vhost_alias 透過 VirtualDocumentRoot  設定導向之網頁目錄。

%1  代表網址的第一個部份,以 test.example.com 為例,解析出之資料夾即為 test,詳細用法可以參考 http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html 

以上的設定,於網頁瀏覽器送出連線的時候,Apache 就會跑去 /usr/local/www/apache22/vhosts 裡面找相對應網址的資料夾,同理可推我們或許可以設定為 /home0/<username>/public_html 之類的設定。

雖然應該不太常會用到,還是給各位參考一下~

Apache mod_vhost_alias 大量虛擬主機設定

Nginx + PHP-FPM on FreeBSD

閒著沒事幹就嘗試把 Apache 2.2 搭配 PHP-FPM 的架構轉移至 Nginx。

根據維基百科,Nginx 是一個高效率、輕量的 HTTP 伺服器,在靜態檔案的效能相當好,不過若是有處理動態網頁 (像是 PHP) 的需求,則一般透過 FastCGI 的模式執行。先前我們已經建置了 Apache + mod_fcgid 搭配 PHP-FPM 的架構,因此在這次的轉移中我們只要把 Apache 換成 Nginx 即可。

首先就是安裝 Nginx。

cd /usr/ports/www/nginx && make install

安裝 PHP-FPM 與設定的部份就不在詳述了,可以找先前的文章參考。

繼續閱讀 “Nginx + PHP-FPM on FreeBSD”

Nginx + PHP-FPM on FreeBSD

FreeBSD 建置 Apache + mod_fastcgi + php-fpm

近日在實驗 Apache 使用 FastCGI (mod_fastcgi) 搭配 PHP 提供的 PHP-FPM 網頁架構。

Apache 如果什麼都沒有動的話,應該預設是跑 prefork ,也就是預先 fork 一些子程序出來等連線,這樣的架構在大量連線的伺服器來說不是很穩定。更改編譯選項可以換成用 worker mpm 方式,如此一來 Apache 可以用 thread  的方式來執行,資源利用較有效率。

除此之外,PHP 的部份也可以改用 FastCGI 的方式來執行。

預設安裝的 mod_php5 的執行方式是由 Apache 呼叫,等待 PHP 程式執行完畢之後再一起輸出給使用者。若是使用 CGI 的方式來執行,則當 Apache 收到 PHP 執行需求的時候,會去叫起 php-cgi 這隻程式,等待其執行完畢之後再回傳結果。當然這也不是有效率的作法,因為一次只接受一個連線,若有多個連線要叫起一堆的 php-cgi。若採用 FastCGI protocol 的方式執行,php-cgi 這隻程式會成為一隻 daemon 在背景執行,隨時等待連線。

FastCGI protocol 在 Apache 裡面的實做方式有兩種,mod_fastcgi 與 mod_fcgid。前者發展較早,由 fastcgi.com 維護,fastcgi process 開起來之後會一直在後台跑,隨時接受連線;後者為 Apache 基金會自己的項目,目標是可以隨時動態增減 fastcgi process 的數量,一旦用完就殺掉,有效利用資源又不致於在 晚上 流量大的時候被打掛。關於這兩個的優劣並沒有絕對,各位可以上網搜尋相關資料。

繼續閱讀 “FreeBSD 建置 Apache + mod_fastcgi + php-fpm”

FreeBSD 建置 Apache + mod_fastcgi + php-fpm