• Centos7安装jexus,部署asp.net core,asp.net mvc


     转载于https://www.cnblogs.com/nsky/p/10386460.html

    什么是Jexus

    官网解释:https://www.jexus.org/

    复制代码
        Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,Jexus Web Service,简称JWS,以支持ASP.NET、ASP.NET CORE、PHP为特色,
    同时具备反向代理、入侵检测等重要功能。可以这样说,Jexus是.NET、.NET CORE跨平台的最优秀的宿主服务器,
    如果我们认为它是Linux平台的IIS,这并不为过,因为,Jexus不但非常快,而且拥有IIS和其它Web服务器所不具备的高度的安全性,
    这是政府机构和重要企业对web服务器最必要也是最重要的品质需求。

    1)支持多站点,同一端口可以同时支持任何多的asp.net core应用程序;
    2)应用程序启动、停止、重启与站点的启动、停止、重启等操作一致,无需手工管理asp.net core应用程序;
    3)具有应用程序崩溃后自动重启功能,为企业级不间断运行保障;
    4)具有比反向代理更高的性能优势。
    5)提供与IIS相同的HTTP环境参数。
    复制代码

      Jexus独立版(专业版)的安装自带mono。也就是说只要安装jexus即可,不用单独安装mono,其实他是把mono一起打包在jexus中了

    但该版本只支持64位Linux操作系统,我安装的centos7系统刚好满足要求

    输入命令: uname -r 

     

     这里的.x86_64跟x86是有区别的,.x86_64其实是32位像64位的一个过渡

    具体:https://www.cnblogs.com/Totems/p/3198287.html

    安装jexus独立版的命令是:注:运行安装命令,需要操作者有root权限。

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

    输入命令回车:可以看到他会去下载文件:https://linuxdot.net/down/jexus-5.8.3-x64.tar.gz

    下载完成并保存后,就会执行一系列的解压操作,可以看到压缩包里面包含mono,所以不用单独安装了

    最后提示操作ok

    切换到jexus,从上面标记的图片中可以看到jexus路径在: /usr/jexus 

    然后启动: sudo ./jws start 

     

    如果访问不成功,判断80端口是否开启

    查看80端口是否开启
    1
    firewall-cmd --query-port=80/tcp

     开启80端口

    1
    firewall-cmd --add-port=80/tcp --permanent

     关闭80端口

    1
    firewall-cmd --remove-port=80/tcp --permanent   # --permanent 永久生效,没有此参数重启后失效

    firewall-cmd --list-ports #查看已开放的端口
    firewall-cmd reboot # 重启防火墙,端口立即生效,不需要重启电脑

    修改时间:

    timedatectl set-timezone Asia/Shanghai 

    然后重启才能生效

    重启电脑相关命令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    shutdown -h 10          #计算机将于10分钟后关闭,且会显示在登录用户的当前屏幕中
      
     shutdown -h now       #计算机会立刻关机
      
    shutdown -h 22:22     #计算机会在这个时刻关机
      
    shutdown -r now        #计算机会立刻重启
      
    shutdown -r +10         #计算机会将于10分钟后重启
     
    reboot                     #重启
      
    halt                         #关机

     然后输入CentOS7的ip地址访问,如果出现这个404的异常页面,说明jexus启动成功了

    之所以会异常,由于jexus的默认的网站配置文件指向的物理路径是 /var/www/default 

    这里注意下,网站必须放在 /var/www/ 下,不能是其他目录

    直接cd 进入,发现没有这个路径,只有var文件夹,

    安装jexus后,配置文件在 /usr/jexus/siteconf/default 

     cat default 可以查看default的内容

    我们在/var下创建www文件夹,在www下创建default文件夹。创建完成后,进入 default文件夹,用vim编写一个简单的 index.html

    可以递归创建文件夹: mkdir -p www/default 

     这样就创建了www和default文件夹,

    进入到default创建index.html 文件: touch index.html 

     编辑: vim index.html 单击 i切换到输入状态,编辑完成后(我这里输入了:Hello Jexus),单击Esc键,输入:wq回车退出

    vim相关命令:

    复制代码
    按ESC键 跳到命令模式,然后:
    
    :w 保存文件但不退出vi
    :w file 将修改另外保存到file中,不退出vi
    :w! 强制保存,不推出vi
    :wq 保存文件并退出vi
    :wq! 强制保存文件,并退出vi
    :q 不保存文件,退出vi 在没有进入insert状态的时候
    :q! 不保存文件,强制退出vi
    :e! 放弃所有修改,从上次保存文件开始再编辑
    复制代码

     刚上面启动了jexus是没有关掉的,你可以先stop然后在start,当然你也可以直接restart,

     sudo /usr/jexus/jws restart 

     

    再次访问就成功了

    jexus启动,停止命令,如果不是在jexus目录的时候,可以这样

    启动:sudo /usr/jexus/jws start
    停止:sudo /usr/jexus/jws stop
    重启:sudo /usr/jexus/jws restart
    重启指定网站:sudo /usr/jexus/jws restart siteName
    停止指定网站:sudo /usr/jexus/jws stop siteName

    如果进入了jexus目录可以直接这样:

    复制代码
    启动:sudo ./jws start
    
    重启:sudo ./jws restart
    
    停止:sudo ./jws stop
    
    启动某个网站: sudo start 网站名
    
    重启某个网站:sudo restart 网站名
    
    停止某个网站:sudo stop 网站名
    复制代码

    创建网站

    jexus的网站配置文件在路径: /usr/jexus/siteconf 下,siteconf中的每一个文件都是一个网站配置文件

    安装jexus后,在/usr/jexus/siteocnf中,就已经有一个默认的网站配置文件,文件名叫“default”。

    你可以修改这个配置文件,也可以将这个配置文件复制并修改为一个新站。
    配置文件中,有关键的三项是必填项:
    port:端口号定义
    root:虚拟根路径和物理根路径的定义
    hosts:域名定义

    端口号(port)是一个整数,一般是80,也可以是65535以下的其它整数,但这个端口号必须没有其它服务程序占用。
    根路径(root)由两部分组成,中间用空格分开。空格前表示这个网站访问时的虚拟根路径(一般都是“/”),空格后是存放这个网站内容的文件夹的物理路径(比如“/var/www/default”)。

    这个 “/” 也可以写成 root=/cnblogs /var/www/default  但访问的时候必须是 192.168.1.1/cnblogs 或者www.abc.com/cnblogs

    域名(hosts),填写访问这个网站的域名,如果有多个域名,域名间就英文逗号分开,同时还可以用“泛域名”,比如“*.mysite.com”。
    网站名:jexus把网站配置文件的名称,作为网站名。
    ** 强调,网站配置文件名,不能有空格,第一个字符不能是“~”。

    我们可以多创建几个网站,把siteconf下的default复制一份

    切换到siteconf,执行命令: cp -b default myCore 

    修改root和hosts可以看到hosts绑定了3个域名,分别用 ","分割

    创建root对应的文件下的网站 /var/www/myCore

    至于内容,可以先用一个静态页面index.html

    default网站默认不变:

    重启Jexus(注意,所有的配置,在配置之后都需要重启Jexus)

    然后在电脑绑定host

    输入192.168.1.101访问的是默认的default站点

    输入www.abc.com,www.cde.com,www.nsky.com访问的是myCore站点

     

    说明jexus配置正确

    jexus部署asp.net MVC

    创建项目,新增jexus网站配置文件,以及上传这里就不说了

    所有准备工作好了。只要简单的修改root和hosts

    输入域名后出现了熟悉而传统的界面:

    jexus部署asp.net core

    centos7 安装net core 可以看:https://www.cnblogs.com/nsky/p/10381200.html

    新建一个默认的mvc core项目,本地运行效果

    发布:或者通过命令:dotnet publish -o f:publish

    不用跨平台命令发布centos7

    dotnet pulish  --r centos.7-x64 --c release

    dotnet pulish  --runtime centos.7-x64 --configuration release

    其实在下面图片中的目标运行时也可以选择则,自己可以去尝试

    这里:

    部署模式选择:框架依赖,(不用选择独立发布:dotnet publish -c Release --self-contained)

    目标运行时选择:可移植

    发布后的文件:


    上传到CentOS上后可以dotnet自宿主试下,可以排错,证明core程序是正常的

    没问题后,这个程序可以关掉了

    同样的添加配置文件,上传代码,修改配置文件:

    针对于Net core程序,需要修改AppHost配置 参考:https://www.cnblogs.com/shanyou/p/6107248.html

    复制代码
    AppHost的配置格式是:
    AppHost={CmdLine=应用程序命令行; AppRoot=应用程序工作目录; Port=应用程序HTTP侦听端口},其中:
    “CmdLine”表示启动应用程序的命令行,如:dotnet /var/www/site1/app.dll;
    “AppRoot”表示应用程序工作目录,如:/var/www/site1;
    “Port”表示这个HTTP应用程序所使用的侦听端口,如:5000(Asp.Core默认端口是5000)。
    没有通过UseUrls指定端口,那么默认就是5000,所以这里可以写0即可,这是jexus和net core约定好了的

    格式: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程序用于生产环境具有重要的意义。

    # Asp.Net Core应用程序所使用的端口号,如果在程序中使用了UsrUrls自定义端口则使用UsrUrls中填写的端口(不建议使用UsrUrls自定义端口),
    在没有使用UsrUrls自定义端口的情况下端口号设置为 0,
    Jexus会在运行时与Asp.Net Core进行"协商"具体使用的端口号,避免多个应用分配端口的麻烦和冲突的风险。

    例如,比如我Asp.Net Core应用程序存放的路径在“/var/www/CoreDemo”,其启动程序存放在该文件夹中,名称是“core.dll”,程序启动后的侦听端口是5000,
    那么,AppHost配置应为:
    AppHost={CmdLine=dotnet /var/www/CoreDemo/core.dll;AppRoot=/var/www/CoreDemo;Port=0}

    jexus反代,会把访问者的IP地址记录在HTTP头的 X-Forwarded-For 和 X-Real-IP 两个头域中
    (后者只记录最近的一个IP,前者不但记录最后的IP,也会继承上一个代理服务器传过来的IP)
    ,所以,你从Request中,就能得到访问者 的IP地址。
    复制代码

    配置好后重启jexus,还有就是发布了项目后,也需要重启jexus,如果AppHost.Port填写的是5000,那么对输入ip会跳转到

    https://ip:5001,这个大家应该在本地是试过的,因为net core默认是支持https的,但jexus默认没有配置https所以会异常,

    我这里AppHost.Port写成0,也不能用https访问,因为没有证书

    http访问,提示不安全。但是能访问到的

    通过F12查看当前程序的Server,确确实实是Jexus

    换成https显然是不行的,具体怎么配置https:https://www.cnblogs.com/jjg0519/p/8572202.html

    官方文档关于jexus配置https说明:https://www.linuxdot.net/bbsfile-2970

    https://www.linuxdot.net/bbsfile-3125

     View Code

    最终core的配置文件是:

     这里CmdLine 可以简写: AppHost={CmdLine=dotnet core.dll;AppRoot=/var/www/CoreDemo;Port=0} 

    因为root已经指定了全路径

    设置jexus开机自动启动

    如果服务器重启,必须手动启动jexus,所以应该创建一个服务,通过服务启动jexus

    1.新建 jexus.service

    cd /lib/systemd/system
    vim 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
    复制代码

    执行命令,加入服务: systemctl enable jexus.service 

     启动服务: systemctl start jexus.service 

    查看服务状态: systemctl status jexus.service 

     重启测试:输入命令: rebootCentOS会重启,然后再次看服务状态,是否启动,输入ip能否访问成功,都成功的话,说明开机启动成功

     jexus配置方法两种

    1:端口转发,从5.8.2开始支持,上面配置的AppHost就是端口转发

    2:反向代理:reproxy模块,使用代理就能实现负载均衡

    端口转发的原理:收集于网络

    关于端口转发模式下获取访问者IP地址的问题,目前5.8.1还不支持,从5.8.2开始,可以从请求的Http头中的“X-Real-IP”获取对方IP地址。

    参考:https://www.cnblogs.com/stulzq/p/7344129.html

     View Code

      一,关于负载均衡:
        用jexus的reproxy(反向代理)功能,就能实现负载均衡。例如,你有三台服务器,其中一台IP地址是 1.1.1.1是负载均衡服务器,用于对外服务,对内分发工作负载,另外两台是工作服务器,IP地址分别为 2.2.2.1、2.2.2.2,工作端口是8088。那么,你在 1.1.1.1这台服务器上安装上jexus,并在网站配置文件上作如下配置就行:
        reproxy=/  2.2.2.1:8088, 2.2.2.2:8088

          利用Jexus的“多目标反向代理”功能,我们很容易实现多服务器的负载均衡,构成一个WEB服务器集群,大大提高网站的负载能力。 Jexus反向代理有一个特点:如果前端服务器本地网站中有内容,它就会直接使用前端服务器的本地内容,而不会将请求发送给后端服务器。
          据我们所知,对于网站,一个ASPX网页上常常会含有图片、JS、CSS等大量的静态文件,其比例甚至可以达到一比三十或更多,因此,如果你希望为静态文件提供更快的反应速度,你只需要把静态文件放到前端服务器对应网站的对应文件夹下就行。

    Jexus的反代很灵活,既可以以文件夹为单位对某个单一目标进行反代,也可以整站反代,关键是看你怎么设置。   
    比如:如果目标网站是: http://a.b.com/    
    那么,你就可以设:    reproxy=/ http://a.b.com/    
    这就是整站。甚至还可以把一个整站作为你的一个虚拟路径:    
    如:    reproxy=/blog/ http://blog.xy.com/

        二,关于Session同步:
        同步的方法很多,对于asp.net而言,你可以将两台工作服务器的session配置成同一台state server上,比如上例中,你可以把1.1.1.1作公用的state server;另外还有一个更省力的方法,是利用jexus反向代理的Index关键字,把相同IP地址的请求转发到同一台服务器上,这时配置如下:
        reproxy=/ 2.2.2.1:8088, 2.2.2.2:8088 |Index=ip

    默认情况下,Jexus web server是以单进程模式运行的,当修改jws.config配置文件,把httpd.processes的值设置为大于1的数字时,JWS就会按指定的数量以多进程的方式并行工作。
        Jexus多进程并行工作,可以更充分地利用多CPU的性能优势,提高大并发负载能力和处理速度,同时,多进程并行,也是高可用性服务的必然需求。

    详情: https://www.linuxdot.net/bbsfile-3301
        多进程时,需要特别注意如下两个方面:
        1、 不要将Session保存在进程内,即web.config中的sessionState不能配置为Inproc,应该使用同一台 Session state服务器对session信息进行保存。如:可以配置为 “<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="20" /& gt;”。
        2、需要配置machineKey。Jexus多进程并行时,相于当多主机群集工作,因此,必须在Web.Config文件中 配置machineKey。如果没有这个设置,网站就会出现诸如数据“无法验证的错误”之类的问题。下面是一个machineKey的参考配置:
    <machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/> 
        注:Jexus自带State服务,如果没有其它需求,一般不需要再配置配置其它的状态服务器。

    注意:
         多台服务器同时为同一个网站提供服务,存在着一个session同步的部题。在Jexus上同步session很方便:你只需要把每个网站的State服务器IP地址指向同一台服务器IP地址就行。具体方法是,修改网站的web.config,在system.web节中加入:
    <sessionState mode="StateServer" stateConnectionString="tcpip=x.x.x.x:42424" timeout="60" />

    Jexus对State服务器的控制能力比较强,一旦State服务器的服务程序崩溃退出,Jws就会在10秒之内自动重启它,所以,就机制而言,其稳定性是很高的,一般不会出现问题

    CentOS上的网站是这个

     然后我在本地部署一个网站作为工作服务器

    现在我在工作服务器访问CentOS让jexus又代理回,调用我的工作服务器的站点

    注意:端口转发和代理只能用一个,所以这里先注释掉端口转发,配置代理

    为了测试负载,所以我配置了2个域名,我特意找的这个是没有https的。

    要不然代理过去跳转到了htts,没有证书访问不了

    本来想在本地多部署几个,但centos要开通端口才能访问

    reproxy=/ 192.168.1.102,www.xinhuanet.com

    配置好后,重启jexus,然后多刷新几次,就会在我配置的这两个域名之间切换,达到负载的目的了

    可以看到ip地址没有变的,但显示的内容变了,一个是我本地的Demo,一个是新华网,当然我这里只是测试,正式环境肯定都是同一个网站

    关于验证码

    windows是可以获取自定义字体的,比如IIS服务器没有字体,可以把字体放到项目中,然后代码加载即可

    但在Linxu是不行的,必须安装。

      在/usr/share/fonts创建一个文件夹,比如:myfonts  在windos中把需要的在字体拷贝到该文件夹下(不一定是这个目录。只是便于管理,统一放在fonts文件夹下)

    cd进入该目录。执行命令:

    fc-cache -fv

    如果提示:-bash: fc-cache: command not found

    则yum安装即可:yum install fontconfig

    安装完成,刷新网站即成功

    参考:https://javawind.net/p130?date=2013-7-1

      https://www.cnblogs.com/24la/p/linuxcsharp-validcode-show.html

    jexus多网站配置

    其实跟着上面下来,已经配置了多个网站,除了core网站是IP其他3个都指定了hosts,可以看到有4个网站配置文件

    我本地也通过host绑定了域名,测试也都成功了。这里就不截图演示了

    Jexus 更新步骤

    1,停止jws,并把 /usr/jexus 这个旧的文件夹更名备份
    2,以 root 身份用下边这个命令新装jexus(如不是root登录,可以用 sudo -s 命令切换成root身份):
        独立版安装命令:curl https://jexus.org/release/x64/install.sh|sh
        通用版安装命令:curl https://jexus.org/release/install | sh
    3,从备份的jexus文件夹的siteconf文件夹中把过去的配置文件复制到/usr/jexus的对应文件夹中;
    4,把其它自己添加的东西,比如证书之类的从备份文件夹复制到对应位置;
    5,试运行,正常后,把备份文件夹删除。


    其实就三步:
    更名备份
    重新安装
    恢复配置

     其实jexus远远不止我列出的这点,还有很多东西需要研究,暂时就不写了

    最后把CoreDemo的配置文件放出来,供大家参考

     View Code

    官网论坛配置说明:https://www.linuxdot.net/bbsfile-3084

    收集一些jexus配置

     View Code

    学习过程中也参照了很多大神们写的文章

    张善友:

      http://www.cnblogs.com/shanyou/p/jexus582.html

      https://www.cnblogs.com/shanyou/p/6107248.html

      https://www.cnblogs.com/shanyou/p/5518152.html

    https://www.cnblogs.com/shanyou/p/5518152.html

     http://www.cnblogs.com/staneee/p/6852559.html

    https://www.cnblogs.com/stulzq/p/7324616.html

    https://www.cnblogs.com/jackytang/p/9111902.html

    高级配置:

    https://www.cnblogs.com/msdynax/p/3735344.html

    https://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html

    https://www.cnblogs.com/shanyou/p/6107248.html

    配置https服务:https://www.cnblogs.com/CKExp/p/8469831.html#3911195

  • 相关阅读:
    检测单链表是否含有环
    巧用正则和document.location.search获取URL参数的值
    网站前端性能优化
    Ubuntu 10.10 wubi安装错误处理
    SQL中随机数函数rand()简介
    C#实现智能提示(提示补全)功能
    重装系统使之svn再次复活
    MongoDB安装
    mongodb查询
    解决iframe中跨域session丢失的问题
  • 原文地址:https://www.cnblogs.com/xiaohezhong/p/14769426.html
Copyright © 2020-2023  润新知