5

一部のURLはhttp経由でアクセスでき、他のURLはhttp-secureのみでアクセスできるdjangoWebアプリケーションがあります。apacheconfファイルでvirtualHost/mod_wsgi構成を設定して、両方から同じWebアプリケーションにアクセスできるようにする必要があります。私はこれらの2つの投稿をフォローしました

そして、私がトリックを行うべきだと思う次の構成を持っています。

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin me@mail.com
    DocumentRoot /var/www/html
    ServerName www.mydomain.com

    ErrorLog server-logs/error_log
    CustomLog server-logs/access_log common

    WSGIScriptAlias /test /var/www/my_app_root/apache/django.wsgi

    <Directory /var/www/my_app_root>
      Order allow,deny
      Allow from all
    </Directory>    
</VirtualHost>

NameVirtualHost *:443
<VirtualHost *:443>
    SSLEngine On
    SSLCertificateFile /etc/httpd/conf/ssl/mykey.crt
    SSLCertificateKeyFile /etc/httpd/conf/ssl/mykey.key

    ServerAdmin me@mail.com
    DocumentRoot /var/www/html
    ServerName www.mydomain.com

    ErrorLog server-logs/error_log
    CustomLog server-logs/access_log common

    WSGIScriptAlias /test /var/www/my_app_root/apache/django.wsgi

    <Directory /var/www/my_app_root>
      Order allow,deny
      Allow from all
    </Directory>
</VirtualHost>

ただし、http経由でアクセスする必要のあるURLは問題なくアクセスされていますが、https経由でアクセスする必要のあるURLには404-notfoundエラーが発生しています。ビューがhttp経由でアクセスされているかどうかを確認し、httpがhttpsに置き換えられたURLにリダイレクトするデコレータがあります。したがって、リダイレクトが発生している(つまり、ビューが呼び出される)ので、URLマッピングは正しいのですが、httpsでは404エラーが発生します。

https上で正常に動作するサードパーティのphpアプリケーションがWebサーバーのドキュメントルート/var/www/html/にあります。どういうわけか、そのアプリケーションはhttpまたはhttpsで問題に直面していません。

私は以下を試しました

  • 両方の仮想ホストで同じ名前のデーモンモードアプローチを試しましたWSGIProcessGroupが、どちらもうまくいきませんでした。
  • Listen 443コマンドを追加しようとしましたが、apacheはポートがすでにバインドされているというエラーを訴えました。

編集:

すべてのコメントにより、構成をもう少し詳しく調べたところ、実行時に*:443仮想ホストを定義している(そしてwsgiscriptディレクティブがない)サブconfファイルがプルされていることがわかりました。そのため、Listen 443はエラーをスローしていました。また、httpsを介したURLの404についても説明します(仮想ホストの処理*:443はそのURLを解決できませんでした)。今、私はそれを変更し、すべてが正常に機能しています。私の元の質問の2つのスタックオーバーフロー投稿で提案されたアプローチは完璧であり、正しく機能します。

4

1 に答える 1

4

apache2.conf に「Listen 80」と「Listen 443」の両方が記載されていますか? これは何かの助けになるかもしれません。

于 2012-04-19T04:51:18.277 に答える