https://medium.com/harrythegreat/aws-로드밸런싱-알아보기-9fd0955f859e
https://medium.com/@vdongbin/aws-elb와-nginx로-https-서버-구축하기-736b8c5ee76
실 서비스 nginx.conf
upstream upstream {
server 127.0.0.1:8001;
keepalive 64;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
access_log /home/admin/log/nginx_test_access.log;
error_log /home/admin/log/nginx_test_error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass <http://upstream/>;
proxy_redirect off;
proxy_read_timeout 240s;
}
location /flower/static {
alias /home/admin/venv/lib/python3.7/site-packages/flower/static/;
}
location /flower/ {
rewrite ^/flower/(.*)$ /$1 break;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass <http://localhost:5555/>;
proxy_redirect off;
proxy_read_timeout 240s;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
}
client_max_body_size 20m;
}
https://sg-choi.tistory.com/540
X-Fowarded-For
프록시나 로드 밸런서를 통해 들어온 요청에서 클라이언트의 원 IP 주소를 확인하기 위해 사용하는 헤더값
보통 ELB에서 X-Forwarded-For
헤더에 클라이언트의 IP를 담아서 전달을 하게된다.
$proxy_add_x_fowarded_for
: nginx의 IP를 헤더에 덧붙이기
위의 값으로 설정을 하였을 경우
X-Forwarded-For: client-ip-address, nginx-ip-address
잘은 모르겠지만 아래와 같이 들어올 수 있다고 한다.
X-Forwarded-For: ip-address-1, client-ip-address, nginx-ip-address
결국 뒤에서 nginx-ip-address를 제외한 마지막 IP가 client의 IP로 판단할 수 있다.
$remote_addr
: client의 IP만 할당
X-Real_IP
X-Forwarded-For와 동일하게 애플리케이션에서 Client IP를 확인하기 위해 사용하는 헤더값
다느 X-Forwarded-For과 다르게 헤더값을 변조할 수 없다.
X-NginX-Proxy
프록시 설정을 true로 허용
Host
$http_host
: HTTP Reqeust의 Host 헤더값$host
: Host 헤더가 없다면 server_name → 포트값은 제외하고 소문자로 표시$server_name
: 해당 서버 블럭 이름$hostname
: nginx가 구동되는 머신 이름Upgrade
Connection
proxy_pass
특정 경로로 들어온 요청을 어떤 주소로 보낼 건지에 대한 설정이다.
upstream이라는 변수를 통해서