MapServer的IIS安装程序

作者

塞思吉尔文

联系方式

在Compass.ie的sGirvin

最后更新

2017-06-26

本文档详细介绍了如何将预先构建的MapServer版本配置为在IIS(Microsoft的Web服务器-Internet信息服务)上运行。这些步骤的最低要求是IIS 7和Windows 7,并且应该适用于自IIS 10和Windows 10以来的所有版本。

MapServer也可以在Windows上运行,使用 MS4W (MapServer for Windows)-安装自己的预配置ApacheWeb服务器,以及其他相关工具,如PHP、Tinyows和MapCache(目前不在IIS下运行)。在部署到安装其他Web服务器受到限制的服务器或系统管理员具有维护IIS的更多经验的服务器时,可能需要在IIS下运行MapServer。

注解

MapServer可执行文件来自 MS4W can also be used under IIS as well; for more information see the section in MS4W's README ,或向MS4W社区寻求帮助 (subscribe

映像服务器设置

可以从http://www.gisinternals.com/release.php下载mapserver和gdal的预编译版本(一个必需的依赖项)。这些下载由MapServer的长期贡献者Tamas Szekeres和项目指导委员会(PSC)成员构建和维护。

注解

我应该下载哪个版本?

  • 除非在 Mapfile 中使用不推荐使用的功能,否则应下载最新的稳定版本。

  • 几乎所有的服务器现在都有一个x64(64位)体系结构,所以除非您被限制在一个Win32(32位)服务器上,否则请下载一个x64版本。

  • 除非有充分的理由,否则应该使用最新的编译器版本。MSVC 2013表示二进制文件是用Visual C++ 2013编译的。如果您依赖python2 mapscript,则需要使用MSVC 2008版本,以便它与python2编译时使用的版本相匹配。

  • 本安装指南使用*在单个.zip包中编译的二进制文件*下载(release-1800-x64-gdal-2-1-3-mapserver-7-0-4)。还有一个*“支持IIS注册的MapServer安装程序”*选项,但在编写时,没有成功安装。

下载zip文件后,请按照以下步骤操作。

  1. 将文件夹解压缩到您的计算机。在这个例子中,我们假设它已经被解压到 C:\MapServer . 确保已经“解锁”了zip,以避免以后出现与安全相关的问题。右键单击zip文件,选择属性,然后单击常规选项卡上的“取消阻止”按钮。

    ../_images/unblock_zip.png
  2. 通过双击测试MapServer是否工作 C:\MapServer\SDKShell.bat 要启动配置了MapServer环境设置的新Windows命令会话,请键入:

    mapserv -v
    

    mapserver版本和支持的格式类型应该显示在命令窗口中。

使用IIS配置

这些步骤假定在开发计算机上安装了IIS 7或更高版本,并且MapServer将使用默认的网站位置 C:\Inetpub\wwwroot . 所有命令行步骤都应该是“以管理员身份运行”(要选择此选项,请右键单击Windows命令行图标)。确保IIS在计算机上-如果您有一个名为的文件夹 C:\Inetpub 然后可能已经安装了IIS。

  1. 首先将必需的.exes复制到与mapserver dll相同的文件夹中。可以使用以下命令完成此操作:

    xcopy C:\MapServer\bin\ms\apps\* C:\MapServer\bin
    
  2. 创建新文件夹 C:\Inetpub\wwwroot\mapserver

    md C:\Inetpub\wwwroot\mapserver
    
  3. 新建一个空的 C:\Inetpub\wwwroot\mapserver\web.config 文件:

  4. 按以下配置粘贴:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <handlers>
                <add name="MapServerFastCgi" path="*" verb="*" type="" modules="FastCgiModule" scriptProcessor="C:\Mapserver\bin\mapserv.exe" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition=""  />
            </handlers>
            <caching enabled="true" enableKernelCache="true" />
        </system.webServer>
    </configuration>
    
  5. 下一步在IIS中设置Web应用程序:

    "%systemroot%\system32\inetsrv\appcmd" add app /site.name:"Default Web Site" /path:/mapserver /physicalPath:"C:\Inetpub\wwwroot\mapserver"
    
  6. 接下来,使用以下命令确保在IIS中安装了所需的ISAPI和CGI模块:

    start /w pkgmgr /iu:IIS-CGI;IIS-ISAPIExtensions;IIS-ISAPIFilter;
    

    注解

    您可以通过以下用户界面启用IIS模块:

    1. 点击“开始按钮”

    2. 在搜索框中,输入“打开或关闭Windows功能”

    3. 在“功能”窗口中,单击“Internet信息服务”

    4. 点击:“万维网服务”

    5. 单击:“应用程序开发功能”

    6. 检查(启用)功能。

    7. 然后可能需要重新启动IIS

    ../_images/windows_features.jpg
  7. 接下来,我们将mapserver.exe设置为fastcgi应用程序,并允许它在IIS中运行:

    "%systemroot%\system32\inetsrv\appcmd" set config -section:system.webServer/fastCgi /+"[fullPath='C:\Mapserver\bin\mapserv.exe']" /commit:apphost
    "%systemroot%\system32\inetsrv\appcmd" set config /section:isapiCgiRestriction /+"[path='C:\MapServer\bin\mapserv.exe',description='MapServer',allowed='True']"
    
  8. 通过在浏览器中输入以下URL测试安装程序是否成功:http://localhost/mapserver/。如果显示以下文本,则MapServer已在IIS中成功配置为FastCGI应用程序。

    No query information to decode. QUERY_STRING is set, but empty.
    

