IIS和PHP相关权限问题及解决方案_500错误_500.19 - Internal Server Error与401未授权错误_401.3 - Unauthorized
在IIS添加网站(假设站点为xxx.yyy.com,本例假设IIS版本为7.5或以上),如果采用IIS默认配置,会在创建站点同时创建相应同名的“应用程序池”(也是xxx.yyy.com)。在这种默认的情况下,其最终用户凭据为“身份验证”当中的“特定用户”(IUSR),访问目录资源时就会验证IUSR的权限。



在添加完站点中,不作其它操作的情况下,直接远程访问(即不在与IIS服务器同个机子上访问)http://xxx.yyy.com/,会出现:
401 - 未授权: 由于凭据无效,访问被拒绝。

原因: IIS处理WEB请求指定目录的时候,会根据 “基本设置”-“连接为” 当中的指定的账户作为路径凭据,如果指定的账户没有该路径的权限,则访问失败(至于出现什么的的失败信息,后讲。上边401是失败信息的形式之一)。
但上边的错误形式并不是详细的错误形式,因为是远程访问的出错信息,如果本机访问(即在IIS服务器同个机子上访问),会是如下更加具体的错误信息:
HTTP 错误 401.3 - Unauthorized
由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面。
错误代码:0x80070005

远程访问与本机访问出现不同错误信息,但都是同一个错误。这个是源于IIS默认配置中httpErrors项的errorMode设置为DetailedLocalOnly。它表示如果站点出错时,如果是本机访问,则输出详细错误,如果是远程访问,则隐藏详细错误。也可以直接配置为“Detailed”,此时不管本机还是远程,访问出错都显示详细错误(但如果是真实的服务器,为安全性起见,如果需要,建议配置为DetailedLocalOnly)
为解决IUSR的权限,直接添加目录,给予IUSR账户的读取权限:

之后再次访问,网站可以正常访问了(但这不是最终正确的结果,因为此时,站点根目录里还没有web.config文件)。
在站点功能视图中进行一些操作(如“处理器映射”、“默认文档”、“错误页”),使根目录产生web.config文件。本例进行“默认文档”,删除其中的"Default.htm"然后应用,产生的web.config。此时再远程访问,则会出现以下错误:
500 - 内部服务器错误。
您查找的资源存在问题,因而无法显示。

采用本机访问,展示了“500内部服务器错误”相应的更详细的信息:
HTTP 错误 500.19 - Internal Server Error
无法访问请求的页面,因为该页的相关配置数据无效。
错误代码 0x80070005
配置错误 由于权限不足而无法读取配置文件
配置文件 ....... \wwwroot\web.config

可以点击“查看更多信息”即可定位到https://learn.microsoft.com/zh-CN/troubleshoot/developer/webapps/iis/health-diagnostic-performance/http-error-500-19-webpage#hresult-code-0x80070005
该页面显示了该错误的相关解决方案。根据该解决方案,添加wwwroot目录的IIS_IUSRS组的读取权限,即可解决web.config权限问题导致的500.19问题(但问答如何产生的,后讲)
相应,IIS网站的日志文件里也记录了错误信息:(如401.3与500.19错误会分别显示“401 3”与“500 19”)

如果需要,可以参见http客户端错误相应文件目录(C:\inetpub\custerr\zh-CN\),该目录汇集了所有常见http错误的一些信息内容显示,如:

另外,如果是PHP目录权限的问题,则访问后会出错。
远程访问时出错信息如下:

本机访问时的详细错误信息如下:
应用程序“XXX.YYY.COM”中的服务器错误
HTTP 错误 500.0 - Internal Server Error
对找不到的文件启用文件监视
错误代码 0x80070003

IIS日志的记录的相关内容为:

下边详解为什么IIS_IUSRS可以解决有web.config文件而不出错。先看一张图:
上图表明: “连接为”的两种方式,对于web.config权限是有影响的。
当“连接为”-特定用户,则站点根目录有特定用户的读取权限时,有没有web.config文件,处理html都不会出现web.config的权限问题。
当“连接为”-应用程序用户(通过身份验证),则站点根目录有特定用户的读取权限时:如果没有web.config文件,则处理html不会出现权限问题。
如果有web.config文件,站点根目录只有特定用户读取权限时,会出现web.config权限问题:500 - 内部服务器错误 或者 HTTP 错误 500.19 - Internal Server Error
上述的500.19错误,可以通过附加应用程序池“标识”(如通用的IIS_IUSRS)的读取权限到该站点根目录来解决问题。
应用程序池“标识”可通过站点的 应用程序池-高级设置-标识 进行设置,默认为ApplicationPoolIdentity。
应用程序池“标识”的设置中,有“内置账户”与“自定义账户”两种。
其中“内置账户”又分四种:LocalSerivce、NetworkService、LocalSystem、ApplicationPoolIdentity,自定义账户则是本地账户(通常创建属于IIS_IUSRS组的用户,但嫌弃权限大,也可以改为Guests组)。
但不管如何指定应用程序池的“标识”,其可以通用的权限账户为:IIS_IUSRS以及IIS AppPool\xxx.yyy.com。
任何被设置为应用程序池“标识”的账户(如LocalService或自定义的web_xxx_yyy_com用户),都“拥有”应用程序池默认标识组IIS_IUSRS类似的功能权限(能够执行PHP模块与处理web.config)
所以当设置PHP目录的读取与执行权限以及设置web.config读取权限(设置到web.config的所在目录),可以通用IIS_IUSRS与IIS AppPool\xxx.yyy.com,于是,可以给之前默认设置下出现500.19的站点,
给予根目录IIS_IUSRS读取权限(或IIS AppPool\xxx.yyy.com读取权限)。
一般PHP与IIS搭建时的权限设置,可以有通用的设置:






