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

这篇具有很好参考价值的文章主要介绍了django-release-debug-apache-mod-wsgi-原理解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 None
    Options None 
    Require all granted 
</Directory>

2.mod_wsgi

在windows下,mod_wsgi作为一个动态链接库加载进apache内存,如下图所示:
django-release-debug-apache-mod-wsgi-原理解析,Web,云服务器,Django,django,apache,python
mod_wsgi不能作为单独进程运行。

在linux下,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.使用mod_wsgi守护程序模式

建议使用“守护程序模式”运行mod_wsgi(在非Windows平台上)。要创建所需的守护进程组并委派Django实例在其中运行,您将需要添加适当的 WSGIDaemonProcess和WSGIProcessGroup指令。如果您使用守护程序模式,则对上述配置的进一步更改是您不能使用WSGIPythonPath;相反,您应该使用的python-path选项 WSGIDaemonProcess,例如:

WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com
WSGIProcessGroup example.com

window下无法使用。

2.5.小节

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

processes=n threads=1

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

processes=2 threads=64

这样子性能会更好。

3.apache配置参数

3.1.运行模式介绍

Apache24\bin文件夹下启动命令行,输入:

httpd -V

显示如下图所示:
django-release-debug-apache-mod-wsgi-原理解析,Web,云服务器,Django,django,apache,python
在windows server下使用的模式是WinNT。mpm_winnt.c 是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说 mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。
django-release-debug-apache-mod-wsgi-原理解析,Web,云服务器,Django,django,apache,python
linux查看apache使用的模式:

apachectl -V

如下图所示:
django-release-debug-apache-mod-wsgi-原理解析,Web,云服务器,Django,django,apache,python
默认使用的是event模式。

apache从2.0开始,引入了MPM(Multi-Processing Module,多进程处理模块)。MPM有prefork, worker和event(在2.4版本中稳定发布)模式,三种模式拥有不同的特点和性。

3.1.1.prefork MPM

prefork是比较古老而又稳定的apache模式,特点是每个进程都是单线程,在一个时间点只能处理一个连接,需要启动大量的进程来处理高并发的请求。由于是单线程进程,因而无须考虑线程安全的问题,可以使用非线程安全的库,例如mod_php。优点是成熟稳定,缺点是比较消耗内存,而且并发支持受限于进程数量,对高并发支持稍差。

3.1.2.work MPM

worker同样使用多个进程,但每个进程又拥有多个线程,每个线程处理一个连接。由于线程是轻量级的,因而具有较高的并发性,同时,多个进程又获得了一定的稳定性。
worker模式特点是占用内存少,并发性比较高,缺点是必须考虑线程安全。如果使用了keep-alive方式,一个线程可能会被一直保持一个连接,但中间没有请求,直到超时。如果有多个线程被这样占据,在高并发场景下同样会出现无线程可用的情形。

3.1.3.event MPM

event模式是在2.4版本中才稳定发布的模式,它在worker的基础上,解决了keep-alive连接不能释放的问题。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。event相比于worker的优势是,它解决了worker模式下长连接线程的阻塞问题。值得一提的是,worker/event模式的请求处理模式,已经和nginx的libevent模式相同了。在mod_php模式下,每个apache进程都需要直接执行php,所以很容易达到系统资源限制。但是在php-fpm模式下,apache只负责建立连接,然后把请求传递给php-fpm来处理。这样,apache可以保持大量的连接,请求处理能力取决于php服务器的性能。
由于event是明显优于worker的,所以在apache2.4及后续版本中,一般优先选择event模式。

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

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

3.2.全局参数

在出现错误页的时候是否显示服务器操作系统的名称,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.3.主机参数

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服务器,其可以配置多进程和多线程,拥有广泛的市场。文章来源地址https://www.toymoban.com/news/detail-758925.html

