在Apache上为Django应用程序配置SSL证书(mod_wsgi)

问题描述 投票:7回答:2

我从namecheap.com购买了SSL证书,并将所需文件放在我的Ubuntu服务器上(key&crt's)。我正在使用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而不是应用程序的文件。有任何想法吗?

django apache ssl https mod-wsgi
2个回答
20
投票

您的问题是您的apache仅配置为端口80,因此它不会通过https(端口443)提供页面。

对于这个例子,我假设你只想通过https服务你的网站,所以这里是你的配置应该是什么样子。

这是你的: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

1
投票

完成Alexey的答案,当我遇到问题时,我必须禁用000-default.conf站点并仅使用ssl配置

© www.soinside.com 2019 - 2024. All rights reserved.