nginx、uWSGI、django之间的具体联系

前言

看了网上很多的nginx、uWSGI、django服务器框架搭建配置过程,但是绝大多数都只是说说搭建过程,并没有说过之间具体的联系。

三者之间的区别与联系

uwsgi、wsgi和nginx的区别和关系
参考博文写的特别棒,浅显易懂。在这说说我自己的理解就是,通过网页端实现对浏览器的访问,需要两部分,web服务器与web框架
1.django是一个web框架,关于html文件的编辑,文件路由的设置,数据库的管理主要在django框架下实现的。
2.uWSGI是web服务器,uWSGI服务器实现了WSGI协议,并通过该协议与django"通信"。其实在创建django项目的时候,在 ‘项目名’/‘项目名’/ 下有一个wsgi.py文件,本人猜测,该文件是实现WSGI协议的一个python文件,因为在单独启动django项目,没有启动uWSGI的时候,我们仍然是可以通过浏览器访问到django框架下的html页面的。为什么要使用uWSGI服务器呢? 就是因为,django框架自己实现WSGI协议的性能太差了,使用uWSGI服务器来提高性能。
(个人直观感觉,性能主要体现在访问一个网页的请求时间与失败率)
3.nginx是一个代理服务器,举个例子就是,比如三十个请求同时访问一个网站,三十个请求同时响应到了nginx服务器这里,nginx服务器就这三十个请求分配给后台的三台服务器,每一台处理十个请求,后台的三台服务器就是前边提到的uWSGI+django 架构。(非专业的、浅显的理解)

nginx、uWSGI、django启动过程的联系

从django开始说起,

#创建django项目
django-admin.py startproject HelloWorld
#进入项目目录
cd HelloWorld
#修改 setting.py,允许其他主机访问
ALLOWED_HOSTS = [‘*’]
#启动 django 项目
python3 manage.py runserver 0.0.0.0:8000

这样就可以打开浏览器,输入127.0.0.1:8000 访问django起始页面,0.0.0.0:8000代表本机的8000端口,在浏览器中127.0.0.1即是代表了本机。

配置uWSGI服务器,启动该服务器其实很简单,只要创建并配置好uwsgi.ini文件,执行启动命令即可。

#django项目简要路径
HelloWorld
| – manager.py
| – HelloWorld
| – | – settings.py
| – | – urls.py
| – | – wsgi.py
| – script (创建)
| – | – uwsgi.ini (创建)
| – | – uwsgi.log (创建)
| – | – nginx_access.log (创建)
| – | – nginx_error.log (创建)

下面是我参考别人文章的uwsgi.ini文件的配置,在这里主要有两个地方,一个是uWSGI服务器与django框架的联系,另一个是对uWSGI服务器的访问端口。

uwsig使用配置文件启动

[uwsgi]

#项目目录

chdir=/home/st/Django/HelloWorld/

#指定项目的application

module=HelloWorld.HelloWorld.wsgi:application

#指定sock的文件路径,这个文件与django建立联系,该文件在django项目中原本不存在,启动uWSGI之后,会自动生成

socket=/home/st/Django/HelloWorld/HelloWorld.sock
#进程个数
workers=5
pidfile=/home/st/Django/HelloWorld/script/uwsgi.pid

#指定IP端口
#http=0.0.0.0:8010

#指定静态文件
static-map=/static=/home/st/Django/HelloWorld/static
#启动uwsgi的用户名和用户组
uid=root
gid=root
#启用主进程
master=true
#自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
#序列化接受的内容,如果可能的话
thunder-lock=true
#启用线程
enable-threads=true
#设置自中断时间
harakiri=30
#设置缓冲
post-buffering=8192
#设置日志目录
daemonize=/home/st/Django/HelloWorld/script/uwsgi.log

#connect to django !!!

wsgi-file=/home/st/Django/HelloWorld/HelloWorld/wsgi.py

加粗部分说明了配置的要点,一是指定目录地址,一是指定uWSGI的访问端口,另一个是uWSGI与django之间的联系。之后启动 uWSGI服务器,在—目录中执行,

uwsgi --ini uwsgi.ini

在这对于uWSGI服务器的访问端口设置成了127.0.0.1:8010,即是在浏览器中输入127.0.0.1:8010就可以访问到,django的起始页面。

配置nginx代理服务器,该服务器的启动也很简单,配置好nginx.conf启动文件,执行命令即可
  server {
 		# **访问nginx的端口**
 		isten 8888;
  		server_name localhost;
  		# charset     utf-8;
  		access_log      /home/st/Django/HelloWorld/script/nginx_access.log;
  		error_log       /home/st/Django/HelloWorld/script/nginx_error.log;
  		client_max_body_size 75M;
  		location / {
  		# 导入一个Nginx模块他是用来和uWSGI进行通讯的
  		include     /usr/local/nginx/uwsgi_params;
   		# uwsgi_pass  127.0.0.1:8010;                     
  		# **从nginx到uwsgi的连接文件**
  		uwsgi_pass unix:/home/st/Django/HelloWorld/HelloWorld.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给ta
  		}
  		# 指定静态文件路径
  		location /static {
   		alias /home/st/Django/HelloWorld/static;
  		}
  }

