Nginx 역방향 에이전트 가 특수 문 자 를 자동 으로 인 코딩 하지 않 는 문 제 를 해결 합 니 다.

문제 의 원인 은 Nginx 를 이용 하여 역방향 대 리 를 할 때 다음 링크 를 방문 해 야 하기 때 문 입 니 다.http://192.168.14.141/iserver/services/3D-0524hd/rest/realspace/datas/0524hd/data/path/Tile_+003_+011/Tile_+003_+011_L5_00003. s3m 중 192.168.14.141 이 192.168.14.41: 8090 실제 요청 시 404 로 되 돌 아 왔 습 니 다. 서비스 로 그 를 보면 서버 에서 받 은 Nginx 요청 이 이 링크 임 을 알 수 있 습 니 다 (후반 부 주의).
http://192.168.14.141/iserver/services/3D-0524hd/rest/realspace/datas/0524hd/data/path/Tile_+003_+011/Tile_+003_+011_L5_00003.s3m
만약 내 가 8090 포트 를 직접 요청 한다 면 서버 가 실제로 받 은 요청 은 다음 과 같다.
http://192.168.14.141/iserver/services/3D-0524hd/rest/realspace/datas/0524hd/data/path/Tile_%2B003_%2B011/Tile_%2B003_%2B011_L5_00003.s3m
'+' 번 호 는 '% 2B' 가 아 닌 인 코딩 되 어야 하 는데 Nginx 가 인 코딩 을 하지 않 아서 404 요청 을 했 습 니 다.
+ 번 호 를% 2B 로 수 동 으로 써 서 Nginx 에 요청 합 니 다. Nginx 는 대상 서버 에 요청 할 때 + 번 으로 요청 합 니 다.
해결 방법: 인 코딩 문 제 를 수 동 으로 처리 합 니 다.
        location /server {
        	set $modified_uri $request_uri;
			if ($modified_uri ~ "^/([\w]{2})(/.*)") {
				set $modified_uri $1;
			}
        	proxy_pass http://192.168.14.141:8090$modified_uri;
        }

자세 한 내용 은:https://stackoverflow.com/questions/31266629/nginx-encoding-normalizing-part-of-uri
공식 문서 첨부:
If proxy_pass is specified without a URI, the request URI is passed to the server in the same form as sent by a client when the original request is processed, or the full normalized request URI is passed when processing the changed URI:
하면, 만약, 만약...pass 에 구체 적 인 URI 가 지정 되 지 않 았 습 니 다. 그러면 Nginx 의 URI 에 대상 서버 로 그대로 전송 해 달라 고 요청 합 니 다.수 동 으로 + 번 호 를 인 코딩 하 더 라 도 Nginx 는 디 코딩 을 할 것 같 습 니 다. 마지막 으로 보 낸 요청 은 인 코딩 이 없습니다.

좋은 웹페이지 즐겨찾기