目标

将控制台程序改成web程序,通过IIS反向代理,处理请求

环境

win10 / .net core 2.1 / centos7

变成web程序

1.在新建的asp.net core控制台程序中添加

Microsoft.AspNetCore.Server.IISIntegration   // 这个用于IIS反向代理

Microsoft.AspNetCore.Server.Kestrel  // 这个是asp.net core的服务器,由于跨平台,所以不能再使用IIS了,以前的ASP.NET,可以利用IIS提供的便利

// 这个用于添加"中间件",是处理请求用. asp.net core和asp.net完全不同了,asp.net管道有十几个事件,注册这些事件就能在请求的不同阶段作出处理.

// 但这个方案并不是最佳的,因为这些事件相当于是一种具体实现,它肯定不能很好的贴合各种形式的要求.

// asp.net core通过注册中间件的方式,相当于由自己定制处理事件,自定义个数和顺序.这个明显是一种更上层的抽象.更加的灵活

Microsoft.AspNetCore.Hosting

2.在Main方法里初始化kestrel服务器

// 程序运行后,开启一个web程序,

new WebHostBuilder()

// 使用这个服务器来运行这个web程序.kestrel是默认的asp.net core服务器.

.UseKestrel()

// 为IIS反向代理提供支持 反向代理是指服务器RP接到请求后,将请求通过HTTP请求转发给和它在一个局域网内的其它服务器,RP自己并不处理请求,只是转发

.UseIISIntegration()

// 这个是注册中间件,也就是加处理程序的地方, Startup类里必要有这个Configure方法

.UseStartup<Startup>()

// 建立并运行这个web服务
.Build()
.Run();

// 约定叫这个Startup名字,当然也可是其它的.主要是这个类里要有Configure方法,它注册了所谓中间件

class Startup
{

public void Configure(IApplicationBuilder app)
    {

// 这个类里只注册了一个中间件,就是处理静态文件的中间件

  // 要使用这个方法,需要引用 Microsoft.AspNetCore.StaticFiles 这个包
        app.UseStaticFiles();

// 这个处理方法,接收到非静态文件请求,返回这句话

app.Run(context => context.Response.WriteAsync("Hello World 这是处理程序返回的内容"));
    }

}

3.到此,运行这个程序,出现控制台窗口,显示web服务器运行了

默认监听的地址是: Http://localhost:5000 在浏览器中打开,成功的话,显示 Hello World

默认情况下,web应用程序目录是当前程序所在目录,web静态文件目录是当前程序目录下的wwwroot目录.

可以在程序目录下,新建一个wwwroot目录,放入一个静态html文件,浏览器中就可查看到.

IIS 反向代理

上面的测试都是直接访问kestrel服务器,然而在WINDOWS上接收请求的最佳选择仍然是IIS服务器.asp.net core教程上,也是要求将kestrel放在IIS之后处理请求,而由IIS接收请求,以保护服务器

需要做一些配置后,可以让IIS反向代理ASP.NET CORE程序

一.下载asp.net core的IIS支持组件 dotnet-hosting-2.1.5-win.exe 下载地址 https://www.microsoft.com/net/download  在页面中选择Download .Net Core Runtime这个,下载之后安装,IIS模块会多一个

二.新建一个站点,目录指向asp.net core程序的运行目录.将站点的应用程序池设为无托管应用程序

三.站点的模块和映射最小需要两个模块和两个映射 静态文件,asp.net core映射, asp.netcore模块和匿名验证模块

四.web.config

asp.net core并不需要这个文件,由于挂IIS托管反向.所以这个文件用于IIS,它也放在asp.net core程序运行目录下.其中最重要的配置节为

<aspNetCore processPath="dotnet"
      arguments="Web.dll"
      stdoutLogEnabled="true"
      stdoutLogFile="./">
</aspNetCore>

processPath 表示使用dotnet命令,运行这个web程序. 只要架设好IIS后,不需要手动启动asp.net core程序,通过这个命令,在iis启动网站后,asp.net core程序就会启动

arguments 表示asp.net web应用程序的那个可执行文件

后面两个可以记录日志,在调试时,日志会记录出错的地方.比如asp.net core程序没有运行起来.出错日志会记录在程序运行目录下.

五.遇到的错误

刚开始使用反向代理IIS 转到 UseKestrel 后.发现无法运行出现502.3错误,
查看日志发现可能是权限不足,导致程序无法执行某些库.

研究后发现,将用到的软件包目录添加上相应权限即可.users组,这个用户添加到目录上,读取和执行权限.

在win10系统上,aspnetcore的软件包位置默认有两处

一处在于
C:\Users\当前用户目录下\.nuget 这个文件夹下,这个是Nuget包的总目录,必须有执行权限
二处在于
C:\Program Files\dotnet 这个目录下,这个是dotnet命令的目录,另外,nuget包的依赖包,也在这个目录下,C:\Program Files\dotnet\sdk\NuGetFallbackFolder

linux下运行

