카테고리:

1 분 소요

문제 상황

Apache였다면, apache_request_headers() 함수를 사용하여 헤더들을 넘겨 받아서 사용하겠지만 Nginx에서는 해당 함수를 사용할 수 없기 때문에 사용 방법이 조금 다르다.

해결 방안

결론 부터 말하자면, $_SERVER를 이용해서 넘겨 받을 수 있다.

아래와 같이 사용자 정의 헤더(CURL-REAL-IP)를 전송하려고 한다.

※ 헤더는 -만 사용해야하고 불가피하게 _을 사용하려고 하면 underscores_in_headers on; 옵션을 추가해줘야한다.

Talend API Tester를 통해 사용자 정의 헤더를 전송한 화면

Nginx를 통과하여 php에 도착하면 $_SERVER에 HTTP_라는 접두사가 붙은채로 아래와 같이 도착해있다.

Talend API Tester를 통해 사용자 정의 헤더를 전송한 화면

소스 코드

서버단 php에서 사용할 때는 다음과 같이 사용한다.

<?php
$client_ip = $_SERVER['HTTP_X_REAL_IP'];

if(!empty($_SERVER['HTTP_CURL_REAL_IP'])){
	$client_ip = $_SERVER['HTTP_CURL_REAL_IP'];
}

echo $client_ip;
?>

태그: $_SERVER, curl, header, HTTP_CURL_REAL_IP, HTTP_X_REAL_IP, nginx, php, underscores_in_headers

업데이트: