나는 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는 location
URI 경로 부분과만 일치합니다. 바라보다이 문제는 서버 장애로 인해 발생합니다.:
질문:nginx 위치 블록이 URL 쿼리 문자열과 일치할 수 있나요?
짧은 답변:아니요.
문서 참조:https://nginx.org/en/docs/http/request_processing.html
해당 섹션을 추가한 후 요청으로 실제로 무엇을 하려는지 알지 못하면 ?lang=fa
유효한 예를 제시하기가 어렵습니다 .