• Jexus使用的相关记录


    前言

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

    主要还是希望能帮到部分使用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的网站

    待补充。。。

    待定。。

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

  • 相关阅读:
    traceroute命令
    Apache部署django项目
    Linux中变量#,#,@,0,0,1,2,2,*,$$,$?的含义
    Python正则表达式
    Python 字符串格式化 (%操作符)
    Python初学者的一些编程技巧
    Linux命令 ls -l 输出内容含义详解
    Django 前后台的数据传递示列
    hibernate基础(一)
    MySQL之多表
  • 原文地址:https://www.cnblogs.com/catcher1994/p/something-about-jexus.html
Copyright © 2020-2023  润新知