说明:nginx启动后会一直监听着8888端口,当有请求发起时,它将转到HelloWorld.sock文件中所设置的地址去,也即是uWSGI中的8010端口,再进入django框架中的html页面。直接设置 uwsgi_pass 127.0.0.1:8010; 应该也是可行的,不过我自己一直没有成功,尚不知问题在哪,没多余时间去尝试了。

#通过默认的nginx.conf启动
sudo nginx
#自定义的.conf文件启动
sudo nginx -c xxx/xxx/***.conf

在nginx.ini文件中,有两个要点,一是设置针对nginx的一个访问端口,另一个是设置nginx访问端口代理的端口,也就是从哪个端口进入nginx,之后去向哪个端口。在很多的文章教程中都说了很多的在nginx.conf中添加server模块,但是并没有详细说明要点。

要点说明1,启动uWSGI服务器之后

对于django起始页面的访问有两种方式,127.0.0.1:8000与127.0.0.1:8010,8000端口是通过django进行访问的,8010端口是通过uWSGI服务器进行访问的。想要通过8000端口进行访问,需要启动django(python3 manage.py runserver 0.0.0.0:8000);想要通过8010端口进行访问,需要启动uWSGI(uwsgi --ini uwsgi.ini),此时不管djangou是否启动,8010端口都可以正常访问。

要点说明2,启动nginx服务器之后

对于django起始页面的访问有三种方式,127.0.0.1:8000、127.0.0.1:8010、127.0.0.1:8888 ,8000是通过django进行访问的,前提是django服务没有关闭。8010是通过uWSGI进行访问的。8888是通过nginx进行访问的。
对服务器进行访问,需要实现WSGI协议。通过8888端口访问,启动nginx,之前还需要启动uWSGI,django不需要启动,因为WSGI协议由uWSGI实现了。

相关命令
django

#创建
django-admin.py startproject HelloWorld
#启动
python3 manager.py runserver 0.0.0.0:8000

uwsgi

#启动
uwsgi --ini uwsgi.ini
#停止
uwsgi --stop uwsgi.pid

nginx

#启动
sudo nginx
#停止
sudo nginx -s stop

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于在 OpenEuler 上部署 Django 应用程序,您可以使用 Nginx 作为反向代理服务器,并使用 uWSGI 作为 Django 应用程序的应用服务器。 下面是大致的步骤: 1. 首先,确保您已经在 OpenEuler 上安装了 NginxuWSGI。您可以使用适当的包管理器来安装它们,例如使用 `yum` 命令:`sudo yum install nginx uwsgi uwsgi-plugin-python3`。 2. 在 Django 项目的根目录中创建一个 uWSGI 配置文件,例如 `myapp_uwsgi.ini`,并配置以下内容: ``` [uwsgi] http-timeout = 86400 chdir = /path/to/your/django/project module = myproject.wsgi:application env = DJANGO_SETTINGS_MODULE=myproject.settings master = true processes = 4 threads = 2 socket = 127.0.0.1:8000 vacuum = true ``` 请确保将 `/path/to/your/django/project` 替换为您的 Django 项目的实际路径。 3. 创建一个 Nginx 配置文件,例如 `myapp_nginx.conf`,并配置以下内容: ``` server { listen 80; server_name your_domain_name; location / { uwsgi_pass 127.0.0.1:8000; include uwsgi_params; } location /static/ { alias /path/to/your/django/static/files; } location /media/ { alias /path/to/your/django/media/files; } } ``` 请将 `your_domain_name` 替换为您的域名,并将 `/path/to/your/django/static/files` 和 `/path/to/your/django/media/files` 替换为您的 Django 项目中静态文件和媒体文件的实际路径。 4. 将 uWSGIDjango 项目关联起来,运行以下命令启动 uWSGI 服务器: ``` uwsgi --ini /path/to/your/uwsgi/config/myapp_uwsgi.ini ``` 请将 `/path/to/your/uwsgi/config/myapp_uwsgi.ini` 替换为您的 uWSGI 配置文件的实际路径。 5. 将 Nginx 配置文件链接到 Nginx 的配置目录中: ``` sudo ln -s /path/to/your/nginx/config/myapp_nginx.conf /etc/nginx/conf.d/ ``` 请将 `/path/to/your/nginx/config/myapp_nginx.conf` 替换为您的 Nginx 配置文件的实际路径。 6. 重新加载 Nginx 配置: ``` sudo systemctl reload nginx ``` 这样,您的 Django 应用程序应该已经成功部署在 OpenEuler 上,并可以通过您的域名进行访问。 希望这些步骤对您有帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值