deploy django with url prefix in nginx
location / {
proxy_pass http://127.0.0.1:8888 ;
}
그러나 우리 가 웹 사 이 트 를 특정한 하위 디 렉 터 리 에 배치 하고 싶다 면 예 를 들 어 www. example. com / admin / 는 그리 간단 한 일이 아니다.다행히 django 프레임 워 크 는 비교적 완벽 해서 쉽게 이 임 무 를 완성 할 수 있 습 니 다.
https://docs.djangoproject.com/en/dev/ref/settings/#force-script-name
settings. py 에 FORCE 설정 하기SCRIPT_NAME, url 앞 에 쉽게 접 두 사 를 붙 일 수 있 습 니 다.
FORCESCRIPT_NAME = '/ admin' (마지막 에는 슬 래 쉬 / 가 없습니다)
또한 주의해 야 할 것 은 django template 의 url 은 {% url url name%} 로 생 성 되 어야 하 며, 백 엔 드 의 redirect 도 reverse 를 사용 해 야 합 니 다.
그리고 Nignx 에 서 는 다음 과 같은 설정 이 필요 합 니 다.
location ~ ^/admin(/?)(.*) {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8888/$2 ;
proxy_redirect http://www.example.com/ http://www.example.com/admin/;
}
ref: http://nginx.org/cn/docs/http/ngx_http_proxy_module.html
잠시 소개 해 드 리 겠 습 니 다.
proxy_pass 형식 은 proxypass http://host:port/uri/ location 에 맞 는 url 은 uri 로 바 뀌 기 때문에http://127.0.0.:8888완전한 url 을 전달 합 니 다.http://127.0.0.1:8888/ localtion 과 일치 하 는 것 을 제거 합 니 다.
URI 가 백 엔 드 서버 에 다음 규칙 에 따라 전 송 될 것 을 요청 합 니 다:
proxy_pass
URI 를 사용 하면 백 엔 드 서버 로 전송 요청 을 할 때, 설 정 된 경로 와 일치 하 는 요청 경 로 를 규범화 하면 명령 에 정 의 된 URI 로 대 체 됩 니 다.location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
proxy_pass
URI 를 사용 하지 않 으 면 백 엔 드 서버 로 전 송 된 요청 URI 일반 클 라 이언 트 가 시작 하 는 원본 URI 입 니 다. nginx 가 요청 URI 를 변경 하면 전 송 된 URI 는 nginx 가 변 경 된 후에 완전한 규범화 URI 입 니 다.location /some/path/ {
proxy_pass http://127.0.0.1;
}
proxy_redirct 역할 은 되 돌아 오 는 조정 url 을 바 꾸 는 것 입 니 다.
문법:
proxy_redirect default
; proxy_redirect off
; proxy_redirect redirect
replacement
;
기본 값:proxy_redirect default;
문맥:http
, server
, location
백 엔 드 서버 'Location' 응답 헤드 와 'Refresh' 응답 헤드 의 교체 텍스트 를 설정 합 니 다.백 엔 드 서버 가 돌아 오 는 응답 헤드 가 'Location: http://localhost:8000/two/some/uri/
' 라 고 가정 하면 명령proxy_redirect http://localhost:8000/two/ http://frontend/one/;
문자열 을 'Location: http://frontend/one/some/uri/
' 로 바 꿉 니 다.replacement
문자열 은 서버 이름 을 생략 할 수 있 습 니 다.proxy_redirect http://localhost:8000/two/ /;
ps. nginx 의 설정 이 정말 많 습 니 다. 도구 나 언어 를 잘 사용 하기 가 쉽 지 않 습 니 다.
##############################################################
보충: 위 설정 은 GET 요청 시 가 져 온 인 자 를 제거 합 니 다. 이렇게 바 꾸 면 됩 니 다. location ^~ /admin/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8888/ ;
proxy_redirect http://www.example.com/ http://www.example.com/admin/;
}
이것 때문에 저 는 다음 nginx 의 location 에 관 한 문 서 를 자세히 보 았 습 니 다. 예전 에 본 적 이 없고 모두 복사 하고 독선 적 인 이 해 를 가 집 니 다.
http://wiki.nginx.org/HttpCoreModule#location
위치 문법:
Syntax:
location [ =
| ~
| ~*
| ^~
] uri { ... }
우선 location 의 url 매 칭 은 두 가지 로 나 뉜 다. 정규 매 칭 은 일반 (글자) 과 일치 하고 ~ (대소 문자 민감) 또는 ~ * (대소 문자 민감 하지 않 음) 는 정규 매 칭 이 며, 기타 (= 접두사, ^ ~ 접두사 와 접두사 없 음) 는 모두 일반 매 칭 이다.
일치 하 는 순 서 는:
1. 정확하게 일치 하 는 (= 접두사) 와 일치 합 니 다. 있 으 면 일치 하지 않 습 니 다.
2. 일반 일치 와 일치 합 니 다. ^ ~ 접두사 라면 일치 하지 않 습 니 다. 그렇지 않 으 면 세 번 째 정규 일치 가 진 행 됩 니 다.
3. 정규 일치, 정규 정의 순서에 따라 일치, 일치 가 정지 되면 일치
4. 정규 매 칭 이 없 으 면 2 단계 에서 얻 은 매 칭 을 되 돌려 줍 니 다 (최대 접두사 가 일치 합 니 다. 예 를 들 어 상 / 과 / doc / 가 일치 하면 / doc / 의 매 칭 을 되 돌려 줍 니 다)
이 절 내용 은 나 로 하여 금 정규 일치 가 왜 GET 방법 파라미터 에 영향 을 미 치 는 지 알 게 하지 못 했 지만, 나 로 하여 금 nginx 의 location 일치 규칙 을 더욱 잘 이해 하 게 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.