IIS服务器与web.config配置优化指南

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IIS服务器与web.config配置优化指南相关的知识,希望对你有一定的参考价值。

参考技术A

   修改IIS最大工作进程数 a 请考虑以下几点 每一个工作进程都会消耗系统资源和CPU占用率 太多的工作进程会导致系统资源和CPU利用率的急剧消耗 每一个工作进程都具有自己的状态数据 如果Web应用程序依赖于工作进程保存状态数据 那么可能不支持使用多个工作进程 成资源竞争 让多个工作进程运行同一个应用程序会造成资源竞争 b 修改ISS最大工作进程数提高该应用程序池处理请求的性能 在IIS 的Web园(Web Garden)中 指定用于某个应用程序池的工作进程的数量就可以提高该应用程序池处理请求的性能 当服务器的负载较小 不需要额外的工作进程时 IIS 在一定的时间后(默认 分钟 可配置)自动缩减实际的工作进程数量 如果负载变大 需要额外的工作进程 IIS 再次增加工作进程数量 这一切操作都自动进行 不需要管理员干预 修改方法如下 修改服务器 net framework的machine config的配置 目录 C:WINDOWSMicrosoft NETFramework v CONFIGmachine config 将其中的“processModel”节点的“allowDefinition”值设置为“Everywhere” 修改服务器中的iis最大工作进程数: 方法 右击iis应用程序池 > 属性 > “性能”选项卡 > web园 > 最大工作进程数 注 经测试验证 服务器为 ( * )核 G内存时 设置为 性能最优 (PS: processModel 元素(ASP NET 设置架构) 元素配置用于服务器(包括服务器上的所有 ASP NET 应用程序)的处理模型 因此 processModel 设置只能放在 Machine config 文件中 而且不能被任何 Web config 文件中的设置重写 ) 取消IIS的web访问记录 a 关闭IIS访问记录可以提升web性能 IIS 默认开启对于web的IIS访问记录 当开启记录功能后 IIS会事无巨细地忠实记录所有的IIS访问记录 这些记录文件的内容是非常庞杂的 比如访问时间 客户端IP 从哪个链接访问 Cookies等 另外还包括 Method(方法) UserAgent(用户代理)等 这些记录不但占用大量的磁盘空间还大大地影响了web服务器的性能 有人做过评测 停止IIS访问记录可以提升 %到 %的web性能 方法 打开IIS管理器 定位到具体的web站点 右键点击选择“属性” 在“主目录”选项卡下取消对“记录访问”的勾选即可 Web config配置优化(生产环境) 去除无用HttpModules d 并不是所有的Modules都是必需的 去除不用的HttpModules可以提高请求速度 asp net默认的HttpModules管理请求的管线控制每一个请求 例如 SessionStateModule拦截每一个请求 分析session cookie 来加载HttpContext中的合适的session 但是并不是所有的Modules都是必需的 比如 如果你不用membership的话 就不用配置FormsAuthentication模块 如果你不用windows身份验证就不用配置WindowsAuthentication 这些模块只是包含在管线里面 为每一个请求执行一些并不是必须的代码 默认的模块定义在machine config中(在网站的web config中设置表示当前网站有效)($WINDOWS$Microsoft NETFramework$VERSION$CONFIG) 如果不需要这些管线的话 配置如下

   代码如下: <Modules> <! 去除不必要的节点 提高请求速度 > <remove name=OutputCache /> <remove name=Session /> <remove name=WindowsAuthentication /> <remove name=FormsAuthentication /> <remove name=PassportAuthentication /> <remove name=RoleManager /> <remove name=UrlAuthorization /> <remove name=FileAuthorization /> <remove name=AnonymousIdentification /> <remove name=Profile /> </Modules>

   关闭页面级无用机制 Web config中的<pages>节点配置全局定义页特定设置 如配置文件范围内的页和控件的 ASP NET 指令 默认enableViewState属性为“true” 即开启视图 如果不使用这个机制就可以设置为“false” 默认autoEventWireup属性为“true” 即开启页事件 如果不使用这个机制就可以设置为“false” 默认buffer属性为“true” 即开启 HTTP 响应缓冲 默认enableViewStateMac属性为“false” 开启对页的视图状态运行计算机身份验证检查 (MAC) 以放置用户篡改 如果设置为true 将会引起性能的降低 默认validateRequest默认为true 开启验证用户输入中有跨站点脚本攻击和SQL注入式漏洞攻击 如果出现匹配情况就会发 HttpRequestValidationException 异常 将CustomError设置为非Off状态 Web config中的<customErrors>节点用于定义一些自定义错误信息的信息 此节点有Mode和defaultRedirect两个属性 其中defaultRedirect属性是一个可选属性 表示应用程序发生错误时重定向到的默认URL 如果没有指定该属性则显示一般性错误 Mode属性是一个必选属性 它有三个可能值 它们所代表的意义分别如下 Mode 说明 On 表示在本地和远程用户都会看到自定义错误信息 Off 禁用自定义错误信息 本地和远程用户都会看到详细的错误信息 RemoteOnly 表示本地用户将看到详细错误信息 而远程用户将会看到自定义错误信息 这里有必要说明一下本地用户和远程用户的概念 当我们访问asp net应用程时所使用的机器和发布asp net应用程序所使用的机器为同一台机器时成为本地用户 反之则称之为远程用户 在开发调试阶段为了便于查找错误Mode属性建议设置为Off 而在部署阶段应将Mode属性设置为On或者RemoteOnly 以避免这些详细的错误信息暴露了程序代码细节从而引来黑客的入侵 配置如下

   代码如下: <customErrors mode=" On " defaultRedirect="Error "/>

   禁用调试 Web config中的<pilation>节点配置 ASP NET 使用的所有编译设置 默认的debug属性为“true” 即允许调试 在开发阶段这样配置没有问题 但正式部署上线后 这样会影响支撑接口的性能 所以在程序编译完成上线之后应将其设为“false” 配置如下

   代码如下: <pilation debug="false" />

   连接并发配置 连接并发数限制是指对于同一个ip对同一个domain发起的最大连接数 其实在大多数微软的产品或组件中都存在这个限制 一般这个数值是 / 个 也就是说在默认情况下 对于同一个ip访问同一个domain同时最多有 个连接处于建立状态 默认是 这个值太低了 这意味着每一个IP最多只能有两个请求到你的网站 这样会造成请求拥堵 asp net中connectionManagement节点可以设置单个ip对同某个domain发起的最大连接数 配置如下

   代码如下: <system net> <connectionManagement> <add address="*" maxconnection=" " /> </connectionManagement> </system net>

  address代表针对哪个domain maxconnection代表最大连接数 去掉头信息中的ASP NET 版本标头 enableVersonHeader 指定 ASP NET 是否应输出版本标头 使用该属性来确定当前使用的 ASP NET 版本 对于生产环境 该属性不是必需的 可以禁用 配置示例

