2016-09-14 22 views
0

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> 

ベスト、 ニコラス

答えて

0

/etc/apache2/sites-enabled/000-default.conf設定/etc/apache2/sites-enabled/000-default.confでそれを設定しようとしました。これらは完全に分離されており、mod_wsgi-expressはシステムのApacheインストール設定ファイルを無視しています。

mod_wsgi-expressを使用しているときには、余分なApacheのhttpdの設定ディレクティブを追加する必要がある場合は、同じくらいextra.confと呼ばれるファイルに追加します。実行し

Header set Access-Control-Allow-Origin "*" 

とをmod_wsgi-expressなど:

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 --include-file extra.conf 
+0

感謝をIこれがCORSの問題を修正したと信じていますが、今は別の問題を実行しています。私は存在しないファイルにアクセスしようとします。 [authz_core:error] AH01630:サーバー構成によってクライアントが拒否されました:/tmp/mod_wsgi-0.0.0.0:8001:1000/htdocs/api。 – Nicolas

+0

'' /tmp/mod_wsgi-0.0.0.0:8001:1000/htdocs'ディレクトリには何がありますか?あなたはいつでも '' --mount-point''オプションを使って '' mod_wsgi-express''を実行しましたか?そのディレクトリが空ではなく、そこに明示的に何も追加しなかった場合は、 '' /tmp/mod_wsgi-0.0.0.0:8001:1000'ディレクトリを完全に削除してからやり直してください。 –

+0

設定に手を触れていませんでした。 '' /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

関連する問題