至此,关于PHP+IIS7.X以及的搭建后权限问题解决是没有问答的(这里以读取权限为例子,至于写入权限,根据最终用户相应指定即可)。
不过如果是单纯的PHP站点,首先应该在站点的应用程序池的“基本设置里”,应该将其“.NET Framework版本””修改为“无托管代码”,以排除asp.net权限方面的干扰,防止asp.net相关的“/”应用程序中的服务器错误。
否则一旦出现“/”应用程序中的服务器错误,就要另到:C:\Windows\Microsoft.NET\Framework64\.NET版本号\Temporary ASP.NET Files 设置另外ASP.NET相关的读取与写入权限了。
IIS和PHP相关权限问题及解决方案_500错误_500.19 - Internal Server Error与401未授权错误_401.3 - Unauthorized的更多相关文章
- 针对windowsserver 创建iis站点访问出错的解决方案(HTTP 错误 500.19 - Internal Server Error)
错误如下: 服务器错误 Internet信息服务 7.0 错误摘要HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详 ...
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 BeginReques ...
- HTTP 错误 500.19 - Internal Server Error 错误代码 0x80070005 由于权限不足而无法读取配置文件
HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 模块 IIS Web Core 通知 未知 处理程序 尚未确定 错误代码 ...
- IIS7 IIS7.5 IIS8.5 HTTP 错误 500.19 – Internal Server Error解决方案小记
今天配置IIS(win8.1 IIS8.5)的web.config出现如下错误: HTTP 错误 500.19 – Internal Server Error无法访问请求的页面,因为该页的相关配置数据 ...
- IIS HTTP 错误 500.19 - Internal Server Error HTTP 错误 401.3 - Unauthorized 解决办法
前言:IIS是一个强大的服务器管理器,当遇到 IIS HTTP 错误 500.19 - Internal Server Error HTTP 错误 401.3 - Unauthorized 的解决办 ...
- IIS7.5 HTTP 错误 500.19 - Internal Server Error 问题的解决方案
昨天在 windows 7 下用 IIS 7.5 运行一个以前用 .NET Framework 3.5 写的项目,发现总是出现 500.19 错误,如下: 百度了好久,没找到解决问题确切的答案,我也知 ...
- 服务器asp.net 3.5 HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
配置错误:不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 over ...
- .NET CORE 部署到IIS上,HTTP 错误 500.19 - Internal Server Error
经排查,是因为项目中web.config的rewrite节点不支持,注释掉此节点即可,或者尝试下载相关依赖以支持此节点
- IIS 部署.NET CORE 项目 出现 HTTP 错误 500.19 - Internal Server Error
当出现这个错误时是因为服务器上没有.NET CORE对应的SDK以及运行时文件,我的.NET CORE版本是2.2,下载的就是2.2对应的文件. 附上.NET CORE2.2版本的下载链接 下载 .N ...
- Config IIS server6.0-- HTTP 错误 500.21 - Internal Server Error 解决方案
HTTP 错误 500.21 - Internal Server Error 解决方案 不久前重新安装了Windows7,在安装了VS2010 开发平台之后,将网站发布到IIS,访问发 ...
随机推荐
- 最为常用的Laravel操作(3)-模板
Blade 模板引擎 模板继承 定义布局: <!-- 存放在 resources/views/layouts/app.blade.php --> <html> <head ...
- Python数据分析易错知识点归纳(四):Matplotlib
四.matplotlib 基本特性 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3, 3, 50) y1 = ...
- PTA 21级数据结构与算法实验7—查找表
目录 7-1 电话聊天狂人 7-2 两个有序序列的中位数 7-3 词频统计 7-4 集合相似度 7-5 悄悄关注 7-6 单身狗 7-7 词典 7-8 这是二叉搜索树吗? 7-9 二叉搜索树 7-1 ...
- 基于python tornado实现的简易图床
基于python tornado实现的简易图床 项目地址 因为买了阿里/腾讯的云服务器,但是使用云存储还需要收费,又加上家里正好有一台nas,又加上闲的没事,所以搞了一个小脚本 这个项目主要功能是为t ...
- 【Azure App Service】为部署在App Service上的PHP应用开启JIT编译器
问题描述 在App Service for linux上创建一个PHP应用,通过 phpinfo() 查看PHP的扩展设置,发现JIT没有被开启, jit_buffer_size 大小为0. 那么,在 ...
- 如何使用API接口获取Lazada商品详情数据
随着电商市场的不断发展壮大,越来越多的人开始选择在网上购买商品.其中,东南亚地区的Lazada电商平台备受欢迎.如果您是一名电商从业者,或者打算在Lazada上开店,那么获取商品详情信息将是一个非常重 ...
- python flask 提供web的get/post开发
转载请注明出处: 使用python flask框架编写web api中的get与post接口,代码编写与调试示例如下: from flask import Flask, request, jsonif ...
- brpc internal
brpc 内部实现 thread model pthread 1:1atomic cache同步降低性能 fiber n:1 -> nginx 多核难以扩展, 用户不能做阻塞操作. contex ...
- 云上的甜蜜早安:腾讯云云函数助力PHP打造女友专属每日推送
用腾讯云的云函数做一个微信公众号早安,每天定时发送早安给你的女朋友! 1.首先我们登录腾讯云,在搜索栏搜索云函数,或直接用这个链接进入curl.qcloud.com/Td0IkpmD 2.进入云函数, ...
- 解决Promise的多并发问题
提起控制并发,大家应该不陌生,我们可以先来看看多并发,再去聊聊为什么要去控制它 多并发一般是指多个异步操作同时进行,而运行的环境中资源是有限的,短时间内过多的并发,会对所运行的环境造成很大的压力,比如 ...
