我的 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/admin
django 应用程序给出页面不存在的错误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
您可能需要改变您的ProxyPass
和ProxyPassReverse
指令才能使其正常工作。
您应该尝试替换这些行:
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 管理员登录
当我尝试通过
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