如何在同一个池 IIS 上提供多个应用程序?
How to serve multiple apps on the same pool IIS?
我有一个 Windows Server 2019,运行 IIS。
我使用 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 中创建了一个带有应用程序网站的池,托管自己的应用程序 1 网站、应用程序 2 网站...
我每个文件都有一个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>
您不需要为每个应用分配一个端口。只需为门户分配一个端口。
例如添加站点“MES”时,为其分配端口5000,即可通过localhost:5000访问。
然后添加app1,就会看到这个界面。设置别名(假设它是“app1”)并更改另一个应用程序池。将每个应用程序分配到一个应用程序池很重要。
添加成功后,可以通过“localhost:5000/app1”访问app1。 app2 和 app3 相同的操作。
如果还是return404错误,首先查看IIS中的登录,获取状态码和子状态码。 Sub status code 将提供更详细的信息。
启用fail request tracing可以收集有关请求的跟踪,以便您了解导致问题的原因。
我有一个 Windows Server 2019,运行 IIS。 我使用 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 中创建了一个带有应用程序网站的池,托管自己的应用程序 1 网站、应用程序 2 网站...
我每个文件都有一个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>
您不需要为每个应用分配一个端口。只需为门户分配一个端口。
例如添加站点“MES”时,为其分配端口5000,即可通过localhost:5000访问。
然后添加app1,就会看到这个界面。设置别名(假设它是“app1”)并更改另一个应用程序池。将每个应用程序分配到一个应用程序池很重要。
添加成功后,可以通过“localhost:5000/app1”访问app1。 app2 和 app3 相同的操作。
如果还是return404错误,首先查看IIS中的登录,获取状态码和子状态码。 Sub status code 将提供更详细的信息。
启用fail request tracing可以收集有关请求的跟踪,以便您了解导致问题的原因。