搭建同时支持PHP和ASP.NET的Linux服务器环境

PpikachuP 2019-06-21

注:本文只是个人研究以及探索的方法,可能不太严谨,如果犯了什么专业性的错误,还希望各位看官加以指正,谢谢。(´・ω・`)

特别感谢:阔空晴云(每次遇到什么问题都问你真是太麻烦你了 膜拜)
本文由 赤石俊哉 原创撰写,您可以用于任何的学习交流用途,不得用于任何形式的商业用途。如需转载请注明原作者的版权信息和来源。

环境简述

本地调试

操作系统:Ubuntu Server x64 14.04.1 LTS 参考官方说明
CPU资源:Intel Core i7 3610QM (VirtualBox仅适用一个核心)
MEM资源:512MB DDR3 1600MHz
存储资源:10Gb 笔记本机械硬盘

服务器端

操作系统:Ubuntu 14.04 X86
CPU资源:Intel(R) Xeon(R) CPU E31245 @ 3.30GHz (4 cores)
MEM资源:524288 kB (512MB)
存储资源:20GB SSD

想法

发起HTTP请求之后,先经过Nginx,如果是PHP站点则转发到Apache2,如果是ASP.NET站点则转发到Jexus。
搭建同时支持PHP和ASP.NET的Linux服务器环境


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

安装Mono

参考:在Ubuntu操作系统上安装mono的具体方法

一、更新系统:

sudo apt-get update
sudo apt-get upgrade

二、构建编译环境:

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

三、安装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

注:这一步跟原文不太一样,我是根据错误提示修改了一些。

四、源文件下载与解压:

下载:

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

五、安装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配置笔记(待补充)

相关推荐