.NetCore项目在Liunx中使用Jexus托管详解

本文实例环境及版本 Centos7 、NetCore 3.1、Supervisor 4.2.1 版本、Jexus/6.3.2021.0210

前置条件需在 Centos 中安装好 NetCore 环境、把生成发布好的项目文件配置到指定服务器目录下

 Jexus 简介

官方地址:Jexus 技术文档

Jexus 是一款 Linux 平台上的高性能 WEB 服务器和负载均衡网关服务器,以支持 asp.net、asp.netcore、php 为特点,同时具有反向代理、入侵检测等重要功能。能够这样说,Jexus 是.NET、.NET CORE 跨平台的最优秀的宿主服务器,若是咱们认为它是 Linux 平台的 IIS,这并不为过,由于,Jexus 不但快,并且拥有 IIS 和其它 Web 服务器所不具有的高度的安全性。同时,Jexus Web Server 是彻底由中国人自主开发的的国产软件,真正作到了“安全、可靠、可控”。既可以托管.NetCore 项目也可以守护项目进程,有了 Jexus,就不需要安装和配置 Supervisor。

 

Jexus 的下载安装

1、是使用官方自动安装脚本 (独立专业版即自带.net 运行时不需要在客户服务器安装 mono 就能正常运行的 Jexus 版本)

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

安装完成默认目录地址为 /usr/jexus

2、手动下载

wget https://linuxdot.net/down/jexus-6.2.x-x64.tar.gz
tar zxvf jexus-6.2.x-x64.tar.gz  #解压缩下载文件
#将 Jexus 文件夹复制移动到 usr 目录下,到此安装完成
sudo mv jexus /usr
#将刚才下载的 jexus 文件删除
#sudo rm –rf /tmp/jexus*

#查看 jexus 的版本信息 截止 2021 年 2 月最新版为 6.3
/usr/jexus/jws -V

 

Jexus 的配置说明

1、关于 Jexus 的配置为 /usr/jexus 目录下的 jws.conf 文件该文件,指明了网站配置文件的存放位置、日志、证书等相关配置字段说明如下(一般不用管,默认就可以了)

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 两项是必填项。

2、关于要守护的网站 (应用程序) 的配置

官方文档地址:https://www.linuxdot.net/bbsfile-3084   

文件默认在 /usr/jexus/siteconf 文件夹下  默认会有一个 default 的文件,没有后缀名

 首先要注意如下三个规则:

a、必须把所有网站配置文件放到 jws.conf 指定的网站配置文件夹内,这个文件夹除了网站配置文件,不能有其它任何文件,因为 jexus 会认为这儿的任何一个文件都代表着一个不同的网站。
b、每个网站有且只有一个配置文件,配置文件的文件名就是这个网站的名称,比如 www.mysite.cn 这个网站,配置文件名可以写成“mysite”,当然也可以写成其它文件名,以便管理员容易记忆和识别,但要特别注意:文件名不能有空格!
c、一个网站可以拥有任意多的域名,不同网站不能有相同的域名,没有域名的网站只能有一个,这个没有域名的网站叫做“默认网站”,而一台服务器最多只能有一个默认网站。

可以把 default 文件改为我们的项目名称如 mzpro  如果有多个项目新建多个配置文件即可。

相关配置字段说明如下

port=80   #jexus WEB 服务器侦听端口(必填默认 80)记住一台服务器只能有一个默认端口号 80
root=/ /data/Appcode/mzpro   #网站 URL 根路径(虚拟目录)和对应的物理路径,两个路径字串之间必须用空格分开(必填。既使这个网站是一个纯粹的反向代理站,也得填)
#禁止某 IP 或 IP 段访问本网站
DenyFrom=192.168.0.233,192.168.1.*,192.168.2.0/24
#禁止访问某文件夹及其子文件夹中的内容
DenyDirs= 网站文件夹路径的 URL 路径,如 “/abcfiles”或 “~/abcfiles”,多个路径,用英文逗号分开
#是否对请求的 URL 等进行安全检测
CheckQuery= false  #本选项默认是 true,即需要检查。关掉本项可以提高服务器速度,但就安全而言,不建议关掉它
NoFile= /index.aspx  #这是 Jexus 特有的功能,指的是如果服务器不存在用户要访问的文件,服务器将使用什么文件应答,路由后,原 RUL 路径会存贮在 Jexus 特有一个服务器变量“X-Real-Uri”中。用这个功能,或者再加上 URL Rewrite 功能,你完全可以把 URL 路径与真实路径隔离开来,达到信息隐藏和简化 URL 的作用。
#长连接开关
Keep_Alive=false  #默认值是 true,即默认使用长连接,可以不填
#启用 gzip 压缩功能
UseGZIP=false  #启用这个功能后,当用户访问“.htm”“.js”等文件时,Jexus 会将这些文件进行 GZIP 压缩后发送给用户浏览器,这样,可以节约更多的网络带宽

 

