
https://
Nginx가 내 서버 접두어가 붙은 사이트에 들어오는 요청을 다시 쓰도록 하려고 합니다. http://
(이 사이트에서 사용되는 CMS가 상대 경로 대신 URI를 강제하기 때문입니다. 본질적으로 이미지, 스크립트 및 스타일시트를 만들어 전체 사이트를 손상시킵니다. 없는).
현재 전임자가 제시한 기존 지시문을 개조하려고 노력하고 있지만 Nginx 구성 구문에 대한 지식이 부족하다는 것을 알게 되었습니다. 코드는 다음과 같습니다.
if ($ssl_protocol = "") {
rewrite ^ https://$http_host$request_uri? permanent;
}
http://
현재 to 의 강제 재작성을 방지하기 위해 이 코드를 주석 처리했지만 https://
사이트를 손상시키지 않고는 프로세스를 되돌릴 수 없습니다. 지금까지 시도한 내용은 다음과 같습니다.
if ($ssl_protocol = "https") {
rewrite ^ http://$http_host$request_uri? permanent;
}
그리고
# also tried ($ssl_protocol != "")
if (!($ssl_protocol = "")) {
rewrite ^ http://$http_host$request_uri? permanent;
}
첫 번째는 효과가 없는 것 같습니다. 클라이언트에 전송된 HTML은 여전히 다시 작성되지 않는 HTTPS 요청을 만듭니다.
두 번째 스니펫도 아무런 효과가 없는 것 같습니다. 제가 올바르게 이해했다면(여전히 다소 놀랐지만) Nginx는 부울 부정을 지원하지 않습니다.
이를 수행하는 가장 좋은 방법(또는 작동하는 방법)은 무엇입니까?
편집하다:@NathanC의 답변에서 코드를 추가해 보았습니다. 그러나 이 무조건적인 다시 쓰기로 인해 리디렉션 루프가 발생합니다. 도움을 주시면 감사하겠습니다.
답변1
더 깨끗한 방법은 다음과 같습니다.
if ( $scheme = "https" ) {
return 301 http://example.com$request_uri
또는 그것과 Nathans의 답변 사이 어딘가에 기본 SSL 서버 블록에는 단순히return 301
(SSL 블록이 무엇이든 구현 및 적응 방법을 확인하려면 자신의 블록을 자세히 살펴봐야 합니다)간단한 리디렉션을 위해 정규식을 수행할 필요가 없습니다.
return
-http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return
$https
편집: 방금 if 문에서 대신 사용할 수 있는 변수가 있다는 것을 알았습니다 ." "
https가 아닌 경우 반환:
if ( $https = "on" ) {
...
변경 사항을 테스트하는 동안 한 시간 전에 수정했지만 변경 사항이 브라우저에 반영되지 않은 경우 머리 당기는 것을 방지하기 위해 영구 302
리디렉션 대신 임시 리디렉션을 사용해야 합니다 . :)301
답변2
다음과 같이 모든 https 트래픽을 강제로 http로 전환할 수 있으므로 이것이 필요하지 않습니다.
server {
listen 443;
ssl on;
server_name example.com;
rewrite ^(.*) http://example.com$1 permanent;
}
참조:https://stackoverflow.com/questions/3470290/nginx-redirect-https-to-http