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 ...
随机推荐
- the python challenge闯关记录(0-8)
0 第零关 2**38 = 274877906944 下一关的url:http://www.pythonchallenge.com/pc/def/274877906944.html 1 第一关 移位计 ...
- [Abp 源码分析]五、系统设置
0.简要介绍 Abp 本身有两种设置,一种就是 上一篇文章 所介绍的模块配置 Configuration,该配置主要用于一些复杂的数据类型设置,不仅仅是字符串,也有可能是一些 C# 运行时的一些变量. ...
- 基于 dubbo 的分布式架构
前言 现在越来越多的互联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的 SSM 项目来让第一次接触的同学能快速上手. 浅谈分布式架构 分布式架构单看这个名字 ...
- 微信小程序代码构成
一.小程序代码 app.json 是当前小程序的全局配置,包括了小程序的所有页面路径.界面表现.网络超时时间.底部tab等. { "pages":[ "pages/ind ...
- Android中,粗暴的方式,修改字体
序 在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究. 那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我 ...
- 手工在Docker for mac上安装Kubernetes
此文发布时间比较早,当前已经有更好的办法,请参考网页: https://github.com/AliyunContainerService/k8s-for-docker-desktop 以下为原文 通 ...
- (二)通过fork编写一个简单的并发服务器
概述 那么最简单的服务端并发处理客户端请求就是,父进程用监听套接字监听,当有连接过来时那么监听套接字就变成了已连接套接字(源和目的的IP和端口都包含了),这时候就可以和客户端通信,但此时其他客户端无法 ...
- Typora - Markdown 语法说明
Typora 是 Windows 下最好的 Markdown 编辑器!不接受反驳~ 导图 快捷键标题:Ctrl + 数字 Ctrl + 123456 代表 H1-H6 级标题Ctrl + 0 恢复普通 ...
- springboot情操陶冶-web配置(二)
承接前文springboot情操陶冶-web配置(一),在分析mvc的配置之前先了解下其默认的错误界面是如何显示的 404界面 springboot有个比较有趣的配置server.error.whit ...
- (摘)Entity Framework Core 2.1带来更好的SQL语句生成方案
微软发布了Entity Framework Core2.1,为EF开发者带来了很多期待已久的特性.EF Core 2.1增加了对SQL GROUP BY的支持,支持延迟加载和数据种子等. EF Cor ...