django-release-debug-apache-mod-wsgi-原理解析

文章目录

    • 1.django-release
    • 2.mod_wsgi
      • 2.1.winnt模式
      • 2.2.worker模式
      • 2.3.preforker模式
      • 2.4.小节
    • 3.apache配置参数
      • 3.1.全局参数
      • 3.2.主机参数
    • 4.总结

1.django-release

由于django处理静态资源的效率偏低,顾在release模式不支持静态资源,这种情况需要在apache下配置静态资源路径。在Apache24\conf目录下httpd.conf文件中,添加映射,如下所示:

#设置静态和媒体文件路径
Alias /media C:/ZLComputeServer/Apache24/htdocs/backend/media
<Directory C:/ZLComputeServer/Apache24/htdocs/backend/media> AllowOverride NoneOptions None Require all granted 
</Directory>

2.mod_wsgi

mod_wsgi作为apache的扩展模块,参数配置在主程序配置文件httpd.conf中修改即可,三种模式,参数设置。

2.1.winnt模式

设置processes=1,但是multiprocess为false:

WSGIDaemonProcess example threads=25
wsgi.multithread	True
wsgi.multiprocess	False

如果显式地指出processes为1那么:

WSGIDaemonProcess example processes=1 threads=25
wsgi.multithread	True
wsgi.multiprocess	True

2.2.worker模式

WSGIDaemonProcess example processes=2 threads=25
wsgi.multithread	True
wsgi.multiprocess	True

2.3.preforker模式

WSGIDaemonProcess example processes=5 threads=1
wsgi.multithread	False
wsgi.multiprocess	True

后台模式由于是与apache进程分离了,内存独立,而且可以独立重启,不会影响apache的进程,如果你有多个项目(django),可以选择建立多个后台或者共同使用一个后台。比如在同一个VirtualHost里面,不同的path对应不同的django项目,可以同时使用一个Daemon:

WSGIDaemonProcess default processes=1 threads=1 display-name=%{GROUP} 
WSGIProcessGroup default 
WSGIScriptAlias /project1 "/home/website/project1.wsgi" 
WSGIScriptAlias /project2 "/home/website/project2.wsgi"

也可以把不同的项目分开,分开使用不同的后台,这样开销变大,但就不会耦合在一起了。display-name是后台进程的名字,这样方便重启对应的进程,而不需要全部杀掉。

WSGIDaemonProcess site1 processes=1 threads=1 display-name=%{GROUP} 
WSGIDaemonProcess site2 processes=1 threads=1 display-name=%{GROUP} 
<Location "/project1">
WSGIProcessGroup site1
</Location>
WSGIScriptAlias /project1 "/home/website/project1.wsgi"<Location "/project1">
WSGIProcessGroup site2
</Location>
WSGIScriptAlias /project2 "/home/website/project2.wsgi"

2.4.小节

对于django 1.0以下的版本,由于官方认定不是线程安全的,所以建议使用多进程单线程模式。

processes=n threads=1

对于django 1.0以后,就可以放心的使用多进程多线程模式。

processes=2 threads=64

这样子性能会更好。

3.apache配置参数

介绍apache常用参数设置,如下内容:

1)Global Environment—全局环境配置,决定Apache服务器的全局参数
2)Main server configuration—主服务配置,相当于是Apache中的默认Web站点,如果我们的服务器中只有一个站点,那么就只需在这里配置就可以。
3)Virtual Hosts—虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚拟主机之后,Main Server就不能使用。

3.1.全局参数

在出现错误页的时候是否显示服务器操作系统的名称,ServerTokens Prod为不显示。

ServerTokens OS

用于指定Apache的运行目录,服务启动之后自动将目录改变为当前目录,在后面使用到的所有相对路径都相对这个目录。

ServerRoot "/etc/httpd"

记录httpd守护进程的pid号码文件,这是系统识别一个进程的方法,系统中httpd进程可以有多个,但这个PID对应的进程是其它进程的父进程。

PidFile run/httpd.pid

服务器与客户端断开的时间,单位秒。

Timeout 60

