先说说项目的是干啥的
本来咱们玩web只需要django就能建立一个正儿八经带server的服务器,不过django自带的只能支持单并发的访问,而且效果不是特别好。
这个时候就用到了 nginx ,关于nginx网上的介绍很多我就不多说了,只需要知道这玩意是一个服务器框架,用了它相当于tomcat一样自带一个服务器。
不过由于nginx以及一些其他原因,静态资源的访问不是特别好,这个时候就需要用到uwsgi这个框架。
最后在实际生产过程中,现在大部分都是使用https访问,所以最后在nginx中配置好了SSL证书,我们就可以愉快的用https访问,而且环境搭建好了和我们的真正逻辑代码是解耦的,所以一次搭建,终身爽快。
下面我会仔细说名安装和配置过程 环境是(ubuntu + nginx 1.103 + uwsgi 最新版 + django 2.1.3 +python 3.5)
安装nginx:
再控制台中输入即可按章nginx
~$ sudo apt-get install nginx #安装
但是这种安装方法可能会出现问题,不过都是小问题,具体百度一下就行了
跟着命令好一串撸下来,我相信你已经装好了nginx。
然后我们需要测试一下。
我们需要在 ubuntu 中找到这个 etc/nginx/nginx.conf 文件,这个文件是nginx的配置文件。
nginx.conf 中又一个 http{} 里面可以配置若干个 server{} 。其目的就是监听http访问中的若干端口,这里我们需要添加一个server{}如下:
server {
listen 8000; # 修改端口号
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
这段的意思就是监听8000 端口。
接下来配置好了 我们使用
nginx -t 命令检测一下是否配置正确
如果没问题则直接在命令行输入 nginx 即可启用nginx。反正我用的这个版本是这样直接启动。
这个时候我们直接在浏览器输入127.0.0.1:8000 来测试nginx是否配置成功
如果成功则会出现
image.png
安装uwsgi
咱们先把nginx给停掉 使用命令 nginx -s stop
uwsgi 是python自带的包 所以安装起来非常方便 只需要
pip install uwsgi 即可
咱们测试一下 uwsgi是否可用
随便找个位置建立一个文件 test.py
里面的代码是
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
在这个目录下运行命令
uwsgi --http :8000 --wsgi-file test.py
意思是使用组建 uwsgi 监听端口8000 并且运行这个test.py文件,如果正常,会在浏览器访问127.0.0.1:8000时出现:
Hello World
然后就是django 这个也是python的包 我默认你已经有了一个基于django可以运行的项目。
把uwsgi和django结合起来
这个时候 我们就需要用到 uwsgi的一种配置文件。我们随便找个目录新建一个demo.ini文件
文件内容如下:
[uwsgi]
socket = 0.0.0.0:8000
#真实服务的端口 这个8000端口 是把nginx 和django串起来的 并不是实际浏览器访问的接口
chdir = /root/englishDemo/demoWB/ #我们django项目的根目录
# wsgi.py文件在项目中的位置 这个文件每个django项目都有
module = demoWB.wsgi
# process-related settings
# master
master = true
# 运行的进程数
processes = 4
vacuum = true
这个配置文件还有很多内容,读者有需要可以自行查阅。
现在咱们只要运行这个配置文件
uwsgi --ini demo.ini
即可运行django程序了。是不是很方便,不用runserve 每次指定域名和端口号
相当于是uwsgi代替我们执行
把nginx 和 uwsgi 结合起来
这一部分也很简单 我们只需要修改nginx中在安装过程中提到的配置文件即可
etc/nginx/nginx.conf
打开这个文件后,我们在原有的基础上修改http{}中的内容
upstream django {
server 0.0.0.0:8000; #web的socket端口
}
server{
listen 80;
access_log /root/log.txt; # Nginx日志配置
server_name www.asdasasd.com; #这里输入你自己的网址
charset utf-8;
error_page 404 /404.html; # 错误页面
error_page 500 502 503 504 /50x.html; # 错误页面
location / { # 这个location就和咱们Django的url(r'^admin/', admin.site.urls),
root /root/englishDemo/demoWB; #django项目的根目录
include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
uwsgi_pass django; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
}
}
重启nginx的时候就可以和uwsgi结合起来了。
nginx配置SSL证书
这个证书可以从很多地方获得。我在这里举例从阿里云上
先选择网盾 SSL证书
image.png
选择免费版本
image.png
购买之后审核完成, 会又下载连接,下载之后是 .pem 和 .key的两个文件。
咱们需要通过这两个文件配置nginx。
还是打开刚刚的 nginx.conf配置文件。修改为
server {
listen 443; #这里需要443 为https 默认的端口
access_log /root/log.txt; # Nginx日志配置
server_name www.xxxxxxxx.com; #这里是你的域名
ssl on;
root html;
index index.html index.htm;
ssl_certificate /etc/nginx/cert/xxxxxxxx.pem; #你的pem 前面的目录可以自己随便建立
ssl_certificate_key /etc/nginx/cert/xxxxxxxx.key; #你的key 前面的目录可以自己随便建立
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /root/englishDemo/demoWB;
include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
uwsgi_pass django; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
}
}
重启一下nginx即可
这一波操作完成
网友评论