iis 部署
iis 部署
安装准备
部署 .net api 需要安装环境,IIS 默认是不支持的,支持环境需要安装
1、安装.NETSdk
https://dotnet.microsoft.com/zh-cn/download/dotnet
注意
这两个插件的版本一定要一一对应,我这里是 net7.0 所以 ASP.NET Core 运行时是 7.0.XX,NET SDK 是 7.0.XX
下载后安装顺序为 先 dotnet-hosting 运行时在安装 SDK, 安装完这两个插件后重启 IIS,重启 IIS 命令: iisreset
如出现以下模块表示安装成功,如果没有多重启几次 iis
2、安装 ARR
不安装请求接口会 404
下载地址https://www.iis.net/downloads/microsoft/application-request-routing
修改配置,配置允许代理
注意
首先开启允许代理,打开 iis
找到 Application Request ...
找到右边 操作
栏 有一个Server Proxy Settings
的链接 勾选 Enable proxy
之后应用保存
3、安装 urlrewrite2
重写路由模块
下载地址https://www.iis.net/downloads/microsoft/url-rewrite
部署后端 api
发布并添加程序到 iis 目录(略)
注意
添加网站了以后,需要设置一下“应用程序池”, .NET CLR 版本设置为无托管代码, 管道设置成集成
部署 vue
- 打包发布
vite build
或使用 `npm run build:prod`打包发布并拷贝文件添加程序到 iis 目录(略)
发布成功后将 dist 文件夹的内容拷贝到服务器,注意路径不要有中文、空格特殊字符
- 错误示例比如修改配置
.env.production
# 生产环境配置
ENV = 'production'
# 生产环境(不要修改后端的路径)
VITE_APP_BASE_API = 'http://www.xxx.com/prod-api'
# 路由前缀
VITE_APP_ROUTER_PREFIX = '/'
# 默认上传地址
VITE_APP_UPLOAD_URL = '/Common/UploadFile'
#socket API
VITE_APP_SOCKET_API = '/msghub'
注意
前端打包不需要修改任何的配置
部署 vue 首选需要配置环境,IIS 默认支持 VUE 访问的不需要另外安装其他运行环境,主要是需要安装重写、代理环境,所以需要安装上面两个插件
添加 web.config 配置
在打包后的前端项目中添加web.config
配置文件,添加以下代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="msghub" patternSyntax="Wildcard">
<match url="*msghub*" />
<action type="Rewrite" url="http://localhost:8888/msghub{R:2}" />
</rule>
<rule name="index">
<match url="^((?!(api|msghub)).)*$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="/index.html" />
</rule>
<rule name="api" patternSyntax="Wildcard">
<match url="*api/*" />
<action type="Rewrite" url="http://localhost:8888/{R:2}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
- 配置的第 1 个 rule 将 msghub(signalR)的请求捕获,相当于路由去跳转
- 配置的第 2 个 rule 将所有不包含 api 的请求捕获,相当于路由去跳转
- 配置的第 3 个 rule 将所有包含 api 的请求重定向到后台指定的地址
修改后端地址
上面的 http://localhost:8888
替换成你后端部署的 api 地址
部署常见问题
打开 api 500 错误
按照页面的提示打开 web.config
修改stdoutLogEnabled="true"
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\ZR.Admin.WebApi.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: E5497BB4-B0C1-4794-9FAE-163F626EC399-->
之后刷新页面,打开logs
目录,查看具体错误,自己根据错误解决问题
访问接口 405 错误
在后端 api web.config 里面添加以下代码
<system.webServer>
<handlers>
<remove name="WebDAV" />
</handlers>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>
IIS 不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况
不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 overrideMode="Deny" 或旧有的 allowOverride="false" 的位置标记明确设置的。
解决方法: 管理员 cmd 执行下面命令
C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers
C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/modules
提示
更完整的教程:传送门