【问题标题】:Configure SSL Certificate on Apache for Django Application (mod_wsgi)在 Apache 上为 Django 应用程序配置 SSL 证书 (mod_wsgi)
【发布时间】:2015-12-25 01:55:15
【问题描述】:

我从 namecheap.com 购买了 SSL 证书,并将所需文件放在我的 Ubuntu 服务器上(密钥和 crt)。我正在使用 mod_wsgi 通过 Apache 为我的 Django 应用程序提供服务。我在安装 SSL 证书时遇到问题。

当前配置(/etc/apache2/sites-available/000-default.conf)

<VirtualHost *:80>
        ServerAdmin admin@example.com
        #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


    【解决方案1】:

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

    对于本示例,我假设您只想通过 https 为您的网站提供服务,因此您的配置应该大致如下所示。

    这是你的:000-default.conf

    <VirtualHost *:80>
        ServerName example.com
        ServerAdmin admin@example.com
    
        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 admin@example.com
    
        # 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
    

    【讨论】:

    • 我已完成上述更改,但由于某种原因存在无限重定向循环。有任何想法吗?我相信这与我们的重写配置有关。
    • 已修复,这是由于 CloudFlare SSL 欺骗了 Apache 配置。感谢所有帮助:)
    • @KosukeMiyagi,太棒了,很高兴为您提供帮助。不要忘记接受答案。 :)
    • 我按照上述步骤操作我不确定我是否被禁止...请告诉我。
    • @user1941390 试试 sudo
    【解决方案2】:

    为了完成 Alexey 的回答,当我遇到问题时,我不得不禁用 000-default.conf 站点并仅使用 ssl 配置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-16
      • 2022-08-14
      • 2012-12-20
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2017-07-03
      相关资源
      最近更新 更多