通过Nginx + Uwsgi + Flask来搭建你的小型博客

什么是内网与外网呢?我的理解是,你从电信去连一个宽带,这个时候电信会给你分配一个外网地址,这个地址全世界只有你有,所以别人可以通过这个地址访问到唯一的一个你的服务器,而这个时候你觉得一个网络端口不够,你要用路由器发送wifi来给手机、笔记本电脑等设备用。这个时候路由器就给你的手机、笔记本电脑等设备分配内网地址,不然所有设备都去抢外网地址,外网地址又只有一个,就没有办法用不同的地址来区分这些设备。外网地址是唯一的,你的外网地址是你专享的,可是内网地址不一样,一般内网地址从127.0.0.1开始,所以大家内网地址都有这几个,外面的人根本访问不到。除了之前说的路由器,还有学校(学校哪舍得给你们每人一个外网地址)啊,公司提供的网络提供的都是内网地址。

在学校里的同学,像博主一样,就只能租服务器了,现在也有很多不错的服务器也不贵。

好了,现在我们有一个外网地址了,但是别的怎么来访问你呢?假如你的ip地址为a, 别人访问你的网站,用浏览器输入a,然后浏览器会向你的服务器发送一个http请求,别人给你发请求了,你不能不理别人吧,所以你需要一个服务器程序来处理别人的请求。别人在浏览器输入a,浏览器告诉你,我想要看你的网站,这个时候你的服务器就得回复别人吧,你得把你的网页发送过去,这就是服务器程序干的事情。

而根据本教程的框架,访问流程大概是这样的。

访客 — nginx — uwsgi — flask

本篇教程所用的服务器端程序为flask,我个人觉得很方便。推荐教程:欢迎进入Flask大型教程项目! 讲得非常详细,我这里就不详细讲了。

————————————————————————————————

Nginx设置

其实光使用flask别人就已经可以访问你的博客了,但是我们就直接把flask运行,我们的服务器被暴露在空气中,这个时候我们需要一个反向代理来隐藏我们的服务器。同时万一我们需要用这个服务器搭建多个网站,但是公网ip又只有一个,这时nginx就起作用了

[image not found]
(图片来自网络)

中间的是我们nginx,下面的是我们的服务器,这样就很安全。

我们用 apt-get 命令来安装。

1
apt-get install nginx

然后我们要去配置它。

首先它的配置文件在/etc/nginx/下,我们cd到这个目录。如果我们不动它的配置文件nginx.conf的话,我们看看这个文件写了什么。

1
2
3
4
5
6
##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

我们看到这样一段,它include了两个目录里的文件。

而第二个目录告诉我们在这个sites-enabled中所有文件都会被读取。

好了,你可以在这里修改包含的目录,如果你不想的话,我们就直接在sites-enabled里面添加我们的网站配置文件吧。

我们在sites-enabled文件夹里面添加一个叫你站点名字的文件(其实随便什么名字,只是为了区分),我就添加了strickerlee.tk这个文件(.tk不是文件后缀,只是我的网址而已…)
然后我们在文件里打入如下代码

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name strickerlee.tk;

location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
}

好了,首先第一个设置是监听 80 端口。首先你要明白,一个服务器有很多个端口,如0.0.0.0:80 跟 0.0.0.0:81是访问两个不同的地方,而通过浏览器输入地址默认访问的是80端口,所以你需要监听80端口,这样nginx就把别人的请求听到了。而接下来的server_name可以用来区别不同的站点请求,所以你就可以搭建多个网站喽。如果你只搭建这一个网站,甚至不用有这一行。

后面就是跟uwsgi的交互了,127.0.0.1:8000的意思就是收到请求后,nginx就去找127.0.0.1:8000这个端口的uwsgi程序,把接下来的任务交给uwsgi。

对了这样做之后要重新载入我们的配置文件 /etc/init.d/nginx reload 这个可以让nginx重新载入我们的配置文件,这样我们之前的配置就生效了。

————————————————————————————————

uwsgi配置

首先我们要安装uwsgi,注意ubuntu最好不要直接apt-get install uwsgi,这样得到的uwsgi是没有python插件的,如果要继续还需要apt-get install uwsgi-plugin-python 来让它支持python,虽然这样理论上可以,但是博主用这个方法没有试成功。
最好的是 apt-get install python-dev,有了python环境,然后用pip install uwsgi来安装。

不然博主遇到的情况是报 没有 module 跟callable这样的参数这样的错。

我们用uwsgi来启动我们的python程序,使它正常运作。uwsgi的配置文件有很多种,分别有不同的格式,我们这里使用xml文件。

我们在随便一个目录下(但你要记得在哪里)建立一个config.xml(名字任取,但是后缀得是xml)

1
2
3
4
你的python服务端程序地址
run
app
127.0.0.1:81

好了,如上,里面的是模块,也就是你的服务器程序的名字,如你的是run.py那么模块为run,而callable则是你的借口对象,如果用前面贴的flask教程里面教的话就是app,因为里面执行了app.run()这个语句。

后面的就是我说的nginx处理完后把锅扔给uwsgi来处理接下来的事情,所以uwsgi必须去监听这个端口,这样就能跟nginx联系上了。你也可以更改这个ip跟端口,但是两个一定要能对上,也就是一起改。

最后一个是指用master模式来运行。

对了,还要删掉该目录下的default文件(因为它会跟你抢,nginx会导向它,我是这样理解的)。
现在有了这个配置文件,我们要去启动我们的uwsgi。

使用uwsgi -x 配置文件 来启动,注意了配置文件要加上路径,除非该配置文件是放在你现在的工作路径中的。
如 uwsgi -x ~/myBlog/config.xml 这时我的config.xml放在~/myBlog/目录下。
另外还有一个问题,在flask教程中会创建一个独立的python环境,你的flask框架啊什么的都是在这个独立环境中,而uwsgi是直接在默认python环境中运行的,所以会出现报import flask找不到flask模块的错误,博主还没有找到好的方法,所以只能在默认python环境中再安装一次这些框架,如果你有更好的建议可以告诉我。

这个时候就可以通过公网地址来访问了。注意博主提到的文中哪些是公网地址,哪些是私网地址哦。
最后唠叨一句,uwsgi向上述操作后就会一直显示其工作情况,你可以使用nohup 命令 & 来后台执行这些命令。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×