上面两个路径下装了程序运行需要的所有库,如果运行时报缺少库,基本上就是这两个地方的问题
NuGetFallbackFolder这个目录比较重要,如果发现nuget包运行失败缺少依赖项,则应检查这个目录下就没有这个包的依赖项存在.一般来讲,
通过VS的nuget包管理器下载的包,是没有这个问题的.
当程序部署到其它机器如linux上时,就会发生这个问题.此时,只要将这两个目录的包,对应的复制到目标机器上就可以了

.Net Core实践4 web 反向代理的更多相关文章

  1. Asp.Net Core使用Nginx实现反向代理

    ---恢复内容开始--- 前两篇文章介绍了使用Docker作为运行环境,用Nginx做反向代理的部署方法,这篇介绍一下使用Nginx配合.Net Core运行时直接在Liunx上裸奔的方法. 一.安装 ...

  2. wsl 2 unbuntu 部署 asp.net core 使用 nginx 做反向代理,调试文件上传失败

    继上一篇 asp.net core 3.1多种身份验证方案,cookie和jwt混合认证授权 的公司内部项目上线后发现文件上传功能有问题. 上传的文件超过50M以后前端就报错了,没有状态返回,也没有响 ...

  3. .Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索

    公司项目最近出现获取访问域名.端口.IP错误现象,通过排查发现, 之前项目一直通过Nginx自定义Headers信息来获取,但最近运维人员失误操作造成自定义Header信息丢失,造成项目拿不到对应的数 ...

  4. 关于.net core使用nginx做反向代理获取客户端ip的问题

    1.正常情况下.net core获取客户端ip是比较简单的 /// <summary> /// 获取客户Ip /// </summary> /// <param name ...

  5. 在windows环境下 nginx + .net core 3.1 实现反向代理和负载均衡

    一.创建.net core web 应用 1.首先打开vs2019创建好.net core web应用,简单的注入IConfiguration 便于打印端口号展示效果. 1 private reado ...

  6. Nginx反向代理的配置

    Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之 ...

  7. nginx反向代理原理和配置讲解

    最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡.所以搜罗了一些关于反向代理服务器的内容,整理综合. 一  概述 反向代理(Reverse Proxy)方式 ...

  8. nginx的反向代理和配置

    最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡.所以搜罗了一些关于反向代理服务器的内容,整理综合. 一  概述 反向代理(Reverse Proxy)方式 ...

  9. Nginx反向代理实现Tomcat负载均衡

    这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡. 1.首先需要对一些知识点进行扫盲(对自己进行扫盲,囧): 集群(Cluster) 简单来说就是用N台服务器构成一个松 ...

随机推荐

  1. VsCode+Node的前端环境搭建及其理解并创建一个前端目录

    既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 VsCode VsCode的安装 VSCode中文设置 VsCode 扩展 VsCod ...

  2. JavaScript 是如何工作的:JavaScript 的内存模型

    摘要: 从内存角度理解 let 和 const 的意义. 原文:JavaScript 是如何工作的:JavaScript 的内存模型 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这 ...

  3. Linux常用查找命令

    第一种:grep命令 示例: 第二种:find命令 示例: 第三种:locate命令 示例: 第四种:whereis命令 示例: 第五种:which命令 示例:

  4. 【升鲜宝】生鲜配送管理系统_升鲜宝 V2.0 按客户商品分类分开打印配送与按客户商品分类导出相关订单商品相关说明(一)

    [升鲜宝]生鲜配送管理系统_升鲜宝 V2.0 按[客户]的商品分类分开打印(配送单)与按[客户]商品分类[对账单]导出相关销售订单商品功能相关说明(一) 业务场景概述与痛点 1.中小学校食堂的客户,每 ...

  5. 基于jwt的用户登录认证

    最近在app的开发过程中,做了一个基于token的用户登录认证,使用vue+node+mongoDB进行的开发,前来总结一下. token认证流程: 1:用户输入用户名和密码,进行登录操作,发送登录信 ...

  6. libevent 实现的socket 通信 server以及解决找不到动态库的方法

    注: client 个人觉得没必要用 libvent来实现就没写 注:由于 涉及到回调函数的使用 如有疑惑的可以先去了解回调函数的实现机理 先来说一下 libevent主要是干啥的 : 内部封装了 s ...

  7. gitlab+jenkins自动发布Python包到私有仓储

    背景 有个私有仓储,地址为https://your.repo.com/pypi/ 代码存储在gitlab, 地址为https://gitlab.company.com/software.git CI为 ...

  8. Windows Server 2008远程桌面默认端口更改方法

    win2008远程桌面端口默认是用的是3389端口,但是由于安全考虑,经常我们安装好系统后一般都会考虑把原来的3389端口更改为另外的端口. 本文以改为端口为25608商品为例,讲解一下具体操作过程. ...

  9. CQOI2019(十二省联考)游记

    CQOI2019(十二省联考)游记 Day -? 自从联赛爆炸,\(THUWC\)爆炸,\(WC\)爆炸(就没有不爆炸的)之后我已经无所畏惧... 听说是考\(4.5 h\)吗? Day -1 \(Z ...

  10. 一) Spring 介绍、IOC控制反转思想与DI依赖注入

    一.spring介绍1.IOC反转控制思想(Inversion of Control)与DI依赖注入(Dependency Injection)2.AOP面向切面的编程思想与动态代理3.作用:项目的粘 ...