진행 중 실제 IP 획득
X-Real-IP
를 휴대 하고 사용 자 는 header 에 따라 실제 방문 IP 를 분석 할 수 있 습 니 다.특수 한 상황 에서 사용자 요청 은 여러 nginx 를 거 쳐 ingress 에 도달 할 수 있 습 니 다. 상기 방법 을 통 해 얻 은 것 은 사용자 의 실제 IP 가 아 닙 니 다.
request->nginx->…->ingress->backend
프로젝트 1 use - forward - headers
nginx - ingress 공식 제안 은 use - forward - headers 를 시작 하 는 것 입 니 다. 설정 은 다음 과 같 습 니 다.
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
data:
compute-full-forwarded-for: 'true'
use-forwarded-headers: 'true'
방안 2
이런 방식 은 확실히 작용 할 수 있 지만 사용자 피드백 이 켜 진 후에 ingres 백 엔 드 서 비 스 를 방문 하여 계속 보고
308
했 고 ingress 의 코드 가 켜 진 것 use-forwarded-headers
을 검사 한 후에 동시에 켜 진 것 ssl-redirect
으로 인해 308 이 발생 했다.그러면 저 희 는 nginx 설정 에 있 는 real - ip 설정 을 켜 야 합 니 다. 다음 과 같이
http-snippet
에 추가 real_ip_header X-Forwarded-For;
합 니 다.kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
data:
http-snippet: |
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
golang 에서 실제 ip 가 져 오기
func RemoteIP(r *http.Request) string {
ip := strings.TrimSpace(strings.Split(r.Header.Get("X-Original-Forwarded-For"), ",")[0])
if ip != "" {
return ip
}
ip = strings.TrimSpace(strings.Split(r.Header.Get("X-Forwarded-For"), ",")[0])
if ip != "" {
return ip
}
ip = strings.TrimSpace(r.Header.Get("X-Real-Ip"))
if ip != "" {
return ip
}
if ip, _, err := net.SplitHostPort(strings.TrimSpace(r.RemoteAddr)); err == nil {
return ip
}
return ""
}
주의 사항
nginx - ingress configmap 의 설정 은 전역 적 으로 유효 하 며, 출시 전에 엄격 한 테스트 가 필요 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
진행 중 실제 IP 획득일반적인 상황 에서 ingress 의 요청 을 통 해 header X-Real-IP 를 휴대 하고 사용 자 는 header 에 따라 실제 방문 IP 를 분석 할 수 있 습 니 다. 특수 한 상황 에서 사용자 요청 은...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.