Nginx+UWSGI+Django配置全过程

简介:

Nginx + uwsgi + Django 安装配置


一、安装Nginx uwsgi Django


安装tengine

1
2
3
4
5
6
7
8
9
yum  install  pcre-devel -y 
 
wget http: //tengine .taobao.org /download/tengine-2 .1.1. tar .gz
 
tar  xf tengine-2.1.1. tar .gz
cd  tengine-2.1.1
. /configure
make 
make  installl


#安装位置默认在/usr/local/nginx


安装Django

1
2
3
4
wget https: //www .djangoproject.com /m/releases/1 .4 /Django-1 .4.22. tar .gz
tar  xf Django-1.4.22. tar .gz
cd  Django-1.4.22
python setup.py  install

安装uwsgi

1
pip  install  uwsgi


二、配置


1、测试uwsgi代理功能

测试文件test.py

1
2
3
4
5
6
#!/usr/bin/env python
#coding:utf8
 
def  application(env, start_response):
     start_response( '200 OK' , [( 'Content-Type' , 'text/html' )])
     return  [ "Hello World" ]

    执行命令:

1
uwsgi --http :8000 --wsgi- file  test .py

    在浏览器中访问,http://localhost:8000 如果出现Hello World 则说明uwsgi代理正常工作

2、测试uwsgi 启动django项目

创建项目:

# django-admin startproject myapp

在myapp/myapp/有一个wsgi.py文件


执行命令:

# cd myapp

# uwsgi --http :8000 --wsgi-file myapp/wsgi


在浏览器中访问http://localhost:8000

如果网页正常则一切顺利。。。。。。

说明:从客户商到 uWSGI 再到 Django 是正常的,uwsgi可以正常启动django项目


3、配置nginx + uwsgi + django

首先配置使用http的方式:

编辑配置文件/usr/local/nginx/conf/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
25
26
27
28
29
30
31
32
33
user  nginx;  #使用nginx用户
     worker_processes  2;
 
     events {
         use epoll;
         worker_connections  65535;
     }
     http {
         include       mime.types;
         default_type  application /octet-stream ;
         sendfile        on;
         tcp_nopush     on;
         keepalive_timeout  65;
         gzip   on;
 
         upstream django {
             server 127.0.0.1:8001;
         }
         server {
             listen       80;
             server_name  localhost;
             client_max_body_size 75M;
     
             location / {
                 uwsgi_pass django;
                 include uwsgi_params;
             }
             error_page   500 502 503 504   /50x .html;
             location =  /50x .html {
                 root   html;
             }
         }
      }

执行命令:

1
uwsgi --http :8001 --wsgi- file  myapp /wsgi

使用浏览器访问http://localhost 应该用正常访问,出现以下图片:

wKiom1XdTRTjyyPXAAGbKGgXMf4577.jpg

  用UNIX socket取代tcp port 

1
2
3
4
5
修改nginx.conf
     upstream django {
             #server 127.0.0.1:8001;
             server unix: ///test/myapp .sock;
         }

    来创建/test这个目录

    mkdir /test

    chown nginx:nginx /test #如果不修改用户权限,nginx无法访问此socket 无法实现代理 

    会报如下错误:

    connect() to unix:///test/myapp.sock failed (13: Permission denied)

启动:

1
uwsgi --socket  /test/myapp .sock --wsgi- file  myapp.wsgi


    到此nginx+uwsgi+django已经初步实现了,下面来为uwsgi设置一个配置文件


4、配置myapp_uwsgi.ini

在Django项目目录下创建myapp_uwsgi.ini 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[uwsgi]
uid = nginx   #使用nginx用户和组
gid = nginx
chdir =  /usr/local/myapp  #指定项目目录
module = myapp.wsgi  #加载myapp/wsgi.py这个模块
master =  true   #启动主进程。
processes = 2  #启动2个工作进程
listen = 120  #设置socket的监听队列大小(默认:100)
socket =  /test/myapp .sock  #指定socket文件
pidfile =  /var/run/uwsgi .pid  #指定pid文件
vacuum =  true  #当服务器退出的时候自动删除unix socket文件和pid文件。
enable -threads =  true  #允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程
buffer-size = 32768  #设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。
 
reload-mercy = 8  #设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
max-requests = 5000  #为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏
limit-as = 256  #通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。
harakiri = 60  #一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)
daemonize =  /var/log/myapp_uwsgi .log  # 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器


启动:

1
uwsgi --ini myapp_uwsgi.ini

测试是否正常,如果不正常,可以查看日志,排错。


到此Nginx  +  Uwsgi + Django配置完成 ,并正常使用。整个过程走了很坑,找了很文章和资料,uwsgi还有很多选项,参考了网友的文章


参考链接:

http://www.jianshu.com/p/e6ff4a28ab5a

http://heipark.iteye.com/blog/1847421




本文转自 ZhouLS 51CTO博客,原文链接:http://blog.51cto.com/zhou123/1688434


相关文章
|
6月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
554 1
|
9月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
423 1
|
6月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
366 18
|
6月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
588 17
|
7月前
|
数据建模 应用服务中间件 PHP
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
本示例演示如何通过Docker挂载同一宿主目录至Nginx与PHP容器,实现PHP项目运行环境配置。需注意PHP容器中监听地址修改为0.0.0.0:9000,并调整Nginx配置中fastcgi_pass指向正确的IP与端口。同时确保Nginx容器中/var/www/html权限正确,以避免访问问题。
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
|
8月前
|
应用服务中间件 网络安全 nginx
配置Nginx以支持Websocket连接的方法。
通过上述配置,Nginx将能够理解WebSocket协议的特殊要求,代理Websocket流量到合适的后端服务器。注意,Websocket并不是HTTP,尽管它最初是通过HTTP请求启动的连接升级,因此保证Nginx了解并能够妥善处理这种升级流程是关键。
1796 10
|
8月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
419 1
|
7月前
|
Ubuntu 应用服务中间件 Linux
在Ubuntu上配置Nginx实现开机自启功能
至此,Nginx应该已经被正确地设置为开机自启。在Ubuntu中利用 `systemd`对服务进行管理是一种高效的方式,为系统管理员提供了强大的服务管理能力,包括但不限于启动、停止、重启服务,以及配置服务的开机自启动。通过这些简洁的命令,即使是对Linux不太熟悉的用户也能轻松地进行配置。
356 0
|
Python 安全
Django配置介绍
Django的配置文件settings.py包含了基本上所有的Django安装的配置,这里解释下配置是如何生效的,还有有哪些可用的配置。 基础 配置文件是一个Python的模块,然后里面有一些模块级的变量。
|
9月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
421 1