Django 배포 HTTPS
전언
크롬의 새 버전은 이미 자동으로 HTTPS로 넘어간다. ACool은 HTTPS가 없는 블로그 사이트가 완벽하지 않다고 생각했지만 평소 바빠서 시간을 내기가 어려웠다.오늘 드디어 시간이 났습니다. HTTPS가 Django에 배치되었습니다.인터넷에서 Django 프레임워크에서 HTTPS 배치에 대한 글이 적기 때문에 배치 과정을 기록합니다.
구성 환경:
Let's Encrypt는 무료, 자동, 개방적인 인증 기구(CA)로 대중의 이익을 위해 운영된다.ISRG(Internet Security Group) 에서 제공하는 서비스입니다.이 문서는 Let's Encrypt에서 제공하는 무료 SSL 인증서를 사용합니다.
인증서를 수동으로 수령하고 유지하는 것은 매우 번거롭기 때문에, 우리는 자동 클라이언트 Cettbot을 사용하여 SSL 인증서를 배치합니다.다음은 공식 소개입니다.
Certbot은 EFF가 인터넷 전체를 암호화하기 위한 노력의 일부입니다.웹에서의 보안 통신은 HTTPS에 의존하기 때문에 웹 서버의 신분을 브라우저가 검증할 수 있도록 디지털 인증서를 사용해야 한다. (예를 들어 구글.com이 사실입니까?)웹 서버는 인증서 발급 기구(CA)라는 신뢰할 수 있는 제3자로부터 인증서를 받습니다.Certbot은 Let's Encrypt(EFF, Mozilla 및 다른 사용자가 시작한 오픈 인증 기관)에서 인증서를 받아 웹 서버에 배치할 수 있는 편리한 클라이언트입니다.
위 조합(Let's Encrypt + Certbot) 방식을 사용하면 간단하고 편리하며 빠르다.
SSL 인증서 가져오기
사전 작업
인증서를 만들기 전에, 웹 서버가 루트 디렉터리의 이 경로에서 정적 파일을 제공할 수 있는지 확인해야 합니다.
/.well-know
django 프로그램이 도입한 모든 경로가 wsgi를 통해 서비스를 제공하기 때문에, 이 자원을 정적으로 제공하기 위해nginx 설정을 작성해야 합니다. 도메인 이름의nginx 프로필에 다음 내용을 추가합니다.server {
location /.well-known/acme-challenge {
alias /path/to/yoursite/.well-known/acme-challenge;
}
}
자신의 상황에 따라
/path/to/yoursite/
필드를 수정하십시오. 예를 들어 /home/User/Blogof33.com
로 변경하면 이 경로가 Django app의 절대 경로입니다. 즉, manage.py
파일이 있는 디렉터리입니다.Certbot 다운로드
github에서 원본 코드를 다운로드하면 Linux 서버 버전의 차이에 관여하지 않아도 됩니다.
git clone https://github.com/certbot/certbot.git
인증서 생성
Apache가 아닌nginx이므로
webroot
옵션을 사용하여 인증서를 받습니다.certbot certonly --webroot -w /path/to/yoursite -d blogof33.com -d www.blogof33.com
위의 미리 작업한 수정과 같이
/path/to/yoursite
필드와 blogof33.com
필드를 수정하십시오. 현재 도메인에 www를 추가하지 못하면 (즉 WWW의 해석이 제공되지 않음) 마지막 필드를 삭제하십시오.이 명령의 성공적인 출력은 다음과 같습니다(Congratulations).
Output: IMPORTANT NOTES:
상기 명령은
www.blogof33.com
와 blogof33.com
에 단독 인증서를 생성합니다.인증서는 에 저장됩니다.Django 구성
공식 링크 참조:
docs.djangoproject.com/en/1.10/top…
구성 파일
www.blogof33.com
을 수정하고 다음 행을 추가합니다.SESSION_COOKIE_SECURE=True
SESSION_COOKIE_HTTPONLY=True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
주의:django<1.8을 실행하는 프로그램에 대해django-secure를 설치하고 설정해야 합니다.
Nginx 구성
마지막 단계는nginx를 설정하는 것입니다. 설정 파일은
/etc/letsencrypt/live/blogof33.com/fullchain.pem
에 위치하고 설정과 설명은 다음과 같습니다.server {
charset utf-8;
listen 80;
server_name www.blogof33.com blogof33.com;
return 301 https://blogof33.com$request_uri;
}
server {
listen 443 default ssl;
server_name blogof33.com;
ssl_certificate /etc/letsencrypt/live/blogof33.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blogof33.com/privkey.pem;
error_log /var/log/nginx/error.log;
location /.well-known/acme-challenge {
alias /home/ACool/sites/blogof33.com/DjangoBlog/.well-known/acme-challenge;
}
location /static {
alias /home/ACool/sites/blogof33.com/DjangoBlog/static;
}
location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/blogof33.com.socket;
}
}
여기서 첫 번째 서버 코드는 다음과 같습니다.
server {
charset utf-8;
listen 80;
server_name www.blogof33.com blogof33.com;
return 301 https://blogof33.com$request_uri;
}
모든 HTTP 트래픽을 HTTPS로 리디렉션한다는 뜻으로, 우리는 자신의 도메인 이름에 따라 도메인 이름을 수정하기만 하면 다른 부분은 변하지 않는다.
이 행은 443 포트(HTTPS 포트 번호)를 수신하는 데 사용됩니다.
listen 443 default ssl;
이 두 줄은 인증서와 키를 가리킨다. (도메인 이름은 자신의 것으로 바뀐다.)
ssl_certificate /etc/letsencrypt/live/blogof33.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blogof33.com/privkey.pem;
이 줄은 인증서를 만드는 데 사용됩니다.
location /.well-known/acme-challenge {
alias /home/ACool/sites/blogof33.com/DjangoBlog/.well-known/acme-challenge;
}
nginx 구성을 수정한 후 다시 로드합니다.
sudo nginx -s reload
이 구성이 완료되었습니다.브라우저 캐시를 새로 고치는 것을 잊지 마세요.
Let's Encrypt 자동 갱신
Let's Encrypt의 인증서는 90일이 지나면 만료되기 때문에 우리는 자동화 업데이트 스크립트를 설정해야 한다. 가장 쉬운 것은
setting.py
이다./etc/nginx/sites-available/blogof33.com
명령을 사용하여 다음과 같은 정시 작업에 가입(매주 강제 업데이트를 하고 루트 권한이 필요하면 루트 아래로 전환해서 실행해야 함):45 2 * * 2 cd /etc/letsencrypt/ && ./certbot-auto renew --deploy-hook "service nginx reload"
crontab 여섯 필드의 의미:
minute hour day month week command
여기에서:
만약 필드에 * 번호를 사용한다면, 예를 들어month 필드가 * 번호라면, 다른 필드의 제약을 만족시키기 위해 매달 이 명령을 실행합니다.
매주 2시 45분에 인증서 업데이트를 시도합니다. 인증서가 30일 안에 만료되면 인증서를 업데이트합니다. 그렇지 않으면 업데이트되지 않습니다.
crontab
옵션은 업데이트가 성공한 후에nginx를 다시 불러오는 명령을 실행합니다.이로써 Django 프레임워크에서 HTTPS 배치가 모두 완료되었습니다.
Welcome to the https world!더 이상 사이트 납치 걱정 안 해도 돼.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.