리버스프록시

프록시 서버는 클라이언트의 요청을 대신받아 내부 서버로 전달해줍니다.
내부서버의 노출을 최소화하고 필요하면 캐싱 로드밸런싱 TLS연결을 할 수있습니다.
리버스 프록시를 사용하기 위해서 도메인이 필요합니다.

리버스프록시 설정

/etc/nginx/sites-avilable 폴더에 파일을 만들고, 다음을 필요에따라 수정하여 작성합니다.
그 다음 /etc/nginx/sites-enabled 폴더에 심볼릭 링크를 만들어 활성화 합니다.

ln -s /etc/nginx/sutes-available/만든파일 /etc/nginx/sites-enabled/만든파일
server {
    listen [::]:80;
    listen 80;

    server_name example.com www.example.com;  # 서비스할 도메인으로 변경

    location / {
        # 기본값으로 설정
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        
        # 자신의 서버 IP로 변경
        proxy_pass http://127.0.0.1:8000;
        
    }
}

위는 클라이언트가 example.com/ 혹은 www.example.com/ 요청시 (이때 URL 경로는 '/') 127.0.0.1:8000으로 요청을 전달합니다. 서버의 응답 또한 nginx를 거쳐 클라이언트에게 전달됩니다.

proxy_set_header 는 nginx가 클라이언트의 요청을 전달하면서 헤더를 수정할때 사용합니다.
이 설정에서 사용된 헤더입니다.
X-Forwoarded-For: 현재까지 거쳐온 서버의 IP에 대한 정보
X-Forwarded-Proto: 클라이언트 요청 프로토콜
X-Real-IP: 클라이언트 IP
Host: 서버의 도메인 네임

proxy_pass 는 요청을 전달할 서버의 주소를 작성하면 됩니다.

서브도메인 사용법

서브도메인으로 접속시 다른 서버로 라우팅하는 방법입니다.
dns서버에서 미리 서브도메인 설정을 해야합니다.

Cloudflare

레코드는 CNAME, 이름은 서브도메인 이름, 대상은 루트 도메인을 입력합니다.

## 기존 설정 ##
server {
    listen [::]:80;
    listen 80;

    server_name example.com www.example.com;  # 서비스할 도메인으로 변경

    location / {
        # 기본값으로 설정
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        
        # 자신의 서버 IP로 변경
        proxy_pass http://127.0.0.1:8000;
        
    }
}

## 서브도메인 설정 ##
server {
    listen [::]:80;
    listen 80;

    server_name subdomain1.example.com;  # 서비스할 서브 도메인으로 변경

    location / {
        # 기본값으로 설정
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        
        # 또다른 자신의 서버 IP로 변경
        proxy_pass http://127.0.0.1:9999;
        
    }
}

웹소켓 사용법

웹소켓을 사용하는 서버는 아래 설정을 추가하면 정상작동 합니다,

server {
    listen [::]:80;
    listen 80;

    server_name example.com www.example.com;  # 서비스할 도메인으로 변경

    location / {
        # 기본값으로 설정
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        
        #### 추가 ####
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
        ##############
        
        # 웹소켓을 사용하는 자신의 서버 IP로 변경
        proxy_pass http://127.0.0.1:8000;
        
    }
}