AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 59791
Accepted
Tomas Andrle
Tomas Andrle
Asked: 2009-08-28 15:17:55 +0800 CST2009-08-28 15:17:55 +0800 CST 2009-08-28 15:17:55 +0800 CST

配置 Apache 以使用 WSGI 处理子路径

  • 772

我正在尝试设置 Apache、Django 和mod_xsendfile以允许我使用 Django 身份验证控制对某些文件的访问,同时仍然使用 Apache 发送实际的文件数据。

我有这个配置的问题:

# Some files must be publicly available without the Django auth check.
# When I comment this out, public media is not accessible but the WSGI script for
# /media/attachment DOES get called.
# So I think I need to somehow exclude /media/attachment from the effect of this Alias

Alias /media/ /var/www/vhosts/domain.com/subdomains/project/httpdocs/media/

# This <Location> block disables everything (Forbidden) regardless of the WSGI stuff
#
#<Location /media/attachments>
#    Deny from all
#</Location>

WSGIScriptAlias / /var/www/vhosts/cdomain.com/subdomains/project/httpdocs/web/apache/django.wsgi
WSGIScriptAlias /media/attachments /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache/django.wsgi

XSendFile On

如何告诉 Apache 通过 WSGI 脚本将请求路由到 /media/attachments 并直接为 /media 的其余部分提供服务?

apache-2.2
  • 1 1 个回答
  • 6327 Views

1 个回答

  • Voted
  1. Best Answer
    Graham Dumpleton
    2009-08-29T03:21:29+08:002009-08-29T03:21:29+08:00

    Alias 指令优先于 WSGIScriptAlias,因此您不能在 Alias 指令指定的 URL 下挂载 WSGI 应用程序。

    由于多个 WSGIScriptAlias 指令,除非您使用 WSGIApplicationGroup 指令强制将它们委托给进程中的同一个 Python 子解释器,否则在每个进程中启动多个 Django 实例时,您也会遇到问题.

    至于解决方案,由于您使用的布局,做您想做的事情有点棘手。我有一个想法,但需要先测试一下。


    更新 1

    第一种可能性是,如果您在 Django 使用的“css”、“img”和“js”的传统子目录中拥有所有内容,而不是上面的 Alias 指令,请使用:

    AliasMatch ^/(css|img|js)(/.*)$ /var/www/vhosts/domain.com/subdomains/project/httpdocs/media/$1$2
    

    并删除:

    WSGIScriptAlias /media/attachments /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache/django.wsgi
    

    这应该意味着只有这些子目录中的静态文件才会匹配 Alias 指令并直接提供服务。


    更新 2

    我必须测试的另一个选项是不使用 WSGIScriptAlias,而是对所有内容使用 Alias 指令。这将像这样完成:

    Alias /media/attachments/ /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache/django.wsgi
    Alias /media/ /usr/local/django/example/media/
    Alias / /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache/django.wsgi
    
    <Directory /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache>
    WSGIApplicationGroup %{GLOBAL}
    AddHandler wsgi-script .wsgi
    Options ExecCGI
    Order allow,deny
    Allow from all
    </Directory>
    

    因为单独使用 Alias 指令,所以都以相同的优先级进行评估。您只需要确保嵌套更深的 URL 先出现。

    我们使用 AddHandler 将 .wsgi 文件映射为 WSGI 脚本文件,而不是 WSGIScriptAlias,并设置 ExecCGI 选项,以便 mod_wsgi 允许将其用作 WSGI 脚本文件。

    我们设置 WSGIApplicationGroup 只是为了确保在每个进程中只创建一个 Django 实例。%{GLOBAL} 的值使它使用主要的 Python 解释器。

    所以,两种选择取决于你的喜好。

    • 6

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve