mod_wsgiとDjangoでCORS + HTTPSを設定しようとしていますが、動作させることができません。Django CORS、HTTPS、WSGIの設定
CORSはHTTPS/mod_wsgiなしで正常に動作しますが、HTTPS/mod_wsgiを追加しようとすると動作を停止します。
:MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsPostCsrfMiddleware',
]
は、私はまた、以下の設定を追加(CorsMiddlewareとCorsPostCsrfMiddlewareを参照してください):
はCORSのために、私は(https://github.com/zestedesavoir/django-cors-middleware)
私のDjangoのMIDDLEWARE_CLASSESは以下の通りですジャンゴCORSミドルウェアを使用します
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
次のようにDjango/wsgiサーバーを実行します。
python manage.py runmodwsgi --host 0.0.0.0 --port 8001 --https-port 8000 --ssl-certificate-file ../utils/ssl_cert/local.crt --ssl-certificate-key-file ../utils/ssl_cert/local.key --processes 8 --server-name localhost --https-only --reload-on-changes
Successfully ran command.
Server URL : http://localhost:8001/
Server URL (HTTPS) : https://localhost:8000/
Server Root : /tmp/mod_wsgi-0.0.0.0:8001:1000
Server Conf : /tmp/mod_wsgi-0.0.0.0:8001:1000/httpd.conf
Error Log File : /tmp/mod_wsgi-0.0.0.0:8001:1000/error_log (warn)
Request Capacity : 40 (8 processes * 5 threads)
Request Timeout : 60 (seconds)
Startup Timeout : 15 (seconds)
Queue Backlog : 100 (connections)
Queue Timeout : 45 (seconds)
Server Capacity : 85 (event/worker), 70 (prefork)
Server Backlog : 500 (connections)
Locale Setting : en_US.UTF-8
HTTPSサーバーをコマンドラインからhttpieで照会すると、期待どおりに動作します(もちろんCORSの問題はありません)。
OPTIONS https://127.0.0.1:8001/api/v1/auth-token/
XMLHttpRequest cannot load https://127.0.0.1:8001/api/v1/auth-token/. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 403.
はまた、mod_wsgiのサーバ用に生成された構成が
CORSを許可するようにヘッダーを設定していないようだ:私は私のWebアプリケーションからのHTTPSサーバに照会した場合は、私は、CORSの問題を取得します
Server Conf : /tmp/mod_wsgi-0.0.0.0:8001:1000/httpd.conf
私はDjangoを初めて使用しており、どのレベルでCORSをHTTPS用に設定する必要があるかわかりません。
私はmod_wsgi-express
のために何もしない失敗し
<VirtualHost *>
Header set Access-Control-Allow-Origin "*"
</VirtualHost>
ベスト、 ニコラス
感謝をIこれがCORSの問題を修正したと信じていますが、今は別の問題を実行しています。私は存在しないファイルにアクセスしようとします。 [authz_core:error] AH01630:サーバー構成によってクライアントが拒否されました:/tmp/mod_wsgi-0.0.0.0:8001:1000/htdocs/api。 – Nicolas
'' /tmp/mod_wsgi-0.0.0.0:8001:1000/htdocs'ディレクトリには何がありますか?あなたはいつでも '' --mount-point''オプションを使って '' mod_wsgi-express''を実行しましたか?そのディレクトリが空ではなく、そこに明示的に何も追加しなかった場合は、 '' /tmp/mod_wsgi-0.0.0.0:8001:1000'ディレクトリを完全に削除してからやり直してください。 –
設定に手を触れていませんでした。 '' /tmp/mod_wsgi-0.0.0.0:8001:1000/htdocs'''は '' /tmp/mod_wsgi-0.0.0.0:8001:1000/httpd.conf'''で生成されたDocumentRootです。問題は、その中の '' api''ディレクトリに行き、 '' api''は存在しないということです。'' 'api'''はREST APIをルーティングするためのURLにしかありません....あなたの助けをありがとう – Nicolas