是否持续连接(因为每次连接都得三次握手,如果是访问量不大,建议打开此项,如果网站访问量比较大关闭此项比较好),修改为:KeepAlive On 表示允许程序性联机。

KeepAlive Off

表示一个连接的最大请求数。

MaxKeepAliveRequests 100

服务器在持久连接上等待后续请求的时间量。Apache将在关闭连接之前等待后续请求的秒数。将KeepAliveTimeout设置为高值可能会在负载很大的服务器上造成性能问题。超时越高,就会有越多的服务器进程被占用,等待与空闲客户机的连接。

KeepAliveTimeout 15

系统默认的模块,表示为每个访问启动一个进程(即当有多个连接公用一个进程的时候,在同一时刻只能有一个获得服务)。StartServer开始服务时启动8个进程,最小空闲5个进程,最多空闲20个进程。MaxClients限制同一时刻客户端的最大连接请求数量超过的要进入等候队列。MaxRequestsPerChild每个进程生存期内允许服务的最大请求数量,0表示永不结束。

<IfModule prefork.c> 
StartServers      8 
MinSpareServers    5 
MaxSpareServers  20 
ServerLimit      256 
MaxClients      256 
MaxRequestsPerChild  4000 
</IfModule>

Apache配置线程访问,即每对WEB服务访问启动一个线程,这样对内存占用率比较小。ServerLimit服务器允许配置进程数的上限。ThreadLimit每个子进程可能配置的线程上限。StartServers启动两个httpd进程。MaxClients同时最多能发起250个访问,超过的要进入队列等待,其大小有ServerLimit和ThreadsPerChild的乘积决定。ThreadsPerChild每个子进程生存期间常驻执行线程数,子线程建立之后将不再增加。MaxRequestsPerChild每个进程启动的最大线程数,如达到限制数时进程将结束,如置为0则子线程永不结束。

<IfModule worker.c> 
StartServers        4 
MaxClients        300 
MinSpareThreads    25 
MaxSpareThreads    75 
ThreadsPerChild    25 
MaxRequestsPerChild  0 
</IfModule>

监听的端口,如有多块网卡,默认监听所有网卡。

Listen 80

启动时加载的模块。

LoadModule auth_basic_module modules/mod_auth_basic.so 
...... 
LoadModule version_module modules/mod_version.so

加载配置文件。

