nginx 역방향 에이전트 에서 실제 IP 와 도 메 인 이름 을 가 져 옵 니 다.

nginx 역방향 프 록 시 후 응용 프로그램 에서 얻 은 ip 은 모두 역방향 프 록 시 서버 의 ip 입 니 다. 얻 은 도 메 인 이름 도 역방향 프 록 시 설정 의 url 도 메 인 이름 입 니 다. 이 문 제 를 해결 하려 면 nginx 역방향 프 록 시 설정 에 설정 정 보 를 추가 해 야 합 니 다. 클 라 이언 트 의 실제 ip 과 도 메 인 이름 을 응용 프로그램 에 전달 하기 위해 서 입 니 다.
 
nginx 역방향 프 록 시 설정 시 아래 설정 을 추가 합 니 다:
      proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header REMOTE-HOST $remote_addr;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
그 중에서 첫 번 째 줄 은 host 에 대한 설정 이 고 도 메 인 이름 전달 에 대한 설정 이 며 나머지 는 IP 와 관련 이 있 습 니 다.
 
php 에서 클 라 이언 트 의 실제 IP 가 져 오기:
/**
 *      ip
 */	
 function getClientIP() {
 	$ip = "unknown";
 	/*
 	 *     localhost   ,     “::1”     。
 	 * ::1     ipv6  ,  ipv6           。
 	 *   ip        ipv6          。
 	 * */
	if (isset($_SERVER)) {
		if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
			$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
		} elseif (isset($_SERVER["HTTP_CLIENT_ip"])) {
			$ip = $_SERVER["HTTP_CLIENT_ip"];
		} else {
			$ip = $_SERVER["REMOTE_ADDR"];
		}
	} else {
		if (getenv('HTTP_X_FORWARDED_FOR')) {
			$ip = getenv('HTTP_X_FORWARDED_FOR');
		} elseif (getenv('HTTP_CLIENT_ip')) {
			$ip = getenv('HTTP_CLIENT_ip');
		} else {
			$ip = getenv('REMOTE_ADDR');
		}
	}
	if(trim($ip)=="::1"){
		$ip="127.0.0.1";
	}
	return $ip; 
}

 
자바 클 라 이언 트 의 실제 IP 획득:
public String getClientIP(HttpServletRequest request) { 
    String ip = request.getHeader("x-forwarded-for"); 
    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
        ip = request.getHeader("Proxy-Client-IP"); 
    } 
    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
        ip = request.getHeader("WL-Proxy-Client-IP"); 

    } 
    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
        ip = request.getRemoteAddr(); 
    } 
    return ip; 
} 

 
 
php 도 메 인 이름 가 져 오기:
 
$_SERVER['SERVER_NAME'];

 
 
자바 도 메 인 이름 가 져 오기:
 
request.getServerName()

좋은 웹페이지 즐겨찾기