使用 Jexus+Supervisor 作为反向代理

关于 Supervisor 就不说了,直接参考  NetCore 项目在 Linux 中使用 Supervisor 托管详解 - 贾可斯 - 博客园 (cnblogs.com)

打开 mzpro 文件修改配置文件如下

port=80   #jexus WEB 服务器侦听端口(必填默认 80)记住一台服务器只能有一个默认端口号 80
root=/ /data/Appcode/mzpro   #网站 URL 根路径(虚拟目录)和对应的物理路径,两个路径字串之间必须用空格分开(必填。既使这个网站是一个纯粹的反向代理站,也得填)
hosts=*    #OR your.com,*.your.com
#设置反向代理的两种方式 推荐第一种
#1、指定 80 端口对应转向的端口号
AppHost.Port=5011
#2、需要设置为非静态的路径,指明 80 端口对应转向的访问地址
#reproxy=/ http://localhost:5011/

刷新 Jexus 配置并启动

  sudo /usr/jexus/jws restart

然后直接服务器 IP 地址就可访问 (默认 80 端口) 发现已经默认转向到了 5011 端口的项目上了。

但是 Supervisor 不能关闭如果关闭了则会报错

 

单独使用 Jexus 来守护项目进程,反向代理等

配置文件如下

port=80
root=/ /data/Appcode/mzpro
hosts=*    #OR your.com,*.your.com
#Jeuxs 5.8.2 及以上版本针对 Asp.Net Core 应用程序,新增“AppHost”配置项。将 HTTP 自宿主应用程序(如 Asp.net Core 应用程序、Node.js 应用程序等)
#统一纳入 Jexus 的工作进程序列进行管控(启动、停止、重启、崩溃后自动恢复等管理、监控功能),为 Asp.Net Core 应用程序进入企业化生产环境提供了强有力的平台保障。此配置不支持原先的 NetFramework AppHost={
   env=ASPNETCORE_ENVIRONMENT=Development; #可选项 配置程序运行的环境变量 cmd
=dotnet /data/Appcode/mzpro/Mzpro.dll; #必填项 进行 dotnet 项目名.dll 运行操作 root=/data/Appcode/mzpro/; #必填项 项目的工作目录 port=5011; #可选项 表示这个应用程序的侦听端口,多个端口用英文逗号分隔
ErrLog=/var/log/mzpro.err.log; #可选项 表示这个应用程序的异常输出重定向到指定的文件
   OutLog=/var/log/mzpro.out.log;  #可选项 表示将这个应用程序的控制台输出重定向到指定的文件(需填写完整路径)
} #记得注释掉这个 #AppHost.Port=5011

此时即使关闭掉 Supervisor 也可以正常访问我们的项目了。通过 IP 地址(默认 80 端口)访问即可

 

设置 Jexus 开机启动

在 /lib/systemd/system 目录下新建 jexus.service

打开添加如下配置

[Unit]
Description=jexus
After=network.target
[Service]
Type=forking
ExecStart=/usr/jexus/jws start
ExecReload=/usr/jexus/jws restart
ExecStop=/usr/jexus/jws stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target

然后将 Jexus 加入 Liunx 服务中

systemctl enable jexus.service

启动 Jexus 服务

systemctl start jexus.service

查看 Jexus 服务状态

systemctl status jexus.service

重启服务器然后测试即可。至此关于 Jexus 的相关操作和配置就可以了。

 

Jexus 的相关操作命令

#启动 Jexus  
sudo /usr/jexus/jws start
#中止 Jexus   
sudo /usr/jexus/jws stop
#重启 Jexus   
sudo /usr/jexus/jws restart
#重启 Jexus 下的某个站点
sudo /usr/jexus/jws restart siteName(站点名称)

 

才疏学浅,相关文档等仅供自我总结,如有相关问题可留言交流谢谢。