设置应用程序

MapServer应用程序包括一个 Mapfile ,以及用于数据、符号、日志和图像的其他可选文件。同一个MapServer实例可以用于许多应用程序。在这个例子中,我们将创建一个新的 test 中的测试应用程序的子文件夹 C:\MapServer\apps 文件夹。

md C:\MapServer\apps\test

现在创建一个新的 test.map 文件并粘贴到下面的测试 Mapfile 中。

MAP
    EXTENT -180 -90 180 90
    # Set the path to where the map projections are stored
    CONFIG "PROJ_LIB" "C:\MapServer\bin\proj\SHARE"
    NAME "TestMap"
    WEB
      METADATA
        "ows_enable_request" "*"
      END
    END
    PROJECTION
      "init=epsg:4326"
    END
    LAYER
      NAME "country_bounds"
      TYPE RASTER
      CONNECTION "https://demo.mapserver.org/cgi-bin/wms?"
      CONNECTIONTYPE WMS
      METADATA
        "wms_srs"             "EPSG:4326"
        "wms_name"            "country_bounds"
        "wms_server_version"  "1.1.1"
        "wms_format"          "image/gif"
      END
    END
END

现在,您应该能够测试通过使用以下URL通过IIS访问应用程序以通过WMS检索图像:http://localhost/mapserver/mapserv?map=c:/mapserver/apps/test/test.map&service=wms&version=1.3.0&request=getmap&layers=countrybounds&styles=&crs=epsg:4326&bbox=-180,-90180,90&width=400&height=300&format=image/png

设置日志记录

可以通过将以下行添加到 MAP 块。

DEBUG 5 # a value from 0 (OFF) to 5 (detailed)
CONFIG "MS_ERRORFILE" "logs\ms.log"

日志文件的路径是相对于 Mapfile 的,因此在本例中,您需要创建一个新的 C:\MapServer\apps\test\logs 文件夹:

md C:\MapServer\apps\test\logs

然后,您需要将日志文件的读写权限设置为IIS应用程序池用户(在本例中,我们使用的是默认值 IIS AppPool\DefaultAppPool 运行mapserver fastcgi的帐户):

icacls "C:\MapServer\apps\test\logs" /grant "IIS AppPool\DefaultAppPool":(OI)(CI)RW

如果使用了其他应用程序池,或者未设置权限,则将收到以下消息(同时检查 C:\MapServer\apps\test\logs 文件夹存在,因为它不会自动创建)。

msSetErrorFile(): General error message. Failed to open MS_ERRORFILE C:/MapServer/apps/test/logs/ms.log

故障排除

  • 如果收到以下错误,请检查文件是否存在。如果它确实存在,请检查文件权限。

    msLoadMap(): Unable to access file. (C:/MapServer/apps/test/test.map)
    
  • 映射服务器投影存储在 C:\MapServer\bin\proj\SHARE . 当投影以下列形式指定时 "init=epsg:3857" ,MapServer将尝试在 epsg 文件,其中列出为 <3857> +proj=merc +a=6378137... . 如果收到下面的错误,请确保 CONFIG "PROJ_LIB" "C:\MapServer\bin\proj\SHARE" 设置指向正确的路径。注:在一次安装中,此消息显示为正斜杠而不是反斜杠。

    msProcessProjection(): Projection library error. proj error "No such file or directory" for "init=epsg:3857"
    
  • 如果已锁定IIS,则会导致以下错误,因此无法在 web.config 水平。

    HTTP Error 500.19 - Internal Server Error
    The requested page cannot be accessed because the related configuration data for the page is invalid.
    
    This configuration section cannot be used at this path. This happens when the section is locked at a parent level.
    Locking is either by default (overrideModeDefault="Deny"), or set explicitly by a location tag with
    overrideMode="Deny" or the legacy allowOverride="false".
    

    在命令窗口中运行以下命令(具有管理员权限)。这使得/mapserver/web.config文件中的handlers部分可以覆盖在计算机级别设置的部分。请参阅http://stackoverflow.com/questions/9794985/iis-this-configuration-section-cannot-be-used-at-this-path-configuration-lock

    %windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/handlers
    
  • 检查 C:\MapServer\bin\mapserv.exe 如果遇到下面的错误,则存在。

    HTTP Error 500.0 - Internal Server Error
    The FastCGI executable could not be found
    
  • 要查看向IIS注册的CGI应用程序,可以使用下面的命令(这将读取 C:\Windows\System32\inetsrv\config ):

    "%systemroot%\system32\inetsrv\appcmd" list config /section:isapiCgiRestriction
    

    对于本节,这将输出类似以下的XML:

    <system.webServer>
      <security>
        <isapiCgiRestriction>
          <add path="C:\MapServer\bin\mapserv.exe" allowed="true" description="MapServer" />
        </isapiCgiRestriction>
      </security>
    </system.webServer>