IIS部署ASP.NET Core报错:HTTP Error 500.38 – Failed to locate ASP.NET Core app

在使用IIS部署ASP.NET Core程序时,遇到报错,错误信息如下 :HTTP Error 500.38 – Failed to locate ASP.NET Core app

经过一番搜索,在微软官方网站中找到了错误原因,网站如下:https://learn.microsoft.com/zh-cn/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-7.0

在这个排查页面上可以看到,这个错误是未禁用单文件发布导致的,那么,我们只要在项目文件中禁用单文件发布就行了。

解决:在IIS部署时,禁用单文件发布。编辑xxx.csproj项目文件(xxx是你的项目名字),把PublishSingleFile这一项改为false,如果没有,直接添加下面的代码即可。

<PublishSingleFile>false</PublishSingleFile>	

如果使用VS的发布,要在发布选项中去掉单文件发布选项的钩:

nginx反代iis 支持泛域名,支持WordPress多站点

nginx配置:

upstream qd-aliyun-8006 {
    server x.x.x.x:8006;
}

server {
    listen 80;
    server_name softc.cc *.softc.cc;

    location / {
        proxy_pass http://qd-aliyun-8006;
        proxy_redirect default;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-Port $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Port  $server_port;
        proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
    }
}

注意是要有 proxy_set_header Host $host; 这一行。

IIS配置MP4格式MIME类型终极指南

一、血泪故事会:为什么你的视频播不了?

昨天隔壁工位老王的旅游网站突然被客户投诉,所有风光展示视频都变成「白屏黑洞」。最后发现是IIS把.mp4文件当成二进制流推给浏览器,导致视频无法解析。今天我们就用5分钟根治这个顽疾!(╯‵□′)╯︵┻━┻


二、MIME类型急救知识包

1. 什么是MIME类型?

就像文件身份证,告诉浏览器「我是谁,该怎么打开」。当IIS遇到不认识的文件类型时,会默认使用application/octet-stream(二进制流),这就是视频无法播放的元凶!

2. MP4的正确打开方式

  • ​正确姿势:video/mp4(推荐!浏览器自动调用播放器)
  • ​备胎方案:application/mp4(部分老系统兼容)
  • ​错误示范:application/octet-stream(默认导致播放失败的罪魁祸首)

📌 行业冷知识:根据RFC 4337标准,MP4官方MIME类型是video/mp4


三、图形界面配置四步曲(附灵魂图解)

步骤1:召唤IIS管理器

Win + R 输入inetmgr,就像打开阿拉丁神灯一样~

步骤2:定位MIME设置

步骤3:添加新条目

点击右侧【添加】按钮,填写魔法参数:

文件扩展名: .mp4
MIME类型: video/mp4

步骤4:重启大法好

操作完成后一定要右键选择【重新启动】站点,就像给服务器做心肺复苏!


四、命令行高手模式(批量部署必备)

# 添加MP4类型
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/staticContent" -name "." -value @{fileExtension='.mp4';mimeType='video/mp4'}

# 立即生效咒语
iisreset /noforce

五、疑难杂症急诊室

症状1:配置后仍然无法播放

  • 检查清单:
    • 清除浏览器缓存(Ctrl + Shift + Del)
    • 检查文件权限(右键文件→属性→安全)
    • 查看HTTP响应头(F12开发者工具)

症状2:服务器报404错误

<!-- 在web.config中加入 -->
<system.webServer>
  <staticContent>
    <remove fileExtension=".mp4" />
    <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
  </staticContent>
</system.webServer>

六、安全加固小课堂

危险操作预警!

⚠️ 不要图省事添加<mimeMap fileExtension=".*" ... />,这相当于给黑客开后门!

推荐白名单策略

<staticContent>
  <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
  <mimeMap fileExtension=".webm" mimeType="video/webm" />
  <!-- 显式声明允许的视频格式 -->
</staticContent>

七、跨版本兼容指南

IIS版本特殊说明
IIS 7.x需要安装静态内容模块
IIS 8+原生支持H.264编码
IIS 10支持HTTP/2视频流

🎯 实战演练:访问你的视频地址,用https://tools.keycdn.com/curl检查MIME类型是否显示为video/mp4,看到绿色的正确标识就可以开香槟啦!🍾

如果还有任何悬案未破,欢迎在评论区召唤技术支援小队! (•̀ᴗ•́)و ̑̑

IIS上跑PHP,遭遇上传权限问题

其实这个问题不关IIS以及PHP什么事,是我的权限没设置好。

在使用PHP上传文件时,一直报错,错误信息如下:

PHP Warning: move_uploaded_file(): Unable to move ‘C:\Windows\Temp…

一开始以为是C:\Windows\Temp的权限问题,结果加上IUSR,并给予所有权限后,还是不行。

然后又给uploads文件夹给IUSR账户所有权限,结果还是不行。

最后在uploads文件上给IIS_IUSERS账户加上所有权限后,问题解决。

总结:

问题的主要原因是我没有弄清楚IIS的两个账户分别是什么意思,关于IUSR和IIS_IUSER的区别。

简单查了一下,知道 IUSR is part of IIS_IUSER group

IIS服务器遭遇用户上传图片后,显示无权访问的问题

IIS服务器遭遇用户上传图片后,显示无权访问的问题,错误信息如下:

HTTP 错误 401.3 – Unauthorized
由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面

解决办法:

1、打开站点的身份验证

2、在匿名身份验证上点右键菜单,然后点编辑 

3、把匿名用户标识改为“应用程序池标识“

最后点击确定并重启站点后OK(没有测试不重启站点的情况下是不是也可以生效)