【问题标题】:Best practices to host Flask app in IIS with domain name使用域名在 IIS 中托管 Flask 应用程序的最佳实践
【发布时间】:2021-02-01 23:41:57
【问题描述】:

我开发了一个flask 应用程序(使用SQL Server db),它在本地公司防火墙后面运行。现在我们需要本地网络之外的其他用户来访问这个网络应用程序。由于我使用 SQL Server(带有链接服务器选项)连接到网络中的其他本地数据库(因为我们没有 API),我希望在 IIS 本身中托管 Web 应用程序(使用 this tutorial)。请指教:

  1. 使用IIS 托管是否安全?为保护我们的本地网络而应遵循的任何最佳实践,以防任何渗透。我可以在虚拟机中运行 Web 服务器吗?它会让它更安全吗?
  2. 我还想购买一个域名并与我的 Web 服务器 IP 地址相关联,该地址会经常更改 - 任何供应商建议我可以在我的 Web 服务器 IP 更改时动态更新。

我希望了解使用带有域名的 IIS 在本地托管 Flask Web 应用程序的最佳实践。 感谢您的投入!

【问题讨论】:

标签: flask iis self-hosting


【解决方案1】:

您可以按照以下步骤在 iis 上托管烧瓶应用程序:

首先,你需要在你的服务器上安装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 或类似名称):

单击“确定”并浏览到您的站点。

如果您想为您的站点配置域名,您需要设置站点绑定,如下所示:

在hostile中绑定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

https://forums.iis.net/post/2159167.aspx

【讨论】:

  • 感谢您的建议.. 非常感谢.. 实际上,我正在寻找在 IIS 中实施的最佳实践,以保护我的 Web 应用程序(最终是我们的办公网络)免受任何不必要的破坏。跨度>
  • @jest 对于您的第一个任务,您可以在 iis 中托管您的网站。如果您只想在本地使用,那么您可以为特定用户或组设置一些限制,这些用户或组只能访问该站点并拒绝其他用户。使用带有证书的 https。第二个问题,绑定域名要公开使用,还需要购买公网IP地址,将域名与公网IP绑定。如果您还有任何问题,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
相关资源
最近更新 更多