Nginx 프록시에서 PM2 웹 서버로 실제 IP 전달

Nginx 프록시에서 PM2 웹 서버로 실제 IP 전달

평균 스택으로 구동되고 PM2를 사용하여 제공되는 API가 있습니다. HTTP 엔드포인트를 다음 위치에 노출합니다.http://89.89.89.89:8080(예제 IP) - 브라우저를 사용하여 직접 접속할 수 있습니다.

Nginx를 설치했으며 다음 구성을 사용하여 동일한 서버의 API로 요청을 리디렉션하고 있습니다.

server {
        listen 8081;
        server_name example.com;

        location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header  X-Forwarded-Host $remote_addr;
        proxy_pass http://127.0.0.1:8080;
        }
}

위의 내용은 작동하며 다음에서 API에 액세스할 수 있습니다.http://89.89.89.89:8081(Nginx 포트), 그러나 대상에 대한 요청은 127.0.0.1에서 발생합니다. 실제 사용자의 IP 주소를 PM2로 전달하고 싶습니다. 여러 솔루션을 검색하고 시도했지만 작동하지 않습니다.

올바른 방향으로의 도움이나 조언을 부탁드립니다.

답변1

모듈이 포함된 nginx가 필요하거나 --with-http_realip_module모듈 없이도 할 수 있어야 합니다.

모듈이 있는지 확인하십시오 nginx -v.

모듈이 없으면 구성 로그 형식에 다음을 지정해야 합니다. 예:

log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent"';

access_log  /var/log/nginx/access.log  main;

real_ip_header X-Forwarded-For;

이 후 nginx를 다시 시작하고 로그를 확인하십시오.

모듈이 설치된 경우 그에 따라 구성을 수정해야 합니다.

# Directives for setting real_ip/XFF IP address in log files
set_real_ip_from    192.168.101.10; #IP address of master LB
real_ip_header      X-Forwarded-For;

실제 IP 모듈은 클라이언트 소스 IP 주소를 헤더의 값으로 변경하는 데 사용됩니다. 우리는 IP 주소가 192.168.101.10인 서버에서 들어오는 트래픽에 대해 실제 IP 주소를 설정하고 싶었습니다.

다시 한번 말씀드리지만, 변경 후에는 nginx 서비스를 다시 시작해야 합니다.

관련 정보