如何将Apache配置为Docker容器中Django应用程序的反向代理:服务静态文件

fnatzsnv  于 2023-06-21  发布在  Docker
关注(0)|答案(1)|浏览(127)

我有一个在Docker容器中运行的Django应用程序。我的Apache配置在提供静态文件时遇到问题。

  • 我的django应用程序在docker容器中工作,Apache正确地将请求路由到它
  • 我确保设置了STATIC_URL = "/static/"DEBUG = False设置属性
  • 我确保收集静态到/var/www/my_app/static/目录
  • 我确保目录/var/www/my_app对apache有正确的访问权限:drwxr-xr-x 3 www-data www-data 4,0K June 11 16:25 my_app

这是我的Apache配置:

<VirtualHost 000.00.0.000:443>
    ServerName my_app.com

    SSLEngine on
    SSLProxyEngine on

    SSLCertificateFile /etc/apache2/certs/cert.pem
    SSLCertificateKeyFile /etc/apache2/certs/cert.key
    SSLCACertificateFile /etc/apache2/certs/DigiCertCA.crt

    CustomLog /var/log/apache2/my_app.log combined
    ErrorLog /var/log/apache2/my_app.log
    
    ProxyPass /static !  
    Alias /static/ /var/www/my_app/static/

    <Directory /var/www/my_app/static/>
        Require all granted
    </Directory>

    <Location />
        ProxyPass http://localhost:6000/
        ProxyPassReverse http://localhost:6000/
        ProxyPreserveHost on
    </Location>
</VirtualHost>

当我评论:

<Location />
ProxyPass http://localhost:6000/
ProxyPassReverse http://localhost:6000/
ProxyPreserveHost on
</Location>

比我的静态文件更好。所以看起来有一些问题,配置的这一部分优先。
你能帮我解决这个问题吗?

c9qzyr3d

c9qzyr3d1#

Apache的Web服务器优先级顺序非常复杂,这里有文档说明,但here解释得很好。在本例中,Location块中的ProxyPass优先,因为它赢得了最后一个匹配。您可以安排您的配置并将<Directory>指令放在<Location>块下面,或者您可以在最后创建另一个<Location /my_app/static/块,这将帮助您更好地评估哪个块将匹配什么。

相关问题