經過兩天的實驗,終於讓nginx同時支持asp.net與php了。下面就把具體的配置過程記錄如下。
注意:本次實驗OS:centos6 64bit。
儘管網絡上有很多windows下nginx與asp.net集成的資料,但是windows環境下一直未測試成功。以下的實驗全部是在linux環境下進行的。nginx已經安裝成功,並運行如下:
在此我們講解的nginx與asp.net集成不是通過nginx的反向代理功能,也不是使用windows提供的IIS,而是通過fastcgi_pass來處理asp.net的,然後把處理後的結果交給nginx。說白了就是把nginx作爲web服務器。
Nginx與asp.net集成需要分以下幾個步驟:
1、mono安裝
2、xsp安裝
3、nginx與asp.net集成
4、測試集成效果
一、mono安裝
要想使linux支持asp.net,我們必須要安裝mono和xsp這兩個軟件包。
mono軟件包是Novell公司開發的跨平臺.NET運行環境。
目前mono最新版本的軟件包爲mono-3.10.0.tar.bz2,我們可以通過這個網址http://download.mono-project.com/sources/mono/。下載並上傳到centos服務器上。如下:
scp mono-3.10.0.tar.bz2 [email protected]:/root
除了mono-3.10.0.tar.bz2這個軟件包外,我們還需要安裝xsp這個軟件。
xsp是小型的.Net Web服務器,可以單獨作爲Web服務器,其中的fastcgi-mono-server2/4也可作爲nginx的fastcgi方式運行。
目前xsp軟件包最新版本爲xsp-2.10.2.tar.bz2,我們可以通過這個網址http://download.mono-project.com/sources/xsp/。下載並上傳到centos服務器上。如下:
scp xsp-2.10.2.tar.bz2 [email protected]:/root
我們先來解壓並安裝mono,mono軟件包比較大,有70M左右解壓速度比較慢。如下:
tar -xvf mono-3.10.0.tar.bz2
解壓完畢後,進入mono軟件包的解壓目錄,如下:
在安裝mono之前我們需要安裝相關的軟件包,如下:
yum install gcc gcc-c++ glibc glibc-devel glib
現在開始配置mono,如下:
./configure
通過上圖,我們也可以看到目前mono已經可以支持.net2.0到.net4.5。
配置完畢後,現在開始make編譯mono,如下:
mono的make編譯過程很慢,需要耐心等待。在此過程中,我們可以看到有很多的已lo結尾的文件。這些文件就是使用libtool編譯出的目標文件。
Make編譯完畢後,我們就開始正式安裝mono,如下:
make install
在安裝過程中,如果你仔細觀察的話,會看到mono默認安裝到/usr/local/lib/mono目錄下。而且根據Linux習慣默認的./configure的軟件一般是在/user/local下。因爲是庫,所以文件是在/user/local/lib下。
當然我們也可在編譯時,通過./configure –help命令查看。如下:
通過上圖我們可以看出Linux的默認安裝位置,確實和我們上邊提到的是一樣的。
以下這張圖是mono安裝完畢的截圖:
安裝完畢後,我們根據安裝時提供的信息,來查看下mono的安裝位置。如下:
通過上圖可以看到,mono確實安裝到了/usr/local/lib目錄下。
現在我們來通過mono –V命令查看mono是否安裝成功。如下:
mono –V
顯示上圖的信息,說明mono已經安裝成功。
注意:mono命令位於/usr/local/bin/mono路徑下,如下:
同時現在系統的環境變量中,已經存在/usr/local/bin,這個路徑。如下:
echo $PATH
二、xsp安裝
mono安裝完畢後,我們還需要安裝XSP這個小型的.NET web服務器。解壓並安裝xsp,如下:
tar -xvf xsp-2.10.2.tar.bz2
配置xsp,如下:
./configure
但是你會發現系統提示錯誤如下:
爲什麼會提示出錯呢?
因爲C#程序執行時必須需要動態鏈接庫,故要添加在環境變量。而且有的鏈接庫mono的編譯器需要用,其內部使用的是pkgconfig工具,故要配置PKG_CONFIG_PATH環境變量。pkgconfig工具位於/usr/local/lib/pkgconfig這個路徑下。如下:
我們現在需要做的就是配置pkgconfig工具的路徑使用export命令,如下:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
Pkgconfig工具的路徑設置完畢後,我們再次配置xsp,如下:
通過上圖可以看到,現在xsp就沒有報錯了。
xsp配置完畢後,我們現在來通過make編譯該軟件,如下:
make
xsp編譯完畢後,我們現在來正式安裝xsp,如下:
make install
xsp安裝完畢後,我們就可以查看fastcgi-mono-server2/4這個程序。如下:
通過上圖,我們可以看到fastcgi-mono-server2/4這個命令就位於/usr/local/bin下。
注意這個命令非常重要,我們在啓動xsp這個.Net web服務器時,就是通過該命令完成的。
三、nginx與asp.net集成
以上就是mono與xsp的安裝,下面開始與nginx進行集成。asp.net與nginx集成,我們是通過nginx的虛擬主機來實現的。
修改nginx的配置文件nginx.conf,在http標籤中添加如下命令:
server {
listen 80;
server_name b.ilanni.com;
charset utf-8;
location / {
root /ilanni/b.ilanni.com;
index index.aspx index.html index.htm;
fastcgi_pass 127.0.0.1:9001;
include fastcgi_params;
}
}
注意我們在前文中已經介紹過nginx與asp.net集成原理。Nginx通過fastcgi_pass來處理asp.net的請求,然後把處理後的結果交給nginx。而fastcgi_pass是代理xsp web服務器的。
同時我們還要注意此時fastcgi_pass代理的xsp端口是9001,該端口可以任意定義,只要不要和系統中正在使用的端口衝突即可。
這個文件修改完畢後,我們還需要修改fastcgi_params這個文件。
我們只需要在該文件的最後邊,添加一下兩行代碼即可。如下:
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
以上兩個文件修改文件後,我們現在來啓動xsp web服務器。使用入選命令:
fastcgi-mono-server2 /applications=/:/ilanni/b.ilanni.com /socket=tcp:127.0.0.1:9001 &
注意該命令中的/ilanni/b.ilanni.com是Nginx虛擬主機的根目錄,127.0.0.1:9001爲xsp使用127.0.0.1:9001這個地址。&表示該命令在後臺運行。
通過上圖我們可以看到xsp服務器已經正常啓動了,現在我們弄一個asp.net的探針來測試下。
現在我們來訪問Nginx的虛擬主機b.ilanni.com,如下:
通過上圖,我們可以很容易的看到。目前asp.net的程序已經可以訪問了。
四、測試集成效果
通過以上的截圖,我們很容易的看到。現在Nginx與asp.net已經完全集成。下面我們來看看php的集成。
其實現在不應該說是Nginx與php集成,因爲Nginx支持php也是通過fastcgi_pass來代理php-fpm,然後把請求的結果發給Nginx。
現在我們再來新建一個Nginx虛擬主機,如下:
訪問虛擬主機a.ilanni.com。如下:
到此爲止,我們可以看到現在Nginx已經完全支持asp.net與php。