시놀로지 docker로 웹사이트 구동 시 Real IP 문제 도움 부탁드립니다.
시놀로지에서 도커를 이용해 php 사이트 몇개를 돌리고 있습니다.
도커로 돌리면 방문자 IP가 nginx proxy manager의 IP로 나오는 문제를 해결아려고 달소님 글을 포함, 아래의 글들을 참고했습니다만, 해결이 되지 않고 있습니다.
https://blog.dalso.org/home-server/2239
https://easyengine.io/tutorials/nginx/forwarding-visitors-real-ip/
nginx proxy manager에서 IP 전달은 기본적으로 설정이 되어있는것으로 보이고, 서비스가 실행되는 nginx에서도 위 내용에 맞추어 설정을 했으나, 도커 브릿지 네트워크의 게이트웨이 IP가 나옵니다.
구성 환경은
공유기 - DS920+ 도커입니다.
80, 443 포트포워딩을 도커 nginx proxy manager의 80, 443과 매칭시켜놨습니다.
서비스 nginx의 기본 설정은 아래와 같습니다.
#nginx.conf
user nginx;
worker_processes auto; # use "grep processor /proc/cpuinfo | wc -l" and type the number here, or stay with automatic configuration
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024; # use "ulimit -n" and type the number here
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
server_names_hash_bucket_size 128;
keepalive_timeout 65;
charset urtf-8;
server_tokens off;
proxy_hide_header X-Powered-By;
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 100M;
large_client_header_buffers 2 1k;
client_body_timeout 12;
client_header_timeout 12;
send_timeout 10;
gzip on;
gzip_disable ¡°MSIE [1-6].(?!.*SV1)¡±;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/rss+xml text/javascript image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype image/x-icon;
gzip_vary on;
gzip_proxied any;
gzip_static on;
#Set Real IP
set_real_ip_from 172.10.0.0/16; # Docker Subnet
real_ip_header X-Real-IP;
real_ip_recursive on;
include /etc/nginx/fastcgi.conf;
include /etc/nginx/conf.d/*.conf;
}
찾아본 다른 글들에서는 conf.d 내의 server 안에 넣으라고 하는것도 있어 그렇게 적용을 해보기도 했으나 도커 브릿지 네트워크의 게이트웨이가 계속 나오네요 ㅡ.ㅡ;;
다른 부분은 거진 해결했는데, 이게 해결이 안되니 답답합니다;
다른 기기에서는 npm 없이 컨테이너를 띄우고 DSM 기본 역방향 프록시를 사용하는데 이건 제대로 넘어가고 있습니다;
제가 놓친 부분이나 잘못 설정된 부분이 있을까요?
혹시나 해서..
NPM쪽과 서비스 양쪽 도커 컨테이너 내부로 접근하셔서 설정파일 바꿔주셨을까요?
+ 설정값 변경후.. 리로드 작업이 필요한데 진행이 됐는지 모르겠네요.
아니면 넘기려고하는 프록시 호스트의 nginx advanced 설정값에 넣었을때는 어떻게 나올까요?
advanced에 넣어도 동일한 결과가 나옵니다 -_-;
http { 에 넣으라는 글도 있고, server { 앞에 넣으라는것도 있고, location / { 에 넣으라고 하는것도 있어 조합을 바꿔서 시도해보았으나 동일한 결과가 나옵니다.
정상 동작하는 오라클 인스턴스와 파일 하나하나 비교해봐도 동일합니다 ㅋㅋㅋㅋㅋㅋㅋ 환장하겠습니다.
NPM 컨테이너 내부에서 봤을 때는 프록시 설정에 공통으로 proxy.conf 를 인클루드하고, 이 파일 안에 관련 내용이 잘 들어가 있습니다.
수신 컨테이너에서도 정상 설정이 되어있으며, 모두 리로드는 했습니다.
결정적으로, 동일한 docker-compose.yml을 가지고 오라클 프리티어에 돌렸을때는 IP를 정상적으로 받아옵니다. 즉, 설정의 문제는 아님으로 결론냈습니다. 다른곳에서 원인을 찾아야 할 것 같습니다 ㅠㅠ...
https://svrforum.com/nas/366302
이거네요!!!!!!!!!!!!!!!
정말 감사합니다. ㅠㅠ.... 이리저리 검색해봐도 안나왔는데.. 제 검색력이 딸렸었네요.
앗 이 이슈였군요 ㅎㅎ 생각지도 못했습니다
그래도 한참 삽질하다가 여기라면 아는 분 있을 것 같아 글을 썼는데, 다행입니다ㅎㅎ
하.. 이거 해결하고 기뻐하던 찰나, 본가에 proxmox 돌리는 서버가 죽었나봅니다. 응답이 없네요 ㅠㅠ..
cmt alert