Jexus使用的相关记录

时间:2022-09-28 19:23:37

前言

本文是零零散散的记录,部分内容是我在平时工作中用到的,部分是从群里“偷”来的,所以难免会有一些错误。

主要还是希望能帮到部分使用Jexus的朋友。

安装

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

更新

#先重命名进行备份
mv /usr/jexus /usr/jexus_bak #下载新的jexus
curl https://jexus.org/release/x64/install.sh | sh #替换siteconf,保留原来的配置
mv -f /usr/jexus_bak/siteconf/* /usr/jexus/siteconf

开机启动

#编辑
vim /etc/rc.local
#加入下面这句话
/usr/jexus/jws start
#执行下面的操作
sudo chmod +x /etc/rc.d/rc.local

运行基于.NET Framework的网站

正常来说就是MVC,Nancy,WebForm这些啦。

贴个基本的配置文件就好了。

port=80
root=/var/www/shop
host=www.myshop.com

对于MVC5的网站,有可能会出现下面的错误

  1. roslyn编译器的错误

这个时候要手动通过Nuget卸载Microsoft.CodeDom相关的dll。

  1. MVC5的版本错误

有可能用的MVC5的最新版本,这个时候需要将相应的最新版dll也放进去。

运行基于.NET Core的网站

同样贴个基本的配置文件

port=80
root=/ /var/www/shop
host=www.myshop.com
AppHost={cmd=dotnet /var/www/shop/Web.dll; root=/var/www/shop; port=0}

关于AppHost

AppHost配置要点:

  1. AppHost中的 root 路径一定要写对,要写你那个程序的完整程径
  2. AppHost中的 dotnet 命令建议写完整路径
  3. AppHost中的 port=0 很好用,但有前提(前提是你没有在core web程序或它的配置文件中设置端口号)

Apphost中的root,实际上指的是你 App(应用程序)的文件夹,如果不填,它就以外边的root为准。

AppHost中的port,指的是ASP.NET Core用的端口号,如果你没有在Core程序中指定某个端口号,强烈建议填0,或不填。

如果port可以填0或不填,那意味着 jexus会与你的ASP.NET Core程序“自动协商”一个通讯端口,这是jexus支持ASP.NET Core功能中,最有用的一个功能。

反向代理实现负载均衡

##编辑配置文件
vim /usr/jexus/siteconf/default ##修改reproxy
reproxy=/ http://10.10.120.1/,http://10.10.120.2/

权重的处理:reproxy后边的列表中出现几次,权重就是几。

权重示例:

# 10.10.120.1的权重为2 , 10.10.120.2的权重为1
# 换句话说, .1的命中率是.2的两倍
reproxy=/ http://10.10.120.1/,http://10.10.120.1/,http://10.10.120.2/

关于Jexus反代要知道的一些事:

  1. jexus反代的权重,按目标服务列表次数决定

  2. jexus反代,目标服务器的分配,默认是随机分配,但也可以按客户IP固定分配。

  3. Jexus反代,会检查目标机是否可用,不可用将重新分配目标服务器。

  4. 在jexus前加反向代理之后,jexus接收到的请求,无论是正常的,还是攻击。在jexus看来,都是一个ip请求过来的,所以索性一口气全拦截了,就会造成“误伤”

  5. 单独用jexus就行,无需前边有反代,因为,jexus本身就有反代功能。

禁止IP访问

有时候会有一些恶意的IP访问我们的程序,这个时候想要禁止他们访问,可以通过修改denyfrom来达到目的。

##编辑配置文件
vim /usr/jexus/siteconf/default ##修改denyfrom
denyfrom=101.202.111.*
denyfrom=101.201.1.132

启用HTTPS

第一步

先查看“/lib”或“/usr/lib”等系统库文件夹中是否有SSL库文件的名字,该文件名应该是“libssl.so.版本号”(find / -name libssl.so.*),如果没有列出文件名,就证明你的系统还没有安装OpenSSL,请安装后再操作。(当然正常情况下都是已经装了OpenSSL的)

find / -name libssl.so.*

第二步

cd /usr/jexus/runtime/lib
#下面命令的/usr/lib64/libssl.so.10是第一步中查找的结果
ln -s /usr/lib64/libssl.so.10 libssl.so

第三步

修改站点配置文件

#端口一定要是443
port=443
hosts=* UseHttps=true
#添相应的证书路径
ssl.certificate=/x/xxx.crt #or pem
ssl.certificatekey=/x/xxx.key
ssl.protocol=TLSv1.0

第四步

重启Jexus

/usr/jexus/./jws restart

第五步

测试

curl -k https://127.0.0.1

更新DLL相关内容

jexus的dll缓存在 /tmp/jws-asp-temp

重启网站不行,那就重启 jexus,重启jexus 后/tmp中的asp有关的东西会被删光。

把Jexus当Mono用

jwss是一块新大陆,我们可以把它当成Mono来使用

举个例子

mono xxx.exe

等价替换

/usr/jexus/jwss xxx.exe

运行Window Forms

可能要用到的一些命令。

export LD_LIBRARY_PATH=/usr/jexus/runtime/lib:$LD_LIBRARY_PATH
#export DISPLAY=0
#或
export DISPLAY=:0.0
/usr/jexus/jwss xxx.exe

跑其他自宿主的程序(如Go,Node...)

以Go为例

同样使用AppHost来跑Golang的程序。

举个例子

port = 80
#root 随便填,也无所谓,但是必须要填
root=/ /var/xxx
host=www.yourdomain.com
AppHost={
cmd=/var/www/golangweb/myapp;
path=/var/www/golangweb;
port=8080
}

注: AppHost模式下,要把反代给关掉,同一个站,不能即用反代又用apphost,否则,jexus分不清你到底用哪样。

跑非.NET Core的程序,AppHost里面的port是一定要填的。示例中,Go的程序是监听着8080端口。

这个时候,我们访问 http://www.yourdomain.com时,实际*问的就是Go的8080端口。

换句话来说,Jexus将我们的请求转发到8080端口了。

启动程序报错异常查看

有时候,我们发布一个站点之后,就会尝试着使用jws start 来启动它。但是呢,有时并不会一帆风顺,还是会有启动不了,这个时候可以在AppHost里面加上两个日志选项,会输出一些错误信息,可以依据这些信息排错。

示例

AppHost={
cmd=dotnet /var/www/testweb/myapp.dll;
path=/var/www/testweb;
port=0;
OutLog=/tmp/1.txt;
ErrLog=/tmp/2.txt
}

这个时候,我们就可以通过这两个txt文件去排错啦!

注:排完错后,记得将这两个给注释掉!不然就有可能产生大量的日志信息!!某种程度意义上,这是取决于你在程序上怎么打的日志和日志级别的控制。

新增站点和新增配置文件

有些时候,我们会在同一台机器上弄N个站点,当然是在测试环境居多。

我们新加一个站点,也会同时新加一个配置文件。

这个时候应该只需要启动这个新站点就可以了,但是有时启动之后在外面无法访问,需要重启Jexus才可以正常访问。

原因如下:

如果新增的配置文件,指定的端口不是新的,那就只需要重启一下这个站点就好。反之,就要重启Jexus了。

也举个例子:

现有配置文件

port=80
host=www.yourdomain.com

情形一:

要新增的配置文件,端口与现在有端口重合。

port=80
host=sub.yourdomain.com

这个时候,只需要sudo ./jws restart xxx

情形二:

要新增的配置文件,端口与现在有端口没有重合。

port=8080
host=sub.yourdomain.com

这个时候,需要sudo ./jws restart

运行基于PHP的网站

待补充。。。

待定。。

有待在使用中发现新大陆。。