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,访问发 ...
随机推荐
- JVM虚拟机栈
JVM虚拟机栈 1.概述 1.1背景 由于跨平台性的设计,Java的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降 ...
- 西门子HMI切换页面时的指示功能
怎么样才能做到像这样按下切换界面的按钮,切换过去之后对应的切换按钮还进行高亮指示呢? 首先我们要先新建模板,把我们的画面拖拽到模板里就会形成按钮 在画面的"属性"中 在属性中选上我 ...
- 并发编程-FutureTask解析
1.FutureTask对象介绍 Future对象大家都不陌生,是JDK1.5提供的接口,是用来以阻塞的方式获取线程异步执行完的结果. 在Java中想要通过线程执行一个任务,离不开Runnable与C ...
- VIM编辑器和Shell命令脚本
注意:在Linux中一切皆文件,而配置一个服务就是在修改其配置文件的参数. VIM编辑器有三种模式: 命令模式:控制光标移动,可对文本进行复制.粘贴.删除和查找等工作 在该模式下不能对文件直接编辑,可 ...
- Django创建数据库时设置字符集
在控制台输入一下命令: create database 数据库名 charset=utf8;
- 你真的知道吗?catch、finally和return哪个先执行
我的一位朋友前阵子遇到一个问题,问题的核心就是try--catch--finally中catch和finally代码块到底哪个先执.这个问题看起来很简单,当然是"catch先执行.final ...
- sqli笔记
MySQL数据库自带的数据库information_schema 里面有三个比较重要的表 SCHEMATA .TABLES . COLUMNS 保存数据库所有的数据库名 表名 字段名 SCHEM ...
- 好用的css3特性-动画和3d变换
上一篇文章总结了过渡和2D变化,这一篇来总结一下动画和3D变换,动画可用的场景也很多,比如在加载的页面的时候,可以放置一个gif图,也可以自定义小动画来缓解用户等待的焦虑感,比如以下三个小圆圈转圈圈的 ...
- CentOS7系统初始化个人配置
以下内容为个人最小化安装后的配置步骤 更换yum源为阿里云 yum install -y epel-release lrzsz wget yum-axelget mv /etc/yum.repos.d ...
- C#中多线程的用法
1.在C#中使用多线程可以使用Thread 代码例子: public class ThreadExample { public static void ThreadProc() { for (int ...