Jexus 即 Jexus Web Server,简称JWS,是Linux平台上的一款ASP.NET WEB服务器,是 Linux、Unix、FreeBSD 等非Windows系统架设 ASP.NET WEB 服务器的核心程序,是企业级ASP.NET跨平台部署的一种可选方案。与其它WEB服务器相比,Jexus不但具有跨平台ASP.NET服务器这样的标志性特征,同时还拥有内核级的安全监控、入侵检测、URL重写、无文件路由等一系列重要功能和专有特性。

关于它的定义简单明了,就是一款Linux上的Asp.Net Web服务器,相当于我们的Windows上的IIS,Jexus5.8.2的正式发布为Asp.Net Core进入生产环境提供了平台支持。

本版的亮点是新增“AppHost”配置项,将HTTP自宿主应用程序(如Asp.net Core应用程序、Node.js应用程序等)统一纳入Jexus的工作进程序列进行管控(启动、停止、重启、崩溃后自动恢复等管理、监控功能),为Asp.Net Core应用程序进入企业化生产环境提供了强有力的平台保障。使用 jexus整合asp.net core的优点:

1)支持多站点,同一端口可以同时支持任何多的asp.net core应用程序;

2)应用程序启动、停止、重启与站点的启动、停止、重启等操作一致,无需手工管理asp.net core应用程序;
  
3)具有应用程序崩溃后自动重启功能,为企业级不间断运行保障;

4)具有比反向代理更高的性能优势;

5)提供与IIS相同的HTTP环境参数。

安装jexus独立版

注:运行安装命令,需要操作者有root权限

1
curl https://jexus.org/release/x64/install.sh|sh

Jexus 系统配置

Jexus按默认配置就能很好的工作,进一步配置是为了Jexus更适合自己的需要。
Jexus最核心的一个配置文件,固定文件名是jws.conf,这个文件与jexus的其它工作文件在同一个文件夹中。

jws.conf有如果基本配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SiteLogDir=log    #网站日志以及Jexus系统日志的存放位置,必填项。可以使用基于jws.exe文件的相对路径

SiteConfigDir=siteconf #网站配置文件存放的位置,是必填项。可以使用绝对路径,也可以使用基于jws.conf文件的相对路径

Runtime=v4.0.30319 #设定Jexus工作进程运行于哪个.NET版本

httpd.processes=1 #工作进程的数量,建议每6-8核CPU用一个进程,最多可设4个进程

httpd.user=www-data #工作进程以什么用户身份和对应权限工作,默认为root

php-fcgi.set=/usr/bin/php-cgi,6 #如果需要Jexus同时充当PHP FastCGI服务器,这一句就是fast-cgi设置,分两个部分,逗号前为php-cgi这个文件的路径,逗号后是php进程数

CertificateFile=/xxxx/xx.crt #SSL证书路径(如果需要使用https协议才填)

CertificateKeyFile=/xxxx/xx.key #SSL密钥文件路径(如果需要使用https协议才填)

注:jws.conf 中,SiteConfigDir 和 SiteLogDir 两项是必填项

网站配置

Jexus支持多站点,可以用不同的端口、域名、虚拟路径设置任意多的网站,配置时,首先要注意如下三个规则:

1)必须把所有网站配置文件放到jws.conf指定的网站配置文件夹内,这个文件夹除了网站配置文件,不能有其它任何文件,因为jexus会认为这儿的任何一个文件都代表着一个不同的网站。

2)每个网站有且只有一个配置文件,配置文件的文件名就是这个网站的名称,比如 www.mysite.cn这个网站,配置文件名可以写成“mysite”,当然也可以写成其它文件名,以便管理员容易记忆和识别,但要特别注意:文件名不能有空格!

3)一个网站可以拥有任意多的域名,不同网站不能有相同的域名,没有域名的网站只能有一个,这个没有域名的网站叫做“默认网站”,而一台服务器最多只能有一个默认网站。

配置实例

A、网站配置的基本内容:

1
2
3
4
5
6
7
port=80                          # jexus WEB服务器侦听端口(必填。当然可以是其它端口)
root=/ /var/www/mysite # 网站URL根路径(虚拟目录)和对应的物理路径,两个路径字串之间必须用空格分开(必填。既使这个网站是一个纯粹的反向代理站,也得填)

#可选项
hosts=mysite.cn,www.mysite.cn # 网站域名(建议填写),可以用泛域名,比如:*.mysite.cn(不填此项或只填一个“*”号表示这是默认网站,一个端口只能有一个默认站)
indexs=index.aspx,index.htm # 首页文件名,可以写多个,用英文逗号分开(可以不填。因为JWS系统含有常用首页名)
aspnet_exts=mspx,ttt # 添加新出现的或自定义的ASP.NET扩展名(不建议填。多个扩展名用英文逗号分开,不加点号。系统含有常用扩展名)

B、最简配置示例

1
2
port=80
root=/ /var/www/default

C、网站配置的高级选项
网站配置的高级选项全是可选项,应该根据网站的实际需要选填。
灵活使用高级选项,可以架设出一台与众不同的、功能强大的服务器平台或者服务器群组。

1、使用“URL重写”功能
URL重写是指WEB服务器将访问者的请求URL路径资源按指定的匹配规则解释和匹配为另外的一个真实RUL路径资源。

