问题描述
我开发了一个flask
应用程序(具有SQL Server
数据库),该应用程序在本地公司防火墙后面运行。现在,我们需要本地网络之外的其他用户访问此Web应用程序。由于我正在使用SQL Server(带有链接服务器选项)连接到网络中的其他本地数据库(因为我们没有API),因此我希望将Web应用托管在IIS
本身(使用{{3} })。请告知:
- 使用
IIS
进行托管是否安全?万一有渗透,应遵循任何最佳实践来保护我们的本地网络。我可以在虚拟机中运行Web服务器吗?会更安全吗? - 我还想购买一个域名并与我的Web服务器IP地址关联,该域名会经常更改-任何供应商建议,我可以在Web服务器IP更改时动态更新。
我希望学习使用带有域名的IIS在本地托管烧瓶Web应用程序的最佳实践。 感谢您的输入!
解决方法
您可以按照以下步骤在iis上托管flask应用程序:
首先,您需要在服务器上安装python,wfastcgi和flask。
从以下链接下载python:
https://www.python.org/downloads/
注意:如果可能,请使用3.6以上的python版本。
在安装python之后,安装wfastcgi。以管理员身份运行命令提示符并运行以下命令:
pip install wfastcgi
wfastcgi-enable
下面是我的烧瓶示例:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from FastCGI via IIS!"
if __name__ == "__main__":
app.run()
在创建要运行的应用程序后,使用以下命令:
python app.py
现在启用iis的cgi功能:
- 打开iis。右键单击服务器名称,然后选择添加站点。
-
输入站点名称的物理路径和站点绑定。
-
添加站点后,选择站点名称,然后从中间窗格中选择处理程序映射功能。
- 从操作窗格中单击“添加模块映射”。
- 可执行路径值:
C:\ Python37-32 \ python.exe | C:\ Python37-32 \ Lib \ site-packages \ wfastcgi.py
- 单击“请求限制”。确保未选中“仅在请求映射到以下情况时调用处理程序:”复选框:
- 在此处单击“是”:
- 现在返回并选择应用程序设置功能。
- 从操作窗格中单击添加。
- 设置PYTHONPATH变量(这是您的站点文件夹路径):
- 然后是WSGI_HANDLER(我的Flask应用程序名为app.py,因此值为app.app -如果您的名称为site.py,则它将为site.app或类似名称):
单击“确定”并浏览到您的站点。
如果要使用您的站点配置域名,则需要按以下方式设置站点绑定:
并将IP和域名绑定在“ C:\ Windows \ System32 \ drivers \ etc \ hosts”中的敌对状态
IP主机名
注意:这仅在本地有效。如果要为互联网用户设置域名,则需要购买域名和公共IP,并将IP与域名绑定。
要访问SQL Server iis用户没有足够的权限,您需要配置具有足够权限以使用iis应用程序池访问SQL Server的用户。
-
打开iis mnager->选择应用程序池
-
从操作窗格中选择高级设置。
-
以身份检查自定义单选按钮,然后输入用户名和密码。
注意:确保将iis_iusrs和iusr权限分配给站点和python文件夹。
有关更多详细信息,您可以参考以下链接:
https://docs.microsoft.com/en-us/visualstudio/python/configure-web-apps-for-iis-windows?view=vs-2019