搭建同時支持PHP和ASP.NET的Linux服務器環境

注:本文只是我的研究以及探索的方法,可能不太嚴謹,若是犯了什麼專業性的錯誤,還但願各位看官加以指正,謝謝。(´・ω・`)php

特別感謝:闊空晴雲(每次遇到什麼問題都問你真是太麻煩你了 膜拜)
本文由 赤石俊哉 原創撰寫,您能夠用於任何的學習交流用途,不得用於任何形式的商業用途。如需轉載請註明原做者的版權信息和來源。css

環境簡述

本地調試

操做系統:Ubuntu Server x64 14.04.1 LTS 參考官方說明
CPU資源:Intel Core i7 3610QM (VirtualBox僅適用一個核心)
MEM資源:512MB DDR3 1600MHz
存儲資源:10Gb 筆記本機械硬盤html

服務器端

操做系統:Ubuntu 14.04 X86
CPU資源:Intel(R) Xeon(R) CPU E31245 @ 3.30GHz (4 cores)
MEM資源:524288 kB (512MB)
存儲資源:20GB SSDlinux

想法

發起HTTP請求以後,先通過Nginx,若是是PHP站點則轉發到Apache2,若是是ASP.NET站點則轉發到Jexus。
總體結構nginx


配置ASP.NET部分(Jexus)環境

安裝Mono

參考:在Ubuntu操做系統上安裝mono的具體方法apache

1、更新系統:

sudo apt-get update
sudo apt-get upgrade

2、構建編譯環境:

sudo apt-get install build-essential
sudo apt-get install automake autoconf
sudo apt-get install bison gettext libtool libglib2.0-dev libfreetype6-dev libfontconfig-dev

3、安裝libgdiplus、mono以及編譯環境所須要的其它庫文件

sudo apt-get install libtiff5-dev
sudo apt-get install libgif-dev libtiff4-dev libpng12-dev libexif-dev libx11-dev libxft-dev 
sudo apt-get install libjpeg-dev

注:這一步跟原文不太同樣,我是根據錯誤提示修改了一些。ubuntu

4、源文件下載與解壓:

下載:vim

wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2
wget http://download.mono-project.com/sources/mono/mono-3.0.12.tar.bz2

注:(2015/10/13)最新版爲libgdiplus-3.12.tar.gzmono-4.2.1.60.tar.bz2
個人服務器安裝的是最新版,上面的代碼貼的是參考文章的原文。瀏覽器

解壓:(改爲你下載的對應版本就好了)服務器

tar jvxf libgdiplus-2.10.tar.bz2
tar jvxf mono-3.0.12.tar.bz2

//若是下載的是新版,使用的是gzip(tar.gz),使用下面的命令解壓。

tar zxvf libgdiplus-3.12.tar.gz

5、安裝Libgdiplus和Mono:

安裝libgdiplus

cd libgdiplus-3.12
./configure --prefix=/usr
make
sudo make install
cd ..

遇到問題:gdiplus-private.h:33:31: fatal error: freetype/tttables.h: No such file or directory
參考:Ubuntu Server(Ubuntu 14.04 LTS 64位)安裝libgdiplus2.10.9出錯問題記錄
具體操做以下:

這個錯誤就是說建立/usr/X11/include/freetype連接失敗了,由於找不到freetype,可是咱們找到了freetype2,這樣咱們作個連接吧。(用上面參考資料的解決方案發現權限不夠,因而加上了sudo。)

sudo ln -s /usr/include/freetype2 /usr/include/freetype

注:原文中說起的/usr/lib64/libglib-2.0.so.0: could not read symbols: Invalid operation問題,因爲我並無遇到,因此略過,若是遇到這個問題,能夠參考上面參考連接的解決方法。


遇到問題:No package 'cairo' found
參考:Cairo Download

sudo apt-get install libcairo2-dev

安裝Mono

cd mono-4.2.1.60
./configure --prefix=/usr
make
sudo make install
cd ..

安裝Jexus

wget http://www.linuxdot.net/down/jexus-5.5.3.tar.gz
tar -zxvf jexus-5.5.3.tar.gz
cd jexus-5.5.3
sudo ./install

一下就成功了,此次並無遇到什麼問題,Jexus此時就裝好了。接下來須要爲Jexus配置開機啓動,和默認站點。此部分先留到最後。


配置PHP部分(Apache2)部分環境

Apache+PHP的部分就不知道配置過多少回了,這個就沒有那麼複雜了。

安裝Apache2

sudo apt-get install apache2

打開瀏覽器輸入"服務器地址"測試訪問Apache2的默認頁面,能夠看到一個Apache2 Ubuntu Default Page則說明Apache2的安裝成功了,接着安裝PHP就好了~

安裝PHP

sudo apt-get install php5

其餘配置

sudo apt-get install libapache2-mod-php5
//註釋:上面的安裝是爲Apache2安裝PHP5的支持。

sudo /etc/init.d/apache2 restart

出現錯誤:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

參考:ubuntu 14.04 apache2 服務重啓出現 AH00558...
在/etc/apache2/apache2.conf配置文件中加入:

ServerName localhost

修改後重啓Apache2

測試Apache+PHP是否運轉正常

sudo vim /var/www/html/test.php

輸入

<?php echo "Hello RMEGo!"; ?>

訪問:http://服務器ip/test.php
若顯示的是Hello RMEGo,就說明配置成功了。


配置Nginx

在配置Nginx以前,咱們先要爲Apache2和Jexus作一些更改,默認他們使用的都是80端口,然而咱們須要把80給Nginx,若是是一個PHP站點則轉發到Apache2上,若是是ASP.NET站點,則轉發到Jexus上,我相信沒有人閒到同一個站點同時用PHP和ASP.NET吧╮(╯_╰)╭,若是有的話,能夠轉發到Jexus上,而且啓用Jexus的Fast-CGI來使用PHP,這裏就不詳細討論了。

修改Apache2的默認使用端口

sudo vim /etc/apache2/ports.conf

Listen 80改成Listen 8081或者其餘你以爲合適的端口,只要不和其餘端口衝突就行。

而後,再改變默認站點的端口

sudo vim /etc/apache2/sites-available/000-default.conf

將第一行的<VirtualHost *:80>改爲<VirtualHost *:8081>

固然,這裏8081不是必定的,可是要和上面咱們修改的一致。P.S.這句話等因而廢話,反正配置完了默認站點要刪除的,配置新站點的時候注意端口同樣吧。

重啓Apache2,測試是否能從8081端口訪問,而不能從80端口訪問。

http://ServerName:80/ //ServerName換成域名或者服務器IP,測試結果應該爲"載入頁面時到服務器的鏈接被重置。"(火狐)
http://ServerName:8081/ //此時測試結果應該爲Apache2默認頁 It works.

修改Jexus使用的默認端口以及添加Jexus的開機自動啓動

Jexus好像沒有全局使用端口的說法,直接進入到站點配置裏面把默認站點的端口改爲8082吧,也能夠是你以爲不衝突的端口,注意之後添加站點的時候使用一樣的端口就好了。

sudo vim /usr/jexus/siteconf/default

打開以後,有一個很顯眼的port=80在上面,修改爲port=8082,保存退出便可。

添加Jexus的開機自動啓動

剛剛不立刻添加開機啓動的緣由,就是由於你們都在用80端口,因此會出現端口占用,沒法啓動的狀況,如今將Jexus和Apache2的端口都分開了,再來添加Jexus的開機啓動吧。

sudo vim /etc/init.d/rc.local

在文件的最後加上

/usr/jexus/jws start

而後執行sudo reboot重啓服務器,再看看服務是否正常吧。

重啓以後,運行:

sudo /usr/jexus/jws status

若是顯示的是Jexus is Runing,那麼就成功了。
而後去瀏覽器測試一下:

http://ServerName:80/ //ServerName換成域名或者服務器IP,測試結果應該爲"載入頁面時到服務器的鏈接被重置。"(火狐)
http://ServerName:8081/ //此時測試結果應該爲Apache2默認頁 It works.
http://ServerName:8082/ //此時測試結果應該爲Jexus的默認頁,或者是Jexus報出的404錯誤。

大功告成,接下來就差Nginx了呢~!

安裝並配置Nginx

sudo apt-get install nginx

關於配置

通過查閱多處文章和闊空晴雲的指導,Nginx反向代理的配置大概以下:
css jpg js png gif 等靜態內容,直接由Nginx處理。
php 等php內容,反向代理到8081端口,也就是Apache2,給Apache2處理。
aspx cshtml 等ASP.NET內容,反向代理到8082端口,也就是Jexus。

P.S. 對於使用PHP的,靜態內容交給Nginx,非靜態內容的任何內容都反代給Apache2,這樣等於咱們仍然還能夠照原來使用Apache2的習慣去作僞靜態等等的配置。一樣的,對於使用ASP.NET的站點則除靜態內容以外,都交給Jexus來處理
我的認爲,避免Apche2和Jexus混用纔是上上策。至少我感受我會亂掉。 QAQ


最後說說

這樣前Nginx,後Apache+Jexus的環境就算配好了,若是須要使用到其餘的環境,能夠獨立配置好服務器,設置爲其餘端口,而後再在nginx中加入反代的處理。
Nginx配置筆記(待補充)

相關文章
相關標籤/搜索