Django — Возвращает файл из корневой папки через URL

#python #django #ssl #url #ssl-certificate

#python #django #ssl #url #ssl-сертификат

Вопрос:

Я приобрел SSL-сертификат онлайн и теперь нахожусь в середине проверки моего хоста. Как это работает:

  1. Это дает мне файл
  2. Я должен сделать этот файл доступным через определенный URL на моем хостинге.
  3. Если содержимое файла совпадает, это проверяется.

Теперь я перехожу к шагу 2.

Я пытаюсь вернуть файл (статический) с URL-адреса, как того требует Comodo для проверки моего сервера. Итак, в принципе, я думаю, что если я получу доступ к этой ссылке:

 http://your(sub)domain/.well-known/pki-validation/<filename.txt>
  

Руководство здесь:

https://helpdesk.ssls.com/hc/en-us/articles/206957109-How-can-I-complete-the-domain-control-validation-DCV-for-my-SSL-certificate-

Ребята, вы можете помочь, как я могу вернуть файл с этим URL? Спасибо!

Комментарии:

1. Вам нужно проверить файл только один раз, поэтому поместите этот файл в свой корневой статический каталог и измените STATIC_URL = '.well-known/pki-validation/' в settings.py.

2. и это все, что мне нужно сделать?

Ответ №1:

Спасибо за всю вашу помощь. На самом деле я обнаружил, что это было довольно просто.

Я просто ввел путь в свой urls.py , как показано ниже:

 urlpatterns = [
      path('.well-known/pki-validation/xxxyyyzzz.txt', read_file),
            ]
  

Затем моя read_file функция просто возвращает файл с

 def read_file(request):
    f = open('.well-known/pki-validation/xxxyyyzzz.txt', 'r')
    file_content = f.read()
    f.close()
    return HttpResponse(file_content, content_type="text/plain")
  

Комментарии:

1. Пробовал все другие методы, и они не сработали. Только что закончил делать это, и это отлично работает и выполняет свою работу.

2. в моем случае даже не нужно было ничего открывать, просто вернул код активации в file_content

Ответ №2:

  1. В вашем приложении Django поместите ваш файл в статическую папку yourapp/static/.well-known/pki-validation/<filename.txt>

  2. Псевдоним /static/.well-known/ to /.well-known/ на vhost вашего приложения

     <VirtualHost *:80>
    
    DocumentRoot /var/www/yourapp
    Alias /media/ /var/www/yourapp/media/
    Alias /static/ /var/www/yourapp/static/
    Alias /static/.well-known/ /var/www/yourapp/.well-known/
    
    </VirtualHost>
      

Комментарии:

1. Спасибо! Как мне выполнить второй шаг? Как мне создать псевдоним для этого в моем приложении vhost?

2. Alias /static/.well-known/ /var/www/yourapp/.well-known/

3. Мне так жаль, что я все еще не мог этого понять. Где и что именно такое app vhost?

4. Django application vhost == виртуальный хостинг приложения . docs.djangoproject.com/en/2.1/howto/deployment/wsgi/modwsgi

Ответ №3:

Проверка контроля домена не входит в обязанности Django, вам лучше подтвердить свой домен с помощью записи CNAME. Руководство по включению проверки ssl с помощью django и nginx находится здесь: https://simpleisbetterthancomplex.com/tutorial/2016/05/11/how-to-setup-ssl-certificate-on-nginx-for-django-application.html

Ответ №4:

Вот что я в итоге сделал, чтобы заставить это работать без необходимости изменять Django urls.py:

  1. Размещено <filename.txt > в /var/www/<your_django_site>/static/.well-known/pki-validation/<filename.txt >
  2. Псевдоним /.хорошо известный /var/www/<your_django_site>/статический/.хорошо известный

Вот как должна выглядеть запись VirtualHost в конфигурации Apache соответствующих частей:

 <VirtualHost *:80>
    
    # ...

    DocumentRoot /var/www/<your_django_site>
    Alias /static /var/www/<your_django_site/static
    # This is the only line I needed to add to my existing Apache config to do HTTP SSL validation.
    # This will make it so that http://<your_domain>/.well-known/pki-validation/<filename.txt> 
    # will point to where you stored that text file and can be validated.
    Alias /.well-known /var/www/<your_django_site/static/.well-known

    # ...

</VirtualHost>