cms做的网站胡源代码,wordpress板块,怎么做seo网站关键词优化,百度指数爬虫一、Django、Nginx、uWSGI的概念、联系与区别
Django、Nginx 和 uWSGI 都是用于构建和运行 Web 应用程序的软件#xff0c;这三个软件的概念如下#xff1a;
Django#xff1a;Django 是一个基于 Python 的开源 Web 框架#xff0c;它提供了一套完整的工具和组件#xf…一、Django、Nginx、uWSGI的概念、联系与区别
Django、Nginx 和 uWSGI 都是用于构建和运行 Web 应用程序的软件这三个软件的概念如下
DjangoDjango 是一个基于 Python 的开源 Web 框架它提供了一套完整的工具和组件可以帮助开发人员快速构建 Web 应用程序。Django 遵循了 MVC模型-视图-控制器的设计模式将业务逻辑、数据模型和用户界面分离提高了代码的可读性和可维护性。Django 还支持多种数据库、缓存、模板引擎、表单验证、国际化、安全性等特性使得开发者可以专注于业务需求而不用担心底层的细节。Django 框架主要负责处理业务逻辑和生成结果给 Web 服务器再由 Web 服务器返回给浏览器。而 Web 框架和 Web 服务器之间的通信需要遵循一套规范这个规范就是 WSGI。NginxNginx 是一个高性能的 HTTP 和反向代理 Web 服务器它可以处理来自客户端例如浏览器的 HTTP 请求并将其转发给后端的 Web 应用程序或其他服务器。Nginx 具有高并发、低内存占用、负载均衡、静态文件缓存等优点可以提高 Web 应用程序的响应速度和可靠性。如果你有多个 Web 服务器你可以使用 Nginx 来做负载均衡根据某些规则将不同的请求分发到不同的 Web 服务器上去。uWSGIuWSGI 是一个实现了 WSGI 协议、uwsgi 协议和 HTTP 协议的 Web 服务器接口它可以在 Web 服务器和 Web 应用程序之间提供接口使得它们可以相互通信。WSGIWeb Server Gateway Interface是一种 Python 用于 Web 开发的标准接口它定义了 Web 服务器如何调用 Web 应用程序并将结果返回给客户端在生产环境中使用 WSGI 作为 Python Web 的服务器。uwsgi 是 uWSGI 程序实现的一个私有协议它采用二进制格式传输数据比 HTTP 协议更高效。uWSGI 是一个应用服务器它可以将客户端请求转发给 Django 等 Web 应用程序进行处理。
Django、Nginx、uWSGI 之间的联系和区别主要体现在以下几个方面
角色Django 是一个 Web 框架负责处理业务逻辑和生成响应内容Nginx 是一个 Web 服务器负责接收和转发 HTTP 请求uWSGI 是一个 Web 服务器接口负责将 HTTP 请求转换为 WSGI 请求并调用 Django 处理。协议Django 遵循 WSGI 协议与 uWSGI 进行通信Nginx 遵循 HTTP 协议与客户端和 uWSGI 进行通信uWSGI 支持多种协议包括 HTTP、uwsgi 和 WSGI。性能Django 本身不是一个高性能的 Web 框架它需要借助其他软件来提高效率Nginx 是一个高性能的 Web 服务器它可以处理大量的并发请求并缓存静态文件uWSGI 是一个高效的 Web 服务器接口它可以利用 uwsgi 协议减少数据传输的开销。配置Django 需要在 settings.py 文件中配置数据库、中间件、应用等信息Nginx 需要在 nginx.conf 文件中配置监听端口、反向代理规则、静态文件路径等信息uWSGI 需要在 uwsgi.ini 文件中配置项目路径、端口号、进程数等信息。
总结一下
NginxHTTP 服务器反向代理服务器。uWSGI应用服务器或者更精确地说是 WSGI 应用容器。DjangoWSGI 应用程序框架。
二、Nginx正向代理和反向代理的区别
正向代理和反向代理是两种不同的代理模式它们的区别主要在于代理的对象和目的不同
正向代理指客户端如浏览器通过代理服务器来访问目标服务器目的是为了隐藏客户端的真实身份或者突破访问限制。正向代理的特点是客户端知道目标服务器的地址而目标服务器不知道客户端的地址。例如如果你想访问某个国外的网站但是由于网络封锁或者速度慢你可以通过一个正向代理服务器来转发你的请求这样就可以提高访问效率或者绕过限制。反向代理指客户端如浏览器直接访问代理服务器然后代理服务器再转发请求给目标服务器目的是为了提高目标服务器的性能或者安全性。反向代理的特点是客户端不知道目标服务器的地址而目标服务器知道代理服务器的地址。例如如果你想访问某个网站但是这个网站有多台后端服务器提供服务你可以通过一个反向代理服务器来分发你的请求这样就可以实现负载均衡或者缓存等功能。
总之正向代理和反向代理的区别就是看你是站在客户端的角度还是目标服务器的角度。正向代理是为了满足客户端的需求而反向代理是为了满足目标服务器的需求。
三、Nginx与uWSGI的配置文件示例
要在 Django 应用程序中使用 Nginx 和 uWSGI你需要做以下几个步骤
安装 Nginx 和 uWSGI你可以使用 apt 或 pip 命令来安装它们
apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring # 安装Nginx依赖包
apt-get update
apt-get install nginx # 安装Nginx
nginx -v # 查看版本号systemctl start nginx # 启动Nginx
systemctl status nginx # 查看运行状态# 如果systemctl指令报错可以使用service指令启动
service nginx start
service nginx statuspip install uwsgi # 安装uWSGIsudo /etc/init.d/nginx start # 启动Nginx服务
uwsgi --ini scripts/uwsgi.ini # 启动uWSGI服务假设配置文件在scripts目录下配置 uWSGI你需要创建一个 ini 文件指定你的项目目录、模块、端口、进程、日志等信息。配置 Nginx你需要创建一个 conf 文件指定你的监听端口、服务器名、静态文件路径、反向代理规则等信息。启动 uWSGI 和 Nginx你可以使用 systemctl/service 或 uwsgi 命令来启动它们。
Nginx 配置文件的位置一般是在 /etc/nginx/nginx.conf它用来定义 Nginx 服务器的基本参数。Nginx 配置文件的语法格式是由多个块组成每个块用花括号 {} 包围每个指令用分号 ; 结束。例如一个简单的 Nginx 配置文件可以写成这样
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on;
}http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/mime.types;default_type application/octet-stream;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLEssl_prefer_server_ciphers on;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;gzip on;include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;server {listen 80; # 监听80端口作为默认服务器server_name app4007.acapp.acwing.com.cn; # 服务器名可以是域名或IP地址rewrite ^(.*)$ https://${server_name}$1 permanent;}server {listen 443 ssl; # 将80端口的HTTP请求重定向到443端口的HTTPS请求提高安全性使用SSL证书和协议来保证HTTPS请求的加密和验证server_name app4007.acapp.acwing.com.cn;ssl_certificate cert/acapp.pem;ssl_certificate_key cert/acapp.key;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;charset utf-8;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;client_max_body_size 10M;location / { # 匹配所有请求路径include /etc/nginx/uwsgi_params; # 包含uWSGI的请求参数uwsgi_pass 127.0.0.1:8000; # 转发请求给uWSGI服务器由Django应用程序处理uwsgi_read_timeout 60; # 设置uWSGI的读取超时时间}location /static { # 匹配以/static开头的请求路径将以/static开头的请求直接返回静态文件内容提高效率alias /home/asanosaki/djangoapp/static/; # 指定静态文件存放的目录}location /wss { # 匹配以/wss开头的请求路径将以/wss开头的请求转发给WebSocket服务器实现双向通信proxy_pass http://127.0.0.1:5015;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;}}
}uWSGI 配置文件的位置可以自己指定一般放在项目目录下假设我们在项目根目录下的 scripts/uwsgi.ini 文件中。uWSGI 配置文件的语法格式是由多个节组成每个节用方括号 [] 包围每个指令用等号 赋值。例如一个简单的 uWSGI 配置文件可以写成这样
[uwsgi]
socket 127.0.0.1:8000 # 用于和Nginx进行数据交互的端口
chdir /home/asanosaki/djangoapp # Django项目的根目录使用绝对路径
wsgi-file djangoapp/wsgi.py # wsgi.py在Django项目中的位置
master true # 启动主进程来管理其他进程
processes 2 # 最大开启的进程数
threads 5 # 每个进程的线程数
vacuum true # 当服务器退出的时候自动删除unix socket文件和pid文件避免在下次启动服务器时出现文件冲突或占用的问题