【问题标题】:How to serve multiple apps on the same pool IIS?如何在同一个池 IIS 上提供多个应用程序?
【发布时间】:2021-04-22 12:12:20
【问题描述】:

我有一个运行 IIS 的 Windows Server 2019。 我使用 WFASTCGI 根据特定的 IP 和端口(例如 151.80.60.225:5000)为我的 Flask 应用程序提供服务,并且我的 web.config 文件运行良好。 但是,我想使用这样的 /routes 在同一个 IP:port (151.80.60.225:5000) 上为多个应用程序提供服务:

151.80.60.225:5000/ ==> Home
------> 151.80.60.225:5000/app1 ==> App1
------> 151.80.60.225:5000/app2 ==> App2
------> 151.80.60.225:5000/app3 ==> App3
------> 151.80.60.225:5000/app4 ==> App4

我在 IIS 中创建了一个带有应用程序网站的池,它自己托管 app1 网站、app2 网站……

每个文件我都有一个web.config,结构是这样的:

<configuration>
  <system.webServer>
    <handlers>
      <add name="Python FastCGI"
           path="*"
           verb="*"
           modules="FastCgiModule"
           scriptProcessor="c:\users\administrator\appdata\local\programs\python\python39\python.exe|c:\users\administrator\appdata\local\programs\python\python39\lib\site-packages\wfastcgi.py"
           resourceType="Unspecified"
           requireAccess="Script" />
    </handlers>
  </system.webServer>

  <appSettings>
    <!-- Required settings -->
    <add key="WSGI_HANDLER" value="__init__.app" />
    <add key="PYTHONPATH" value="C:\apps\app1\app" />

    <!-- Optional settings -->
    <add key="WSGI_LOG" value="C:\apps\logs\app1.log" />
  </appSettings>
</configuration>

所以我有一个用于 MES 应用程序(如主页)的 WFASTCGI web.config 文件和每个应用程序的 WFASTCGI web.config 文件。 但是当我去 151.80.60.225:5000/app1 时,我有一个“未找到错误页面”。

我的问题是: 像我想要的那样构建门户网站的好方法是什么?

感谢您的帮助。

错误页面(未找到 404):

1 月 22 日编辑:

我按照您的提示进行操作,但我仍然有 404 未找到页面。

我的设置如下,有什么问题吗?

另外,我授权 DefaultAppPool 完全访问该目录,测试设置就可以了。

1 月 23 日编辑: 请在下面找到带有子状态代码 0 和错误代码 404 的 FailedReqLogFile:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
 <System>
  <Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
  <EventID>0</EventID>
  <Version>1</Version>
  <Level>3</Level>
  <Opcode>16</Opcode>
  <Keywords>0x100</Keywords>
  <TimeCreated SystemTime="2021-01-23T09:39:47.068Z"/>
  <Correlation ActivityID="{80000036-0000-E300-B63F-84710C7967BB}"/>
  <Execution ProcessID="11112" ThreadID="12496"/>
  <Computer>WIN-xxxxxx</Computer>
 </System>
 <EventData>
  <Data Name="ContextId">{80000036-0000-E300-B63F-84710C7967BB}</Data>
  <Data Name="ModuleName">FastCgiModule</Data>
  <Data Name="Notification">128</Data>
  <Data Name="HttpStatus">404</Data>
  <Data Name="HttpReason">NOT FOUND</Data>
  <Data Name="HttpSubStatus">0</Data>
  <Data Name="ErrorCode">0</Data>
  <Data Name="ConfigExceptionInfo"></Data>
 </EventData>
 <RenderingInfo Culture="fr-FR">
  <Opcode>MODULE_SET_RESPONSE_ERROR_STATUS</Opcode>
  <Keywords>
   <Keyword>RequestNotifications</Keyword>
  </Keywords>
  <freb:Description Data="Notification">EXECUTE_REQUEST_HANDLER</freb:Description>
  <freb:Description Data="ErrorCode">The operation completed successfully.
 (0x0)</freb:Description>
 </RenderingInfo>
 <ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
  <EventGuid>{002E91E3-E7AE-44AB-8E07-99230FFA6ADE}</EventGuid>
 </ExtendedTracingInfo>
</Event>

【问题讨论】:

  • 通过您对错误的描述,我无法获得足够的错误信息。你能显示错误页面或详细的错误信息和状态码吗?顺便说一句,不可能在同一个应用程序池上托管多个子 python 应用程序。不仅是python,还有php、.net核心应用。最好将每个应用程序分配到一个应用程序池。
  • 我理解您的评论。但是我需要为每个应用程序分配一个端口吗?或者我可以为门户分配一个端口并为每个应用程序管理 /app1、/app2、...、/appn 等子路由吗?这个想法是为所有工具(应用程序)创建一个门户,并且只通过 URL 导航。我用错误页面编辑了我的帖子。感谢您的帮助。
  • 如果将app1,2,3设置为主站点,可以吗? 404.0 表示找不到填充,所以我认为路由可能有问题。错误页面属于烧瓶应用程序而不是 IIS。请求已进入烧瓶应用程序,但它没有遵循正确的路线。
  • 是的,当我将 app1 设置为网站时它可以工作。所以你认为这个问题来自 Flask 中的路由错误?我是否必须将我的别名设置为 Flask 中的默认路由而不是 / 路由?
  • 非常好的更新是有效的!我唯一不能做的就是为我的静态文件夹提供图像和 css 文件。我试过这个stackoverflow.com/questions/2061678/…,但还是卡住了。真是个噩梦!

标签: python flask iis windows-server-2019 wfastcgi


【解决方案1】:

您无需为每个应用分配一个端口。只需为门户分配一个端口即可。

例如,添加站点“MES”时,为其分配5000端口,即可通过localhost:5000访问。

然后添加app1,就会看到这个界面。设置别名(假设它是“app1”)并更改另一个应用程序池。将每个应用程序分配到一个应用程序池非常重要。

添加成功后,可以通过“localhost:5000/app1”访问app1。 app2 和 app3 的操作相同。

如果还是返回404错误,请先查看IIS的日志,获取状态码和子状态码。 Sub status code 将提供更详细的信息。

启用fail request tracing 可以收集有关请求的跟踪,以便您了解导致问题的原因。

【讨论】:

  • 我按照您的指示进行操作,但仍然找不到 404 页面。我在“1 月 22 日编辑”部分的初始帖子中分享了我的设置。
  • 您是否通过xxxx:5000/vision_xxx 访问该站点?这不是权限问题。应返回 403 以获得许可问题。 404的子状态码是什么?
  • 我启用了失败请求跟踪,但我在哪里或如何查看日志?我会给你这些子法规和更多细节。
  • 请在我上次编辑(1 月 23 日)中找到文件 req 日志文件。感谢您的帮助。
猜你喜欢
  • 2023-03-21
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多