Flask: flask + tornado+ nginx组合
在本地完成大部分开发后,迁移到阿里云生产环境。因为是小网站,选择了windows平台,但是后端又选择了flask框架,只能选择tornado web容器和nginx组合。其实,nginx都没有必要,只是为了试着玩玩,看看生产环境如何配置。
tornado代码很简单,就是一个server.py.
具体在阿里云上:
我选择了生产环境配置了一台ecs服务器。
server name 是阿里云上绑定对应域名的www.myweb.com(假定)的主页地址。端口需要看ecs网络安全组对应的端口设置。允许有相应的访问权限就可以。
需要说明的是,这里域名绑定,域名申请,网络安全组设置等不介绍了。
nginx第一次设置,可能会让大家感觉是不是会很复杂?其实大可不必紧张。首先去下载一个nginx到本地,如下:
配置文件 就是conf目录下,nginx.conf文件。打开即可,进行相关设置。
主要就两部分:
1、sever下 listen 端口和server_name
server {
listen 80;
server_name myweb.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://localhost:9000;
}
#error_page 404 /404.html;
}
另外一个linux下设置:
db@iZgw041dtbsye3lhp8lz3eZ:~/dataapi/http_server$ cd /etc/nginx
db@iZgw041dtbsye3lhp8lz3eZ:/etc/nginx$ ls
conf.d fastcgi_params koi-win modules-available nginx.conf scgi_params sites-enabled uwsgi_params
fastcgi.conf koi-utf mime.types modules-enabled proxy_params sites-available snippets win-utf
db@iZgw041dtbsye3lhp8lz3eZ:/etc/nginx$ sudo vi nginx.conf
在nginx.conf中http下:增加
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://localhost:9090;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
}
2、location部分
这部分比较重要,否则即使nginx正常,也只是到欢迎来到nginx那个页面,是到不到你应用那的。
proxy_pass http://localhost:9000;
这部分是nginx到tornado web 服务器的分发的部分,tornado 发把端口9000的信息,分发给flask应用。
具体的端口和tornado中的端口一致就OK了。
上面好了,就可以启动tornado和nginx了。如果nginx已经启后,需要再reload一下,更新一下配置。这个可以互联网上到处查到。
常见的ubuntu平台下的修改命令:
sudo systemctl start nginx # 启动
sudo systemctl stop nginx # 停止
sudo systemctl restart nginx #重新启动
ps -ef | grep nginx # 查询nginx状态
sudo nginx -s reload # 修改配置文件后,重新载入配置文件
nginx的状态,可以在windows下,通过任务管理器看一下,是否正常启动或处于运行状态。
其它具体nginx的相关操作,这里就不详述了。过程比较简单,远远比想象的简单。
一切ok后,你输入www.myweb.com就可以访问了。
问题:
如果访问没有反应,可以看看tornado设置的端口是否被占用了,可以重设一个端口,此时需要nginx conf文件 进行重设一下,并reload。
另外,在flask下,图片等静态文件 最好放在staic文件 夹下,放在其它地方,哪怕是绝对路径也可能找不到。
3、关于真实IP设置
server {
listen 80;
server_name myweb.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://localhost:9000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
}