Apache2(反向代理)+ Django + Gunicorn

Apache2(反向代理)+ Django + Gunicorn

我的 Apache2 Web 服务器作为反向代理服务器存在问题。使用我的域名“example.com”的简化服务器设置如下所示:

服务器设置

如果客户端现在转到页面https://example.com/guacamole,则 Apache2 Web 服务器应将请求转发到 Tomcat 服务器 ( https://127.0.0.1:8080/guacamole)。此部分有效。

如果客户端访问https://example.com/mydjangoproject,那么 Apache2 Web 服务器应该使用 Gunicorn 和 Django 项目 ( https://192.168.30.5:8000) 将请求转发到 Web 服务器。但是,此配置仅部分起作用。该页面https://example.com/mydjangoproject显示 Django 项目的主页,但在调用管理页面时,https://example.com/mydjangoproject/admindjango 应用程序给出页面不存在的错误http://192.168.30.5:8000//admin。似乎在调用管理页面时删除了子 URL“/mydjangoproject/”。那可能是什么?

这是我的配置:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    JKMount /* ajp13_worker

    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    ProxyPreserveHost On

    ProxyPass /static/ !
    ProxyPass /mydjangoproject https://192.168.30.5:8000/
    ProxyPassReverse /mydjangoproject https://192.168.30.5:8000/
</VirtualHost>
</IfModule>

感谢您的帮助!

编辑:当我尝试通过以下方式进入管理页面时,https://example.com/mydjangoproject/admin出现以下错误:

错误截图

答案1

您可能需要改变您的ProxyPassProxyPassReverse指令才能使其正常工作。

您应该尝试替换这些行:

ProxyPass /static/ !
ProxyPass /mydjangoproject https://192.168.30.5:8000/
ProxyPassReverse /mydjangoproject https://192.168.30.5:8000/

例如:

# "Convenience" URL
ProxyPass /mydjangoproject https://192.168.30.5:8000
ProxyPassReverse /mydjangoproject https://192.168.30.5:8000

# --- The lines below are what actually allow access to /admin ---

# Proxy /admin for login
ProxyPass /admin http://192.168.30.5:8000/admin
ProxyPassReverse /admin http://192.168.30.5:8000/admin

# Proxy /static for CSS, etc.
ProxyPass /static http://192.168.30.5:8000/static
ProxyPassReverse /static http://192.168.30.5:8000/static

然后您应该能够使用例如https://example.com/admin访问您的 Django/admin页面并获取正确的登录对话框:

例如 Django 管理员登录

Django 管理员登录-屏幕截图

当我尝试通过https://example.com/mydjangoproject/admin发生错误进入管理页面时。

您应该能够添加以下几行(除了上面推荐的行之外)以使其(某种程度上)工作:

ProxyPass /mydjangoproject/admin http://192.168.30.5:8000
ProxyPassReverse /mydjangoproject/admin http://192.168.30.5:8000

请注意,Django 似乎会自动将 ex. 重定向https://example.com/mydjangoproject/admin到 ex. ,除非您已经有 ex.作为现有条目(包括上面),https://example.com/admin否则这会破坏一切。ProxyPass /admin http://192.168.30.5:8000/admin

相关内容