250x250
syk531
하루
syk531
전체 방문자
오늘
어제
  • 분류 전체보기 (166)
    • 개발 (166)
      • java (11)
      • kotlin (7)
      • spring, spring boot (35)
      • Javascript (4)
      • Tyhmeleaf (2)
      • Kafka (17)
      • Docker (8)
      • Kubernetes (3)
      • Elastic Stack (4)
      • react native (3)
      • Web (4)
      • GIS (3)
      • 리눅스 (16)
      • Windows (2)
      • 네트워크 (2)
      • 안드로이드앱 (5)
      • git (2)
      • Tool (15)
      • 프로젝트 (7)
      • 백준알고리즘 (14)
      • DB (2)

인기 글

최근 글

블로그 메뉴

    공지사항

    태그

    • 오블완
    • 뉴스앱
    • 티스토리챌린지

    최근 댓글

    티스토리

    hELLO · Designed By 정상우.
    syk531

    하루

    개발/Tool

    [nginx] 프록시 서버 설정 방법

    2025. 4. 30. 15:47
    728x90
    반응형

    프록시 서버를 설정해야 할 일이 생겨서 nginx를 사용해서 프록시 서버를 설정했습니다.

    프록시 서버는 아래와 같이 특정 프로세스에서 카카오 주소 검색 api를 호출할때 proxy 서버를 통하도록 하기 위해서 설정했습니다.

    (spring boot 프로세스 -> nginx 프록시 서버 -> 카카오 주소 검색 api 호출)

     

    1.nginx 설치(ubuntu 환경)

    # nginx 설치
    sudo apt install nginx -y
    
    # nginx 실행
    sudo systemctl enable nginx && sudo systemctl start nginx
    
    # nginx 상태 확인
    sudo systemctl status nginx
    
    # nginx 문법 확인
    sudo nginx -t

    2.default 파일 수정

    /etc/nginx/sites-available/default 파일에서 기존에 80 포트 사용 server 블록 삭제 or 주석 처리 후 아래의 서버 블록를 추가합니다.

    로컬 서버(127.0.0.1)의 80번 포트에서 수신하도록 설정하고, /kakao/ 경로로 들어오는 요청을 https://dapi.kakao.com 으로 전달할 수 있습니다

    server {
        listen 127.0.0.1:80;
        server_name localhost;
    
        location /kakao/ {
            proxy_pass https://dapi.kakao.com/;
            proxy_set_header Host dapi.kakao.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_ssl_server_name on;
            # 필요한 경우 SSL 인증서 검증 설정 추가 가능 (아래 참조)
        }
    }

    3.수정 내용 반영

    # 문법 확인
    sudo nginx -t
    # 시스템 갱신
    sudo systemctl reload nginx
    # 시스템 재시작
    sudo systemctl restart nginx

    4.spring boot 소스 수정

    var result = restClient.get()
                .uri { uriBuilder ->
                    /*
                    uriBuilder.scheme("https")
                        .host("dapi.kakao.com")
                        .path("/v2/local/geo/coord2regioncode.json")
                        .queryParam("x", x)
                        .queryParam("y", y)
                        .build()
    
                     */
                    uriBuilder.scheme("http")
                        .host("localhost")
                        .path("/kakao/v2/local/geo/coord2regioncode.json")
                        .queryParam("x", x)
                        .queryParam("y", y)
                        .build()
                }
                .headers { headers ->
                    headers.set("Authorization", "KakaoAK ${key}")
                }
                .retrieve()
                .onStatus(HttpStatusCode::is5xxServerError) { req, res ->
                    logger.info { "API 호출이 실패하였습니다. statusCode : ${res.statusCode}" }
                }
                .body(KakaoDto::class.java)
    
            return result ?: KakaoDto()

    5.curl 테스트

    curl -i -H 'Authorization: KakaoAK {REST_API_KEY}' \
         'http://localhost/kakao/v2/local/geo/coord2regioncode.json?x=126.822486&y=37.196312'

    응답결과

    {"meta":{"total_count":2},"documents":[{"region_type":"B","code":"4159026222","address_name":"경기도 화성시 남양읍 신남리","region_1depth_name":"경기도","region_2depth_name":"화성시","region_3depth_name":"남양읍","region_4depth_name":"신남리","x":126.81633529935203,"y":37.18600973189887},{"region_type":"H","code":"4159026200","address_name":"경기도 화성시 남양읍","region_1depth_name":"경기도","region_2depth_name":"화성시","region_3depth_name":"남양읍","region_4depth_name":"","x":126.82377585283497,"y":37.21178748486248}]}
    728x90
    반응형
    저작자표시 (새창열림)

    '개발 > Tool' 카테고리의 다른 글

    [InfluxDB] InfluxDB Flux 쿼리와 SQL 비교  (0) 2025.03.27
    [Keycloak] 외부 DB 인증·인가 이력 저장 및 조회 방법  (0) 2025.02.05
    [Jenkins] Jenkins 빌드 번호 변경하는 방법: Script Console 활용 가이드  (0) 2024.11.18
    [Jenkins] 파이프라인 빌드 오류 해결: Gradle 설정 문제  (2) 2024.11.14
    Keycloak Client 문제 해결: 401 에러 및 DB Node 관련 문제 해결 방법  (0) 2024.08.23
      '개발/Tool' 카테고리의 다른 글
      • [InfluxDB] InfluxDB Flux 쿼리와 SQL 비교
      • [Keycloak] 외부 DB 인증·인가 이력 저장 및 조회 방법
      • [Jenkins] Jenkins 빌드 번호 변경하는 방법: Script Console 활용 가이드
      • [Jenkins] 파이프라인 빌드 오류 해결: Gradle 설정 문제
      syk531
      syk531
      기억을 위해 기록을.

      티스토리툴바