web-dev-qa-db-ja.com

Djangoアプリケーション(mod_wsgi)のApacheでSSL証明書を構成する

Namecheap.comからSSL証明書を購入し、必要なファイルをUbuntuサーバー(キーとcrt)に配置しました。 mod_wsgiを使用して、ApacheでDjango=アプリケーションを提供しています。SSL証明書のインストールに問題があります。

現在の構成(/etc/Apache2/sites-available/000-default.conf)

<VirtualHost *:80>
        ServerAdmin [email protected]
        #DocumentRoot /var/www/html

        ErrorLog ${Apache_LOG_DIR}/error.log
        CustomLog ${Apache_LOG_DIR}/access.log combined

        #Django Application
        Alias /static /home/Django/professor/static_root
        <Directory /home/Django/professor/static_root>
                Require all granted
        </Directory>
        <Directory /home/Django/professor/professor>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIDaemonProcess professor python-path=/home/Django/professor:/home/Django/professor-vm/lib/python2.7/site-packages
        WSGIProcessGroup professor
        WSGIScriptAlias / /home/Django/professor/professor/wsgi.py

        #ServerName example.com
        #SSLEngine on
        #SSLCertificateFile /etc/Apache2/ssl/server.crt
        #SSLCertificateKeyFile /etc/Apache2/ssl/server.key
        #SSLCACertificateFile /etc/Apache2/ssl/intermediate.crt

</VirtualHost>

SSL証明書の行をコメントアウトしました。現在、私のアプリケーションは正常に実行されていますが、SSL証明書を有効にするために行のコメントを解除すると、私のサイトはアプリケーションではなく/ var/wwwからファイルを提供します。何か案は?

9
Kosuke Miyagi

あなたの問題は、Apacheがポート80に対してのみ設定されているため、https(ポート443)を介してページを提供しないことです。

この例では、httpsを介してのみWebサイトにサービスを提供することを想定しているため、構成はおおよそどのようになりますか。

これがあなたです:000-default.conf

<VirtualHost *:80>
    ServerName example.com
    ServerAdmin [email protected]

    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined

    # This is optional, in case you want to redirect people 
    # from http to https automatically.
    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)$ https://%{HTTP_Host}$1 [R=301,L]

</VirtualHost>

今ここにdefault-ssl.conf

<VirtualHost *:443>
    ServerName example.com
    ServerAdmin [email protected]

    # Django Application
    Alias /static /home/Django/professor/static_root
    <Directory /home/Django/professor/static_root>
        Require all granted
    </Directory>

    <Directory /home/Django/professor/professor>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess professor python-path=/home/Django/professor:/home/Django/professor-vm/lib/python2.7/site-packages
    WSGIProcessGroup professor
    WSGIScriptAlias / /home/Django/professor/professor/wsgi.py


    SSLEngine on
    SSLCertificateFile /etc/Apache2/ssl/server.crt
    SSLCertificateKeyFile /etc/Apache2/ssl/server.key
    SSLCACertificateFile /etc/Apache2/ssl/intermediate.crt

</VirtualHost>

構成が完了したら、sslサイトをオンにし、(オプションで)modを書き換える必要があります。

> Sudo a2ensite default-ssl
> Sudo a2enmod rewrite
> Sudo service Apache2 reload
21
lehins

alexeyの回答を完了するには、問題が発生したときに、000-default.confサイトを無効にして、SSL構成のみを使用する必要がありました。

1
leila