搭建同时支持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配置笔记(待补充)

相关文章
相关标签/搜索