Windows 平台部署 Flask,nginx

在部署flask的时候,找nginx相关资料看到的下文,比较靠谱,做个记录

在 Windows 平台,Flask 本身带的 web server 功能太弱,所以考虑 nginx 是否可以在 Windows 平台应用。经过在网上的查找,找到解决方案:Flask + Tornado + nginx。以下是 nginx 在 Windows 部署的方法。

下载和安装
下载地址:https://nginx.org/en/download.html,选择 Windows 版本,下载后解压缩到目标位置即可。

启动和关闭
此时,进入 nginx 安装目录,通过下面的命令:
start nginx
nginx -s stop
快速停止 nginx 服务。但因为并没有对 nginx 进行配置,所以没有什么实际的作用。接下来我们需要对 nginx 进行配置,让 nginx 作为 Flask 的 http 服务器。在 Linux 操作系统中,可以使用 gunicorn 或 uwsgi 作为 WSGI 服务器,但 Windows 不能使用,所以使用 tornado 充当 wsgi。

Tornado 作为 wsgi
server.py 是一段 Tornado 代码,让 Tornado 作为 wsgi 服务器:

from tornado.httpserver import HTTPServer
from tornado.wsgi import WSGIContainer
from app import app
from tornado.ioloop import IOLoop

s = HTTPServer(WSGIContainer(app))
s.listen(9900) # 监听 9900 端口
IOLoop.current().start()

配置 nginx
接下来配置 nginx,当用户在浏览器中输入 http://localhost,nginx 自动转发到 9900 端口,这样就可以关联到 Tornado 充当的 WSGI 服务器。

nginx 的配置文件 nginx.conf 在安装目录下 conf 子文件加下,打开该文件,进行如下配置:

http {   
    server {
        listen       80;
        server_name  localhost;
        server_name  127.0.0.1;     
        charset     utf-8;           

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass  http://localhost:9900;
        }
        # other configurations
  }

配置完成后,重新启动 nginx ,当用户在浏览器中输入 http://localhost,nginx 将请求转发到 9900 端口,从而关联到我们的 Flask 程序。
将 nginx 加载 Windows 服务
通过 start nginx 启动 nginx 服务,缺点是当关闭 command 窗口,这个服务就终止了。在 Windows 操作系统中,我们可以使用 winsw 将 nginx 加载到 Windows 服务。

winsw 是一个一个开源的项目,可以将一个自定义进程包装为一个 Windows 服务,项目地址:Github,下载地址:WinSW。

下载后,将 exe 文件放到 nginx.exe 相同的文件夹下,并且将 winsw.exe 改名为 nginx-service.exe。改名的目的是为了后续在服务中容易找到,并不是必须的。

然后在相同的文件夹下创建一个 nginx-service.xml 文件。文件的内容在 https://github.com/kohsuke/winsw/blob/master/doc/xmlConfigFile.md 中有说明。比如,需要配置 nginx,xml 文件的内容如下:

<service>
    <id>nginxid>
    <name>Nginx Servicename>
    <description>Nginx Servicedescription>
    <logpath>D:/software/nginx-1.18.0/logslogpath>
    <log mode="roll-by-size">
      <sizeThreshold>10240sizeThreshold>
      <keepFiles>8keepFiles>
    log>
    <executable>D:/software/nginx-1.18.0/nginx.exeexecutable>
    <startarguments>-p D:/software/nginx-1.18.0startarguments>
    <stopexecutable>D:/software/nginx-1.18.0/nginx.exestopexecutable>
    <stoparguments>-p D:/software/nginx-1.18.0 -s stopstoparguments>
  service>

另外,为了支持 .net 4.0,还需要在相同的目录下创建一个 nginx-service.exe.config 文件,注意这两个配置文件的名称是跟着 nginx-service 来的,必须相同。文件的内容是固定的,如下所示:

<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
    <supportedRuntime version="v4.0" />
  startup>
  <runtime>
    <generatePublisherEvidence enabled="false"/> 
  runtime>
configuration>

完成配置后,在命令行窗口通过下面的命令进行安装:

nginx-service.exe install

安装之后,进入 Windows 服务,可以在服务中进行属性的设置和启动与停止的管理。

作者:Stone0823
链接:https://www.jianshu.com/p/9af55f90cf6d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(python,windows,nginx,python)