web-dev-qa-db-ja.com

Apache2(リバースプロキシ)+ Django + Gunicorn

リバースプロキシサーバーとしてのApache2Webサーバーに問題があります。私のドメイン「example.com」を使用した簡略化されたサーバー設定は次のようになります。

server setup

クライアントがhttps://example.com/guacamoleページに移動した場合、Apache2 Webサーバーは要求をTomcatサーバー(https://127.0.0.1:8080/guacamole)に転送する必要があります。この部分は機能します。

クライアントがhttps://example.com/mydjangoprojectに移動する場合、Apache2Webサーバーは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を介して管理ページに入ろうとすると、このエラーが発生します:

error screenshot

1
Markus

これを機能させるには、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管理者ログイン

Django Admin Login - Screenshot

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。https://example.com/adminに自動的にリダイレクトするようです。これにより、ex。ProxyPass /admin http://192.168.30.5:8000/adminが既存のエントリとして既に存在しない限り問題が発生します。 (上記に含まれています)。

1
Anaksunaman