Nginx与django+uwsgi成功勾搭的始末(上)

先说明一下本人的环境:

Uwsgi版本:2.0.14(yum install安装)

django版本:1.10.6(pip install安装)

python版本:2.7.5(阿里云 centos 7自带)

nginx版本:1.10.2(yum install安装)

django目录:/django/logan (project就叫logan,这个目录不是mkdir!而是django-admin生成的)


本文阅读之前,我们已经实现了uwsgi的成功安装和uwsgi可以启动django,有需要看细节的朋友请查看一下:http://chenx1242.blog.51cto.com/10430133/1906056 和 http://chenx1242.blog.51cto.com/10430133/1904804 


现在我们通过yum下载了nginx,然后直接启动nginx,在浏览器输入外网网址就能看到nginx启动成功的界面,如下:

Nginx与django+uwsgi成功勾搭的始末(上)

然后我们#cp /etc/nginx/uwsgi_params /django/logan,这样目的是把uwsgi_params复制到我们的project文件夹里。然后在project里,我们创建一个nginx的配置文件,起名叫:mysite_nginx.conf,同时给这个conf文件755的权限,整个mysite_nginx.conf的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
events {
  worker_connections  1024;  ## Default: 1024
}
http{
upstream django {
    server 127.0.0.1:8001;    #用uwsgi启动的django是在8001端口
}
server {
    listen      8000;
    server_name 这里填写你的外网地址或者域名;
    charset     utf-8;
    client_max_body_size 75M;
    location /media  {
        alias /django/logan/media;    #设定mrdia的资源路径
    }
    location /static {
        alias /django/logan/static;    #设定static的资源路径
    }
    location / {
        uwsgi_pass  django;
        include     /django/logan/uwsgi_params;    #我们刚写的uwsgi_params的地址
    }
}
}


在/etc/nginx/sites-enabled目录下创建该文件的符号连接,使nginx能够使用它:#ln -s /home/www-data/www/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/


这个时候,我们下载一个图片,我们选择的图片就是金刚狼3的宣传海报,但是我们加上一点自己的记号,于是这个图片就是这样,我们在右上角加上了红色小字(如有侵权,我会删除图片):

Nginx与django+uwsgi成功勾搭的始末(上)


然后返回到服务器,在/django/logan下面mkdir 一个文件夹叫media,把这个加工过的电影海报上传到这个media文件夹里,起名叫logan.jpg。


然后我们#vim /django/logan/logan/settings.py,在这个py文件末尾加上这么一句话:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

然后运行一下#python manage.py collectstatic,就会出现

1
2
3
4
5
6
You have requested to collect static files at the destination
location as specified in your settings:
    /home/www-data/www/mysite/static
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel:

这里我们输入yes,就会出现很多copying,这个过程的意思是:Django框架在创建项目时,默认提供了admin等接口,这会将Django框架中这些接口用到的一些静态文件,js,css等文件,拷贝到项目的static目录下。


然后我们就要测试一下nginx是否与django+uwsgi勾搭成功,首先我们先测试一下我们的mysite_nginx.conf的语法问题,使用命令:#nginx -c -t /etc/nginx/sites-enabled/mysite_nginx.conf,得到效果如下:

Nginx与django+uwsgi成功勾搭的始末(上)


那么我们就#nginx -c /etc/nginx/sites-enabled/mysite_nginx.conf,通过ps -ef查看nginx进程已经启动了。然后我们#uwsgi --plugin python --http-socket :8001 --chdir /django/logan/ --wsgi-file /django/logan/logan/wsgi.py 启动django。


确定nginx和django都进程存在了之后,在浏览器的地址栏里,输入“http://外网地址:8000/media/logan.jpg”,看一下效果吧!

Nginx与django+uwsgi成功勾搭的始末(上)


OK!!!至此确定media文件已经可以正常访问。




参考资料:http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html




 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1907430