django(三)django配置支持nginx访问

简介: 我正在参加「掘金·启航计划」VUE3.0版本发布,按照之前的计划,博客前端的页面打算使用VUE3.0重新编写。目前后端使用的是PHP的web框架thinkphp5.0,新版的博客后端打算使用python的web框架django。目前我的服务器使用的环境是lnmp(centos+nginx+mariadb+php),因此运行django框架的时候,我选择使用nginx + uwsgi我的服务器使用的是阿里云的centos7.8运行原理如下图所示:一:技术扩展WSGIWSGI 是 Web Server Gateway Interface 的缩写。以层的角度来看,WSGI 所在层的位置低

我正在参加「掘金·启航计划」

VUE3.0版本发布,按照之前的计划,博客前端的页面打算使用VUE3.0重新编写。目前后端使用的是PHP的web框架thinkphp5.0,新版的博客后端打算使用python的web框架django。

目前我的服务器使用的环境是lnmp(centos+nginx+mariadb+php),因此运行django框架的时候,我选择使用nginx + uwsgi

我的服务器使用的是阿里云的centos7.8

运行原理如下图所示:

image.png

image.png

一:技术扩展WSGI

WSGI 是 Web Server Gateway Interface 的缩写。以层的角度来看,WSGI 所在层的位置低于 CGI。但与 CGI 不同的是 WSGI 具有很强的伸缩性且能运行于多线程或多进程的环境下,这是因为 WSGI 只是一份标准并没有定义如何去实现。实际上 WSGI 并非 CGI,因为其位于 web 应用程序与 web 服务器之间,而 web 服务器可以是 CGI。可以理解为是 Python 内置的一个测试 web 服务器。

uWSGI 是一个Web服务器,它实现了 WSGI 协议、uwsgi、http 等协议。Nginx 中HttpUwsgiModule 的作用是与 uWSGI 服务器进行交换。WSGI 是一种 Web 服务器网关接口。比如把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用。

二、uWSGI 安装配置

安装

复制代码

sudo pip3 install uwsgi

测试

创建 test.py 文件

python

复制代码

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
return [b'Hello World']

通过 uWSGI 运行该文件

bash

复制代码

uwsgi --http :8000 --wsgi-file test.py # 这里需要注意确保你的8000端口是对外开放的

在浏览器中输入  你的服务器ip:8000,出现 “Hello World”表示安装成功。

三:Nginx、uWSGI、Django 之间的通信

安装Django框架请移步《django(一)ubuntu18.04安装框架

1:配置 Django 和 uWSGI

我的项目 目录是:

bash

复制代码

/usr/local/download/django-master/helloworld

在当前目录下创建文件uwsgi.ini

ini

复制代码

[uwsgi]
#套接字方式--使用nginx连接时使用,后面是Django程序所在服务器地址
socket = :8000
#http通信方式--直接做web服务器使用,后面是Django程序所在服务器地址
# http=192.168.0.214:8000
#配置当前工作的项目目录
chdir = /usr/share/nginx/html/moolsPython
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file = moolsPython/wsgi.py
# 进程数
processes = 8
# 线程数
threads = 2
# 开启主进程模式--uwsgi服务器的角色   uwsgi做主进程,关闭该进程其他相关进程也会被杀掉
master = True
# 存放进程编号的文件
pidfile = uwsgi.pid
# 后台运行,并输出日志,后面是日志文件位置,后台运行时看不见终端所以只能查看日志
daemonize = uwsgi.log
module = moolsPython.wsgi

这个配置,其实就相当于在上一小节中通过 wsgi 命令,后面跟一堆参数的方式,给文件化了。

socket: 指定项目执行的端口号。

chdir: 指定项目的目录。

module: module = hello.wsgi 可以这么来理解。对于 uwsgi.ini 文件而言,与它同级目录有一个 helloworld目录,这个目录下有一个 wsgi.py 文件。

此时 Django 项目的目录文件结构如下:

markdown

复制代码

helloworld/
├── manage.py
├── helloworld
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   └── settings.cpython-36.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── uwsgi.ini

接下来,通过 uwsgi 命令读取 uwsgi.ini 文件启动项目(在项目根目录下运行)

css

复制代码

uwsgi --ini uwsgi.ini

运行结果:

scss

复制代码

