SSL로 리디렉션은 작동하지만 변수 가져오기는 작동하지 않습니다.

SSL로 리디렉션은 작동하지만 변수 가져오기는 작동하지 않습니다.

나는 nginx를 가지고 있고 서버 부분과 포트 80에서 다음과 같이 호스트를 포트 443으로 리디렉션합니다.

server {
   location / {
       return 307 https://$host$request_uri/?lang=fa
   }
}

작동하고 SSL로 리디렉션되지만 SSL 블록에 위치를 넣으면 재귀적으로 다음과 같은 결과가 나타납니다.

https://mydomain//?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa

설정을 해야 하는데 https방법 https://mydomain/?lang=fa을 모르겠습니다.

답변1

변수가 제대로 작동하는 것 같습니다. 문제는 기본적으로 URL 쿼리 문자열 부분만 추가하므로 URI 경로 부분은 동일하게 유지된다는 것입니다. location /리디렉션 후에도 일치하고(연속 슬래시와 병합되어) 무한 재귀를 얻게 됩니다.

이는 URL 사양에 쿼리 문자열 매개변수의 순서, 즉 https://mydomain/?lang=fa&foo=bar에 대한 요청이 중요하지 않다고 명시되어 있기 때문입니다 https://mydomain/?foo=bar&lang=fa.

nginx는 locationURI 경로 부분과만 일치합니다. 바라보다이 문제는 서버 장애로 인해 발생합니다.:

질문:nginx 위치 블록이 URL 쿼리 문자열과 일치할 수 있나요?

짧은 답변:아니요.

문서 참조:https://nginx.org/en/docs/http/request_processing.html

해당 섹션을 추가한 후 요청으로 실제로 무엇을 하려는지 알지 못하면 ?lang=fa유효한 예를 제시하기가 어렵습니다 .

관련 정보