前言
本文是零零散散的记录,部分内容是我在平时工作中用到的,部分是从群里“偷”来的,所以难免会有一些错误。
主要还是希望能帮到部分使用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的网站,有可能会出现下面的错误
- roslyn编译器的错误
这个时候要手动通过Nuget卸载Microsoft.CodeDom相关的dll。
- 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配置要点:
- AppHost中的 root 路径一定要写对,要写你那个程序的完整程径
- AppHost中的 dotnet 命令建议写完整路径
- 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反代要知道的一些事:
-
jexus反代的权重,按目标服务列表次数决定
-
jexus反代,目标服务器的分配,默认是随机分配,但也可以按客户IP固定分配。
-
Jexus反代,会检查目标机是否可用,不可用将重新分配目标服务器。
-
在jexus前加反向代理之后,jexus接收到的请求,无论是正常的,还是攻击。在jexus看来,都是一个ip请求过来的,所以索性一口气全拦截了,就会造成“误伤”
-
单独用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的网站
待补充。。。
待定。。
有待在使用中发现新大陆。。