Include conf.d/*.conf

启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全。

User apache 
Group apache

3.2.主机参数

ServerAdmin root@localhost #管理员的邮箱
ServerName www.example.com:80 #域名端口
UseCanonicalName Off #规范名称
DocumentRoot "/var/www/html" #网页文件存放的目录

根目录的权限设置

<Directory /> Options FollowSymLinks AllowOverride None 
</Directory>

对/var/www/html目录的一个权限的设置,options中Indexes表示当网页不存在的时候允许索引显示目录中的文件,FollowSymLinks是否允许访问符号链接文件。有的选项有ExecCGI表是否使用CGI,如Options Includes ExecCGI FollowSymLinks表示允许服务器执行CGI及SSI,禁止列出目录。SymLinksOwnerMatch表示当符号链接的文件和目标文件为同一用户拥有时才允许访问。AllowOverrideNone表示不允许这个目录下的访问控制文件来改变这里的配置,这也意味着不用查看这个目录下的访问控制文件,修改为:AllowOverride All 表示允许.htaccess。Order对页面的访问控制顺序后面的一项是默认选项,如allow,deny则默认是deny,Allow from all表示允许所有的用户,通过和上一项结合可以控制对网站的访问控制。

<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all 
</Directory>

是否允许用户访问其它目录,默认是不允许。

<IfModule mod_userdir.c> UserDir disabled 
</IfModule>

如果允许访问用户其它目录中的网页文件,则取消以上注释,并对其中进行修改。

<Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> 
</Directory>

指定所要访问的主页的默认名称,默认首页文件名为index.html。

DirectoryIndex index.html index.html.var

定义每个目录下的访问控制文件名,缺省为.htaccess。

AccessFileName .htaccess

控制不让web上的用户来查看.htpasswd和.htaccess这两个文件。

<Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All 
</Files>

定义一些不在DocumentRoot下的文件,而可以将其映射到网页根目录中,这也是访问其他目录的一种方法,但在声明的时候切记目录后面加”/”

<Directory "/var/www/icons"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all 
</Directory>

4.总结

apache模块众多,是一款稳定的开源web服务器,其可以配置多进程和多线程,拥有广泛的市场。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/219621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极新AIGC行业峰会 | 圆桌对话:探索中国AGI迭代之路

“AGI正处在一个巨大的研发范式革命的起点。” 整理 | 周梦婕 编辑 | 小白 出品&#xff5c;极新 2023年11月28日&#xff0c;极新AIGC行业峰会在北京东升国际科学院拉开帷幕&#xff0c;峰会上午的圆桌环节由凡卓资本合伙人王梦菲主持&#xff0c;深势科技战略副总裁何雯…

SpringCache使用配置

项目中引入SpringCache pom文件引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency>配置文件指定缓存类型 spring:cache:type: redis启动类开启缓存注解…

TikTok卖家攻略!如何保证账号安全和多账号防关联?

TIKTOK的火爆程度&#xff0c;大家都有目共睹。随之而来的是越来越多的人在上面开展在线业务。作为TikTok的卖家&#xff0c;保障账号安全和防止多账号关联是非常重要的。在这篇博客文章中&#xff0c;我们将分享一些关于如何保护TikTok账号安全和防止多账号关联的实用建议。 …

Spring Boot 3.x.x Spring Security 6.x.x @PreAuthorize 失效

Spring Boot 3.x.x Spring Security 6.x.x PreAuthorize 失效 背景问题解决备注 背景 最近在搞一个后端项目&#xff0c;登录、接口权限、token认证。 版本 Spring Boot 3.2.0 JDK 21 Spring Security 6.2.0 问题 PreAuthorize 失效&#xff0c;没有走认证。 解决 给PreAu…

生成小程序URLlink链接遇到的坑

这里写自定义目录标题 前端生成小程序URL link背景用户打开小程序的常用方法短链接短链接优缺点优点缺点 生成短链接步骤 可能会遇到的问题&#xff1a;其他 注意&#x1f4e2; 前端生成小程序URL link ![h5打开小程序](https://img-blog.csdnimg.cn/direct/a4cfe3ef6d184c6d9…

OfficeWeb365 SaveDraw 文件上传漏洞复现

0x01 产品简介 OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。 0x02 漏洞概述 OfficeWeb365 Sav…

mapbox修改样式

mapbox有些其实document绘制而成&#xff0c;比如control控件 故而会涉及到样式修改&#xff0c;以适配系统主题 先决条件 必须要安装mapbox-gl&#xff0c;申请access_token yarn add mapbox-gl// or npm install mapbox-gl修改样式 新建一个_mapbox-gl.scss文件&#xff…

[字符串操作]删除单词后缀

删除单词后缀 题目描述 给一组各分别以er、ly和ing结尾的单词&#xff0c; 请删除每个单词的结尾的er、ly或ing&#xff0c; 然后按原顺序输出删除后缀后的单词&#xff08;删除后缀后的单词长度不为0&#xff09;。 关于输入 输入的第一行是一个整数n&#xff08;n≤50&am…

Python 反射

Python 反射是什么&#xff1f; 学习了几天&#xff0c;做个总结留给自己看。 感觉跟 SQL 入门要掌握的原理一样&#xff0c;Python 反射看起来也会做4件事&#xff0c;“增删查获” 增 - 增加属性&#xff0c;方法 setattr 删 - 删除属性&#xff0c;方法 delattr 查 - …

用 MATLAB 实现的计算机CT断层扫描图像重建项目源码

完整源码资源下载链接 计算机断层扫描图像重建 介绍 计算机断层扫描是堆叠在一起的 X 射线图像的集合&#xff0c;以获得作为诊断图像第三维的深度信息。这些“堆叠的” X 射线图像作为正弦图从 CT 机架接收&#xff0c;代表对象单层的 X 射线吸收剖面。该项目的目标是重建该…

Springboot整合篇Druid

一、概述 1.1简介 Druid 是阿里巴巴开源平台上一个数据库连接池实现&#xff0c;结合了 C3P0、DBCP 等 DB 池的优点&#xff0c;同时加入了日志监控。 它本身还自带一个监控平台&#xff0c;可以查看时时产生的sql、uri等监控数据&#xff0c;可以排查慢sql、慢请求&#xff0…

【如何理解select、poll、epoll?】

如何理解select、poll、epoll&#xff1f; select、poll、epollselectpollepoll 知识扩展三者之间的主要区别是什么&#xff1f;epoll的两种模式是什么&#xff1f; select、poll、epoll select、poll、epoll都是Linux中常见的I/O多路复用技术&#xff0c;他们可以用于同时监听…

广西岑溪市火灾通报:1人死亡 AI科技助力预防悲剧

近日&#xff0c;广西岑溪市玉梧大道紫坭工业园一厂房发生一起令人心痛的火灾事件&#xff0c;造成1人不幸丧生。这起悲剧再次提醒我们&#xff0c;火灾的防范工作是多么的重要。在这样的背景下&#xff0c;我想分享一个能够有效预防类似悲剧的技术——北京富维图像公司开发的F…

【Java】网络编程-UDP回响服务器客户端简单代码编写

这一篇文章我们将讲述网络编程中UDP服务器客户端的编程代码 1、前置知识 UDP协议全称是用户数据报协议&#xff0c;在网络中它与TCP协议一样用于处理数据包&#xff0c;是一种无连接的协议。 UDP的特点有&#xff1a;无连接、尽最大努力交付、面向报文、没有拥塞控制 本文讲…

如何处理PHP开发中的单元测试和自动化测试?

如何处理PHP开发中的单元测试和自动化测试&#xff0c;需要具体代码示例 随着软件开发行业的日益发展&#xff0c;单元测试和自动化测试成为了开发者们重视的环节。PHP作为一种广泛应用于Web开发的脚本语言&#xff0c;单元测试和自动化测试同样也在PHP开发中扮演着重要的角色…

基于Spring Boot、Mybatis、Redis和Layui的企业电子招投标系统源码实现与立项流程

招投标管理系统是一款适用于招标代理、政府采购、企业采购和工程交易等领域的企业级应用平台。该平台以项目为主线&#xff0c;从项目立项到项目归档&#xff0c;实现了全流程的高效沟通和协作。通过该平台&#xff0c;用户可以实时共享项目数据信息&#xff0c;实现规范化管理…

基于Python数据可视化的网易云音乐歌单分析系统

目录 《Python数据分析初探》项目报告 基于Python数据可视化的网易云音乐歌单分析系统一、项目简介&#xff08;一&#xff09;项目背景&#xff08;二&#xff09;项目过程 二、项目设计流程图&#xff08;一&#xff09;基于Python数据可视化的网易云音乐歌单分析系统的整体…

AndroidStudio flutter 开发环境 绿色版,绿化方法

这里写自定义目录标题 绿色版下载:绿色版制作过程参考资料1.按照正常方式配置flutter开发环境(不包括桌面开发环境),确认能够正常编译apk2.移动AndroidStudio3.修改 {Android Studio安装路径}\bin\idea.properties4.移动.android5.移动AndroidSdk6.移动gradle 绿色版下载: and…

springboot整合日志框架log4j2

springboot整合日志框架log4j2 前言&#xff1a;springboot提供了默认的日志框架logback&#xff0c;结合slf4j门面&#xff0c;基于简单配置即可实现日志输出记录。但是实际开发中很多项目会使用log4j2&#xff0c;log4j2是log4j的升级版本&#xff0c;性能和安全性上比log4j…

基于C/C++的rapidxml加载xml大文件 - 上部分翻译

RAPIDXML手册 版本 1.13 版权所有 &#xff08;C&#xff09; 2006&#xff0c; 2009 Marcin Kalicinski有关许可证信息&#xff0c;请参阅随附的文件许可证 .txt。 目录 1. 什么是 RapidXml&#xff1f; 1.1 依赖性和兼容性1.2 字符类型和编码1.3 错误处理1.4 内存分配1.5 …