setup@labideas-data:~/myweb$ uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
*** Starting uWSGI 2.0.17 (64bit) on [Tue Mar 20 11:11:30 2018] ***
compiled with version: 5.4.0 20160609 on 19 March 2018 09:13:12
os: Linux-4.4.0-105-generic #128-Ubuntu SMP Thu Dec 14 12:42:11 UTC 2017
nodename: labideas-data
machine: x86_64
clock source: unix
detected number of CPU cores: 4
current working directory: /home/setup/hello
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/setup/hello
your processes number limit is 64049
your memory page size is 4096 bytes
detected max file descriptor number: 65535
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8888 fd 3
Python version: 3.5.2 (default, Nov 23 2017, 16:37:01)  [GCC 5.4.0 20160609]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x1f73aa0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 364520 bytes (355 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x1f73aa0 pid: 7097 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7097)
spawned uWSGI worker 1 (pid: 7099, cores: 1)
spawned uWSGI worker 2 (pid: 7100, cores: 1)
spawned uWSGI worker 3 (pid: 7101, cores: 1)
spawned uWSGI worker 4 (pid: 7102, cores: 1)

注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。

2: 配置 Nginx

我的nginx配置文件在/usr/local/nginx/conf目录下。

ini

复制代码

server {
    listen          80; #  指定的是 nginx 代理 uwsgi 对外的端口号。
    server_name     moolspy.mools.net  # 网站域名
    charset         UTF-8;
    # access_log      /var/log/nginx/myweb_access.log;
    # error_log       /var/log/nginx/myweb_error.log;
    client_max_body_size 75M;
    location / {
        include uwsgi_params; # 配置nginx支持uwsgi
        uwsgi_pass 127.0.0.1:8000; # 指的是本机 IP 和端口号,并且要与 helloworld目录下uwsgi.ini 配置文件中的 IP 和端口号必须保持一致。
        uwsgi_connect_timeout 60s; # 链接时间  最大不能超过75s
        uwsgi_read_timeout 120s; # nginx等待uwsgi进程发送响应数据的超时时间 默认 60s
        uwsgi_send_timeout 120s; # nginx向uwsgi进程发送请求的超时时间 默认 60s
    }  
}

重新启动nginx。

在django根目录下运行:

css

复制代码

uwsgi --ini uwsgi.ini

在浏览器中访问你刚刚在nginx中配置的域名,出现如下图所示:说明配置成功:

image.png

3:设置uWSGI开机自启

打开 sudo vi /etc/rc.local 将

arduino

复制代码

uwsgi --ini /home/setup/myweb/uwsgi.ini &

添加到文件中

注意要添加到 exit 0 之前,& 表示该服务是在后台执行。

4:更新代码没有效果

Django + uwsgi + nginx 这个组合在正常访问是没有问题的,但是在你更新完代码之后他并不会立即生效。你需要kill掉uwsgi所有的进程,再重新启动uwsgi才可以。

bash

复制代码

killall -9 uwsgi # 杀死uwsgi进程
uwsgi -i uwsgi.ini & # 重启uwsgi

有好的建议,请在下方输入你的评论。

目录
相关文章
|
2月前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
2月前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
277 0
|
14天前
|
存储 负载均衡 中间件
Nginx反向代理配置详解,图文全面总结,建议收藏
Nginx 是大型架构必备中间件,也是大厂喜欢考察的内容,必知必会。本篇全面详解 Nginx 反向代理及配置,建议收藏。
Nginx反向代理配置详解,图文全面总结,建议收藏
|
27天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
130 1
nginx配置反向代理404问题
|
10天前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
34 3
|
10天前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
48 3
|
12天前
|
应用服务中间件 网络安全 nginx
轻松上手Nginx Proxy Manager:安装、配置与实战
Nginx Proxy Manager (NPM) 是一款基于 Nginx 的反向代理管理工具,提供直观的 Web 界面,方便用户配置和管理反向代理、SSL 证书等。本文档介绍了 NPM 的安装步骤,包括 Docker 和 Docker Compose 的安装、Docker Compose 文件的创建与配置、启动服务、访问 Web 管理界面、基本使用方法以及如何申请和配置 SSL 证书,帮助用户快速上手 NPM。
55 1
|
23天前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
|
1月前
|
缓存 负载均衡 应用服务中间件
Nginx配置
【10月更文挑战第22天】在实际配置 Nginx 时,需要根据具体的需求和环境进行调整和优化。同时,还需要注意配置文件的语法正确性和安全性。
47 7
|
2月前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。