Nginx+uWSGI启动Django
在之前的几篇博客中对Django的功能做了初步实践,这里链接贴一下:
Django之--通过MVC架构的html模板展示Hello World!
到这里基本的测试暂时告一段落,但是在实际开发中是不可能用python manage.py runserver这种方式启动web server的,因此接下来测试如何使用uwsgi+nginx的方式启动Django。
一、安装uWSGI和Nginx
pip3.6 install uwsgi
yum -y install nginx
WSGI / uwsgi / uWSGI 这三个概念的区别:(引用自:http://www.cnblogs.com/alex3714/p/6538374.html)
二、为uWSGI编写配置文件
vi /etc/uwsgi.ini
[uwsgi]
chdir=/root/Django/mysite/ --即网站根目录。
module=mysite.wsgi:application --标识app位置。
static-map=/static=/root/Django/mysite/static --表示模板引用的静态文件的目录,使用图片时必须设置。
socket=192.168.1.193:8000 --用于接收nginx请求的socket,可以是文件,而且建议是文件,这里懒的改了。
master = true
vhost = true
no-site = true
workers = 2
reload-mercy = 10
vacuum = true
max-requests = 1000
limit-as = 512
buffer-size = 30000
pidfile = /var/run/uwsgi.pid
daemonize = /tmp/uwsgi.log --uWSGI日志,安装uwsgi调试时有用。
三、修改Nginx配置文件
upstream部分一般用于配置负载均衡,这里就不写了。
server {
listen 80 default_server; --表示监听80端口,我们最后也通过访问此端口来访问网站的。
listen [::]:80 default_server;
server_name 192.168.1.193; #定义server访问名,表示只处理此访问名的请求,如果不设置会默认当前第一个server域,因此不设置也行。
access_log /etc/nginx/access.log main; #nginx日志
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / { #默认请求访问
include /etc/nginx/uwsgi_params;
uwsgi_pass 192.168.1.193:8000; #请求自动转发给192.168.1.193:8000的uWSGI socket,与上面uWSGI的socket参数要一致。
index index.html index.htm;
client_max_body_size 35m;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
四、运行uWSGI和nginx
启动uwsgi和nginx:
uwsgi --ini=/etc/uwsgi.ini
service nginx start
此时你就可以通过你在urls.py定义的网址来访问页面了。但是需要注意的nginx上边我监听的是80端口,因此你只需要访问80端口就好,他会把请求全部转发到8000端口的uwsgi处理。
显示的页面如下图所示(默认的80端口):

最后:
必须要说的是不使用nginx只用uwsgi也可以实现以上的功能,但是此时你需要为uwsgi.ini配置http参数,socket参数可以省略,如果只使用uwsgi那么你可以通过http参数定义的端口访问以上页面。使用nginx的最大好处之一是实现对后端uwsgi的负载均衡,这样可以提升并发量,此外nginx对静态请求的处理能力要强过uwsgi,因此如果静态请求较多,那么可以将这部分内容用nginx处理。
补充:
最近在用uwsgi+nginx设置https访问项目时遇到了uwsgi无法启动的问题,网上大多数回答都是要么没装django(我特么智障不装django来问问题??!!)要么用了virtualenv(确实没用这玩意儿),到最后还是在十多个stackoverflow的相似话题里找到了一个合胃口的,具体网页原谅我忘记了隐约记得是非前排的、32个赞的回答。
uwsgi日志报错如下:
*** Operational MODE: preforking ***
Traceback (most recent call last):
File "./mysite/wsgi.py", line 13, in <module>
from django.core.wsgi import get_wsgi_application
ModuleNotFoundError: No module named 'django'
unable to load app 0 (mountpoint='') (callable not found or import error)
我开始以为是系统默认python命令是python2的缘故,但是改为3也是不行,后来看到那位大佬的回复后隐约找到了这个问题应该是django和uwsgi的版本更新速度不协调的问题,这个不是我自己能解决的,暂时的解决办法就是在项目的主app下的wsgi.py文件里加上如下的语句(事实上你单独import sys,然后看sys.path是包含这个路径的,只是uwsgi不知道):
import sys
sys.path.append('/usr/local/lib/python3.6/site-packages')
Nginx+uWSGI启动Django的更多相关文章
- nginx+uwsgi启动Django项目
1.安装项目环境 系统环境:ubuntu16.04 python环境:python3.5.2 Django版本:django1.11.7 nginx环境:nginx_1.10.3 虚拟环境:virtu ...
- 填坑!!!virtualenv 中 nginx + uwsgi 部署 django
一.为什么会有这篇文章 第一次接触 uwsgi 和 nginx ,这个环境搭建,踩了太多坑,现在记录下来,让后来者少走弯路. 本来在 Ubuntu14.04 上 搭建好了环境,然后到 centos7. ...
- nginx + uwsgi 部署 Django+Vue项目
nginx + uwsgi 部署 Django+Vue项目 windows 本地 DNS 解析 文件路径 C:\Windows\System32\drivers\etc 单机本地测试运行方式,调用dj ...
- CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点 以下 ...
- 使用Nginx+uWSGI部署Django项目
1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgi l ...
- nginx + uWSGI 为 django 提供高并发
django 的并发能力真的是令人担忧,这里就使用 nginx + uwsgi 提供高并发 nginx 的并发能力超高,单台并发能力过万(这个也不是绝对),在纯静态的 web 服务中更是突出其优越的地 ...
- Nginx+uWSGI+Python+Django构建必应高清壁纸站
写在前面 做这个网站的初衷是因为,每次打开必应搜索搜东西的时候都会被上面的背景图片吸引,我想必应的壁纸应该是经过专业人员精选出来的,我甚至会翻看以前的历史图片,唯一美中不足的是必应的首页只能查看最多7 ...
- uwsgi启动Django应用
uwsgi启动Django应用 uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议. WSGI / uwsgi / uWSGI 三者区别: WSGI是一种通信协议,Fl ...
- 部署 Nginx +uwsgi+centos7+django+supervisor 项目
部署CRM项目 前言 使用软件 nginx 使用nginx是为了它的反向代理功能,项目会通过Django+uWSGI+Nginx进行服务器线上部署. uWSGI python web服务器开发使用WS ...
随机推荐
- 【Storm篇】--Storm并发机制
一.前述 为了提高Storm的并行能力,通常需要设置并行. 二.具体原理 1. Storm并行分为几个方面: Worker – 进程一个Topology拓扑会包含一个或多个Worker(每个Worke ...
- java设计模式(2)---六大原则
设计模式之六大原则 这篇博客非常有意义,希望自己能够理解的基础上,在实际开发中融入这些思想,运用里面的精髓. 先列出六大原则:单一职责原则.里氏替换原则.接口隔离原则.依赖倒置原则.迪米特原则.开闭原 ...
- 【WebApi】通过HttpClient调用Web Api接口
HttpClient是一个封装好的类,它在很多语言中都有被实现,现在HttpClient最新的版本是4.5. 它支持所有的http方法,自动转向,https协议,代理服务器. 一.Api接口参数标准化 ...
- Echarts图标自适应问题(已解决)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 『最短Hamilton路径 状态压缩DP』
状压DP入门 最短Hamilton路径 Description 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamil ...
- redis 系列25 哨兵Sentinel (高可用演示 下)
一. Sentinel 高可用环境准备 1.1 Sentinel 集群环境 环境 说明 操作系统版本 CentOS 7.4.1708 IP地址 172.168.18.200 网关Gateway 1 ...
- 导航页-LeetCode专题-Python实现
LeetCode专题-Python实现之第1题:Two Sum LeetCode专题-Python实现之第7题:Reverse Integer LeetCode专题-Python实现之第9题:Pali ...
- kubernetes进阶之三:Pod
一:Pod 是什么 Pod是Kubernetes的最重要最基本的概念.它是能够被创建,调度和管理的最小部署单元.一个Pod代表集群中一个运行的进程. 二:Pod的组成 一个Pod由一个特殊的根容器Pa ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(1)- 概览
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的基本特性. ARM Cortex-M微控制器芯片厂商向来竞争激烈,具体可参看我的另一篇文章<第一 ...
- 痞子衡嵌入式:一表全搜罗常见短距离无线通信协议(Wi-Fi/Bluetooth/ZigBee/Thread...)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是常见短距离无线通信协议. 短距离无线通信是物联网的基础,随着物联网IoT的火热发展,各种短距离无线通信协议也是层出不穷,这些协议标准各有 ...