到了这里,关于django-release-debug-apache-mod-wsgi-原理解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Studio 分别运行flutter 的debug和release版本

    由于在Android Studio 没找到运行release版本的入口,现在通过命令行运行 运行release版本的话直接执行下面命令3 相关命令统计 1.生成apk 2.安装apk: 3.运行release版本

    2024年01月18日
    浏览(34)
  • Windows系统下5分钟配置好PCL(debug和release)

    PCL环境的配置总是令人头疼,尤其是对新手来说,源码的下载、编译、安装都显得尤为复杂,本博客将提供自己编译好的文件,5分钟内完成环境配置。经测试,在 win7 、 win10 、 win11 ; VS2013 、 VS2017 、 VS2019 、 VS2022 上均配置成功(目前还没失败过,只要你会使用鼠标) 点云

    2024年01月24日
    浏览(34)
  • QtCreator中三种不同编译版本 debug、release、profile 的区别

    debug调试模式,编译后的可执行文件很大,带了很多调试符号信息等,方便开发阶段调试的时候进入具体的堆栈查看值。会打开所有的断言,运行阶段性能差速度慢,可能会有卡顿感觉。 release发布模式,编译后的可执行文件很小,不带任何调试符号信息,一般用于打包发布程

    2024年02月10日
    浏览(35)
  • 2023_4_23_VS下Release怎么打断点进行debug

    🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下,下次更新不迷路💟💟 😆😆😆私聊获取个人订阅号哦,欢迎订阅共同学习😆😆😆 💖💖💖💖可以加入大家庭群聊,一起学习天天有福利💖💖💖💖 今天突

    2023年04月24日
    浏览(18)
  • python使用Apache+mod_wsgi部署Flask

    安装时勾选\\\"Add python.exe to PATH\\\"就不需要手动配置环境变量了: 直接下一步即可: 选择自己的安装目录: 安装完成后验证是否安装配置成功,打开cmd,输入如下命令: 如下则表示配置成功: 下载地址 注意要和Python版本一样,Python 3.10选择cp310,这里我选择的是 mod_wsgi-4.9.2-c

    2024年01月18日
    浏览(33)
  • 在Visual Studio 中,Release、Debug、x86和x64 四个不同的概念

    在 Visual Studio 中,Release、Debug、x86和x64 是四个不同的概念。 Release 和 Debug 是编译的不同配置,用于控制编译器生成的代码和符号信息的方式。 - Release 配置用于生成最终发布版本的代码。在 Release 模式下,编译器会进行各种优化,以提高程序的性能和执行效率。此外,Relea

    2024年02月17日
    浏览(31)
  • Apache HTTP Server <2.4.56 mod_proxy_uwsgi 模块存在请求走私漏洞(CVE-2023-27522)

    Apache HTTP Server 是一个Web服务器软件。 该项目受影响版本存在请求走私漏洞。由于mod_proxy_uwsgi.c 中uwsgi_response方法对于源响应头缺少检查,当apache启用mod_proxy_uwsgi后,攻击者可利用过长的源响应头等迫使应转发到客户端的响应被截断或拆分,进而可能造成会话劫持等危害。 漏

    2024年02月09日
    浏览(43)
  • Django当DEBUG = False时,信号不触发问题

    今天突然发现生产环境中,某些信号没有被正确触发,一番调查总结一下关于django信号执行问题。 先看一个现象: 也就是说是否开启debug模式会影响第一个信号的触发,查了下官方文档发现: 警告 还需要注意的是,Django 默认将信号处理程序存储为弱引用,所以如果你的处理

    2024年02月16日
    浏览(23)
  • 解决:django设置DEBUG=false时出现的问题

    首先,我用的是django4.2,python3.10版本 本来,如果在settings.py中使用 DEBUG = True,那么什么问题也没有,当然,这属于调试模式。 一切正常..... 但是,当我准备提交代码时,将 DEBUG 改为 False 时..... 好好的admin界面,变成了这样.... 而且,好好的静态资源,也没法访问了:  郁闷

    2024年02月13日
    浏览(25)
  • 【漏洞复现】Django_debug page_XSS漏洞(CVE-2017-12794)

    感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 说明 内容 漏洞编号 CVE-2017-12794 漏洞名称 Django_debug page_XSS漏洞 漏洞评级 影响范围 1.11.5版本 漏洞描述 修复方案 1.1、漏洞描述 1.11.5版本,修复了500页面中存在的一个XSS漏洞 1.2、漏洞等级 1.3、影响版本

    2024年02月05日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包