ubuntu环境下django+uwsgi+nginx项目部署,可以解决upstream prematurely closed connection的错误

之前对于django的部署写过一个csdn,但是有人说太过笼统,不够细致,这一篇关于django部署在uwsgi和nginx的详细介绍,希望可以帮助大家,

使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署

准备条件:

1.确保有一个能够用runserver正常启动的django项目,即命令:python manage.py runserver

2.项目已上传到linux,并且已部署好python环境,且已安装好项目所需的模块

Uwsgi的安装:

1.安装命令:pip3(因为我用的是python3.5.2)  install  uwsgi

2.在django项目的同一级目录下创建一个uwsgi.ini文件,创建命令:sudo vi uwsgi.ini

3.在uwsgi.ini中编辑配置信息如下:

chdir = /home/python/Desktop/django_test/fang        # 指向了项目目录,我这里的fang是项目
module = fang.wsgi                                                    # 项目名称.wsgi
master = true
processes = 10
chmod-socket = 664
vacuum = true
socket = 127.0.0.1:8001                                             # 这个是被访问地址,十分重要,因为后续的nginx访问后端链接地址就是                                                                                      这个地址,而不是http地址,必须注意,否则nignx的log就会显示以下错误:

upstream prematurely closed connection while reading response header from upstre    am, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "uwsgi://127.0.0.1:8080", host: "127.0.0.1"


http = 127.0.0.1:8080
max_execution_time = 300s
uwsgi_connect_timeout = 300s
plugin=python
proxy_http_version 1.1
proxy_set_header Connection ""
pythonpath = ~/.virtualenvs/django_py3/lib/python3.5.2/site-packages/

4.配置完成后进行这个uwsgi所在的目录下,通过命令:uwsgi --ini uwsgi.ini进行项目启动,成功后如下显示:

5.访问http地址(127.0.0.1:8080,根据自己的实际地址)可以访问到项目页面就是成功配置uwsgi和django了

如下图,我的测试项目返回了预先写好的hello1

Nginx的安装:

1.通过命令sudo apt-get install nginx来安装nginx

2.进行nginx的安装成功与否的测试,默认是80端口,本机IP是127.0.0.1

/etc/init.d/nginx start --启动

/etc/init.d/nginx stop --关闭

/etc/init.d/nginx restart --重新启动

3.配置 *.conf文件,这个文件的名字随意,我习惯于使用项目名称,也有人喜欢使用nginx.conf,我是用fang.conf这样的好处是进行项目区别,和默认的nginx的区别

(1):进行项目目录下,通过命令sudo vi fang.conf创建fang.conf文件

(2):进行fang.conf文件的配置如下:

           注意:①以下的路径,大家按照项目的实际绝对路径写就可以了

                      ②以下的upstream django的配置中的地址要和刚才在uwsgi.ini中的socket配置一致,否则就会出现我说过的那种错误,好多人出了那个错误,却不知道问题的根源在这里,尤其是初学者

    

4.通过命令sudo ln -s /home/python/Desktop/django_test/fang/fang.conf  /etc/nginx/conf.d 进行软连接,

5,通过命令:/etc/init.d/nginx restart 重启nginx服务器,然后通过80端口访问,可以得到对应的数据信息,说明配置成功了,如下图的80端口的显示:

注意::

以上配置成功了,如果你的nginx开启时出现了如下错误:

那说明fang.conf配置文件有错误,具体错误可以查看log,先进入到/var/log/nginx/目录下,然后打开log,sudo vi error.log文件产看错误原因,当然也有可以能是/etc/nginx/sites-enabled文件中进行软连接,可以进行删除里边的*.conf文件,或者con.d文件夹下的default文件没有删除,具体还需要查看log,还有其他问题,欢迎留言!

猜你喜欢

转载自blog.csdn.net/fsj818077/article/details/85243145