Following the steps in https://learn.microsoft.com/en-us/visualstudio/python/configure-web-apps-for-iis-windows?view=vs-2019 to configure flask app to run behind IIS and searching online I couldn't find a solution that fix my problem.
I have my web.config as:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<httpPlatform processPath="C:\envs\Scripts\python.exe"
arguments="-m flask run --port %HTTP_PLATFORM_PORT%"
stdoutLogEnabled="true"
stdoutLogFile="C:\logs\python.log"
startupTimeLimit="60"
processesPerApplication="16">
<environmentVariables>
<environmentVariable name="FLASK_APP" value="app.py" />
</environmentVariables>
</httpPlatform>
</system.webServer>
</configuration>
A visit to the site just spit the following. I tried all possible solutions I came across which include giving IIS_IUSRS access. Running the app on command prompt runs just fine. The IIS error message is not helping.
edit:
after installing the http platformhandler and now on a different dev box, I can see the handler at work but just a different monster:
502.3 Bad Gateway
Detailed Error Information:
**Module** httpPlatformHandler **Requested URL** http://127.0.0.1:5007/about
**Notification** ExecuteRequestHandler **Physical Path** C:\inetpub\wwwroot\app\about
**Handler** PythonHandler **Logon Method** Anonymous
**Error Code** 0x8007042b **Logon User** Anonymous
Which tells me the handler is just handling the url as just folders in my app root because http://127.0.0.1:5007/about is nothing but a route to:
myapp_about.py:
from flask import Blueprint, jsonify
myapp_about = Blueprint('about', __name__)
@myapp_about.route('/about')
def get_about():
return jsonify({"wow": "We really are routed to here. maybe not"})




myapp_about.pywon't be picked up even if you runpython -m flask runwithout IIS. So I wonder from where you found the code snippet and wanted to give that a try. 3) This question in its current form should be closed as duplicate I think.