lishixinzhi/Article/program/net/201311/14321

web.config 导致 iis 出现问题

【中文标题】web.config 导致 iis 出现问题【英文标题】:web.config causing problems with iis 【发布时间】:2012-11-01 01:54:33 【问题描述】:

到目前为止,我只在 Visual Studio 中使用过这个 web.config。但是,我现在正尝试将我的网站发布到 IIS,并且存在与我的 web.config 相关的错误。似乎它在模块的配置数据上崩溃了。

<?xml version="1.0"?>

<configuration>
    <system.web>
      <compilation targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
    </system.web>
  <phpNet>
    <classLibrary>
      <add assembly="php_mcrypt.mng, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3" section="mcrypt" />
      <add assembly="php_curl.mng, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3" section="curl" />
    </classLibrary>
    <scriptLibrary/>
  </phpNet>

</configuration>

错误:

此屏幕截图是在尝试双击 IIS 的“功能视图”中的任何“功能”时出现的。但是,如果我只是通过浏览器访问网站,错误是一样的:

无法读取配置部分“phpNet”,因为它是 缺少部分声明

phpNet 用于Phalanger,应该安装扩展,但我不知道如何检查。就像我说的那样,这个 web.config 和 phalanger 在 Visual Studio 中运行良好,所以我不知道出了什么问题。特别是因为安装程序确实在 iis 中安装了示例。

【问题讨论】:

【参考方案1】:

我发现这个帖子http://crdevelopment.net/2012/06/12/fixing-iis-error-the-configuration-section-system-web-extensions-cannot-be-read-because-it-is-missing-a-section-declaration/

这导致我检查了应用程序池。

此时我注意到那里的倍数。我选择了 phalangerAppPool 并消除了我的错误,但带来了一个新的错误。

处理程序“PageHandlerFactory-Integrated”有一个坏模块 其模块列表中的“ManagedPipelineHandler”

不过这个错误更容易解决 (fix)

【讨论】:

【参考方案2】:

您缺少配置节定义

<configSections>
<section name="phpNet" type="PHP.Core.ConfigurationSectionHandler, PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71" />

没有这个,.NET 不知道 'phpNet' 配置部分。

这也意味着,您没有使用 setup.exe 安装 Phalanger。这里有一些关于在没有正确安装的情况下使用 Phalanger 的信息(重要的是关于配置的部分)http://www.php-compiler.net/blog/2011/installation-free-phalanger-web

【讨论】:

我发布的答案怎么样?因为一旦我开始使用“PhalangerAppPool”,事情就会奏效。 我最终也将这些语句移到了 .net/frameworks/v4/config 目录中的 master.config 中

以上是关于IIS服务器与web.config配置优化指南的主要内容,如果未能解决你的问题,请参考以下文章

Web 应用程序问题(web.config 错误)HTTP 500.19 与 IIS7.5 和 ASP.NET v2

[转帖]站点部署,IIS配置优化指南

站点部署,IIS配置优化指南

web.config 导致 iis 出现问题

IIS6/7 配置操作

C#进阶系列——使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)