比如,希望别人访问“.php”类型的文件时,服务器返回 /404.html 这个文件:
1
2
3
4
5
rewrite=^/.+?\.(asp|php|cgi)$ /404.html
# 格式:
# “rewrite=”的后面是两部分阻成,两部分之间由一个空格分开。
空格前是匹配的条件:用正则表达式描述URL的匹配条件。
空格后是匹配的目标:指的是如果用户访问的路径合乎前面的匹配条件,服务器将以哪个规则回应。
又如:
把“/bbs”解析为“/bbs/index.aspx”,把“/bbs/file-1” 匹配为 “/bbs/show.aspx?id=1”:
1
2
rewrite=^/bbs$ /bbs/index.aspx
rewrite=^/bbs/file-([0-9]{1,6})$ /bbs/show.aspx?id=$1
格式解释:rewrite的等号后含有两部分内容,用空隔分开。前半部分是一个正则表达式,用于描述需要URL重写的(用户浏览器中的)url路径样式,后半部分是当用户的URL合乎前面的正则表达式时,JWS应该重写和访问的真实URL路径。

2、禁止某IP或IP段访问本网站
1
2
3
denyfrom=111.222.111.*
denyfrom=101.202.111.*
denyfrom=101.201.1.132
3、禁止访问某文件夹及其子文件夹中的内容
1
DenyDirs=网站文件夹路径的URL路径,如 “/abcfiles”或 “~/abcfiles”,多个路径,用英文逗号分开
4、是否对请求的URL等进行安全检测
本选项默认是true,即需要检查,除非你的确需要关掉这个选项,否则可以不填,格式如下:
1
checkquery=false

(关掉本项可以提高服务器速度,但就安全而言,不建议关掉它)

5、NOFILE(无文件)功能
1
nofile=/mvc/controller.aspx

(注:这是Jexus特有的功能,指的是如果服务器不存在用户要访问的文件,服务器将使用什么文件应答。)

(提示:路由后,原RUL路径会存贮在Jexus特有一个服务器变量“X-Real-Uri”中)

(技巧:用这个功能,或者再加上URL Rewrite功能,你完全可以把URL路径与真实路径隔离开来,达到信息隐藏和简化URL的作用。)

6、NOLOG(无日志)功能
1
nolog=yes

(注:禁用网站日志功能会提高WEB服务器系统的的处理速度,但不足也是明显的,就是你无法详细了解网站的访问情况了)

7、长连接开关
1
keep_alive=true

注:V5.1版默认值是true,即默认使用长连接,可以不填。

8、反向代理功能
1
reproxy= /abc/ http://www.xxxx.com:890/abc/

参数的值由本站RUL根路径和目标网站URL根路径两部分组成,之间用空隔分开。

*技巧:反向代量的目标地址可以有多个,用英文逗号分隔,如:
reproxy=/abc/ http://192.168.0.3/abc/,http://192.168.0.4/abc/
这时,当用户访问/abc/时,jexus就会随机选择一台服务器进行访问,达到负载均衡或服务器集群的效果。

9、接受FAST-CGI提供的服务
对于TCP连接:
fastcgi.add=需要fast-cgi处理的文件扩展名|tcp:fast-cgi服务的IP地址:端口
如:
1
fastcgi.add=php,php3|tcp:127.0.0.1:9000
对于unix sockets:
fastcgi.add=需要fcgi处理的文件扩展名|socket:路径
如:
1
fastcgi.add=php,php3|socket:/tmp/phpsvr
10、启用gzip压缩功能
1
usegzip=true    #即UseGzip

解释:启用这个功能后,当用户访问“.htm”“.js”等文件时,Jexus会将这些文件进行GZIP压缩后发送给用户浏览器,这样,可以节约更多的网络带宽。

11、启用HTTPS进行SSL安全传输
本功能是对服务器与客户之间的数据进行加密传送,提供数据的保密性。具体方法请访问www.linuxdot.net的专题讲解。

12、AppHost
格式:AppHost={CmdLine=命行行; AppRoot=工作路径; Port=端口号}  

说明:CmdLine:必选项。表示启动这个web应用程序的命令(含参数),如 CmdLine= dotnet /var/www/aspnetcore/AspNetCoreStarted.dll
AppRoot:必选项。表示这个应用程序的工作目录,如:AppRoot=/var/www/aspnetcore

Port:可选项。表示这个应用程序的侦听端口,多个端口用英文逗号分隔(注:如果没有填写这一项,就请在AppHost.port或reproxy中填写端口号,否则,请求数据无法转发给应用程序)。

Env:可选参数。表示这个应用程序工作时需要的环境变量,如 env=(PATH=/usr/local/bin:/var/www/aspnetcore:$PATH),多个设置用英文逗号分开。

ErrLog:可选项。表示将这个应用程序的异常输出重定向到指定的文件(需填写完整路径),如果不原意输出日志,可以不用OutLog项。这时, jexus会自动关掉控制台输出(实质是重定向到/dev/null中了);

OutLog:可选项。表示将这个应用程序的控制台输出重定向到指定的文件(需填写完整路径);

User: 可选项。以指定的用户身份运行该应用程序,默认为root身份。

注意:
1,AppHost像AppHost.Port一样,不支持虚拟路径;
2,AppHost功能是将指定的具有http服务能力的web应用程序纳入jexus工作进程进行管理,对Asp.Net Core或Node.js等自宿主web程序用于生产环境具有重要的意义。

Jexus操作

Jexus自带了三个脚本,分别是:jws.start、jws.restart、jws.stop。

功能1,对Jexus服务器操作:
1
2
3
4
jws.start     #启动JEXUS服务,可以写入rc.local文件中,从而达到开机自启动的目的;
jws.stop #停止Jexus的运行。
jws.restart #重启Jexus;
jws.status #Jexus运行状态;
功能2,对某个指定的网站操作:
1
2
jws.restart 网站名     #加载/启动/重启一个指定的网站
jws.stop 网站名 #停止一个指定的网站

注意,这些脚本需要具有可执行权限,同时操作者也必须拥有管理员(root)权限。

备注

Jexus目录 /usr/jexus

Jexus站点配置目录 /usr/jexus/siteconf