-
[작성중] 프록시(proxy)memoir 2022. 3. 17. 08:55
공부하게 된 이유
https://github.com/jshemas/openGraphScraper
GitHub - jshemas/openGraphScraper: Node.js scraper service for Open Graph Info and More!
Node.js scraper service for Open Graph Info and More! - GitHub - jshemas/openGraphScraper: Node.js scraper service for Open Graph Info and More!
github.com
og스크래퍼 api문서를 보고 있었는데 <프록시를 사용하는 경우>라는 부분이 나와서 프록시가 뭔지 알아야 이걸 사용하는 지 판단 할 수 있을 것 같았다. 다행히 딱보고 아닌 것 같아서 프로미스로 구현했지만...
내가 필요한 소스코드가 아닌 것 같다고 판단한 이유는 뭔지 몰라도 저 샘플코드가 요청을 분기하는 것처럼 읽혔기 때문이다. 그런데 이러한 나의 추측이 확실하지 않을 수 있으니 이 부분은 조심하면 좋을 듯(왜냐면 방향설정 잘못하면 처음부터 구현해야..하기..때문..에.. 간단하게 개발하는 것이어서 문제가 생기진 않았으나 실제 일을 할 때는 조심해야겠다는 생각도 들었다.)
Proxy Example
Look here for more info on how to use proxies.
const ogs = require('open-graph-scraper'); const tunnel = require('tunnel'); const options = { url: 'https://whatismyipaddress.com/', timeout: 15000, agent: { // setting proxy agent for https requests https: tunnel.httpsOverHttp({ // test proxies can be found here: https://hidemy.name/en/proxy-list/?country=US&type=h#list or http://free-proxy.cz/en/proxylist/country/US/https/ping/all proxy: { host: 'proxy_ip', port: proxyPort, rejectUnauthorized: false, } }) } }; ogs(options) .then((data) => { const { error, result, response } = data; console.log('response:', response); // you should see the proxy IP in here })
Reference
https://www.varonis.com/blog/what-is-a-proxy-serverWhat is a Proxy Server and How Does it Work?
Learn the basics about proxies! Our guide to what is a proxy server includes benefits, risks and everything in between.
www.varonis.com
위 문서를 읽고 이해하려고 작성한 글입니다. with 파파고
프록시란?
대리인
프록시는 사용자와 인터넷 사이의 게이트웨이(통로)이자 중간서버이다.
작동방식
프록시 서버를 사용하는 경우
트래픽은 프록시를 경유하여 요청된 주소로 전송된다.
그런 다음 같은 프록시 서버를 통해 요청이 반환되고(예외가 존재하긴 함) 프록시서버는 웹사이트에서 받은 데이터를 사용자에게 전송한다.
그런데 이런 "경유지(Gateway)로서의 역할"만 한다면 왜 프록시를 사용하는 걸까?
프록시를 사용하는 이유
1. 데이터 보안
- 방화벽 및 필터역할
2. 네트워크 성능
- 데이터를 캐시하여 요청 속도를 높인다.프록시 서버는 자체 IP주소(의문 : 접근할 때 private인지 public인지 궁금)를 가진 인터넷상의 컴퓨터이다. 웹에서 요청을 보내면 요청이 먼저 프록시 서버로 전송되고, 프록시 서버는 사용자를 대신하여 웹 요청을 보내고 웹서버에서는 웹 페이지 데이터를 전달하여(response) 응답함으로써 사용자가 브라우저에서 웹 페이지를 볼 수 있도록 한다.
이 때 프록시 서버는 1. 요청을 보낼 때 사용자가 보낸 데이터를 변경할 수 있다. 2. 사용자가 볼 것이라고 예상되는 정보를 계속 얻을 수 있다.
예시
1. 제어 및 감시
프록시 서버는특정 웹사이트에 대한 엑세스를 거부하도록 설정할 수 있다.
프록시는 오리진과 유저 사이에서 유저가 어떤 요청을 했는 지 볼 수 있다.(프록시가 유저가 보내는 모든 웹 요청을 모니터링하고 기록할 수 있기 때문)
추가로, 특정한 권한이 있는 사용자에게만 통신이 되도록 프록시 서버를 사용할 수 있다.
* ) 이 때 오리진 서버처럼 리다이렉션을 역할을 해 줄 수 없다.(실제 서버처럼 동작하는 프록시가 오리진서버와 다른 점) 왜냐하면 아예 통신을 끊어주기 때문에 보안에 취약한 해킹 사이트에 접속하려고 한다면 프록시가 사용자의 접근을 차단함으로써 사용자를 보호할 수 있다.
2. 네트워크 성능
프록시 서버는 자주 사용되는 요청을 캐시해서 오리진처럼 대신 응답을 해줄 수 있다. 프록시는 대리인이라는 뜻을 가지고 있기 때문에 오리진을 대신해서 응답해주는 맥락으로 이해하면 될 듯 하다.
만약 유저가 특정 웹사이트에 대한 요청을 보내면 프록시 서버가 오리진 서버의 캐시된 데이터를 보내 줄 수 있는 지 확인하고 (프록시가 가지고 있다면) 오리진 대신 응답한다. 즉 동일한 프록시 서버에서 여러 명의 사용자가 동일한 오리진에 접속하면 프록시 서버가 (오리진과 유저의 중개자의 역할)로서 요청을 하나로 보내기 때문에 오리진 서버의 부담이 줄어든다.(대역폭 절감 및 속도 향상)
# 메모
객체 프록시...프록시에 접근할 때 객체에 프로퍼티를 추가하는 것처럼 다룰 수 있다(?)
캐시 : cdn vs proxy
오리진 서버한테 가는 중간에 데이터를 주면 프록시.
그래서 병목현상이 해결된다! (트래픽 분산)
cdn은 중앙서버에서 특정지점마다 지점을 낸 것. 캐시해놓은거랑 똑같은 응답을 보내준다.
중간자 공격(?) - 은행 비밀번호를 뺴내는(...)
프록시서버는 서버로부터 추적을 안당하게 할 수 있다!
reference에서 찾아본 관련 내용
보안 강화: 프록시 서버는 프라이버시상의 이점 외에 보안상의 이점을 제공합니다. 웹 요청을 암호화하도록 프록시 서버를 구성하여 탐색자가 트랜잭션을 읽지 못하도록 할 수 있습니다. 또한 알려진 멀웨어 사이트가 프록시 서버를 통해 액세스하지 못하도록 할 수도 있습니다. 또, 조직은 프록시 서버를 Virtual Private Network(VPN; 가상 프라이빗 네트워크)와 결합할 수 있기 때문에, 리모트 유저는 항상 회사 프록시를 개입시켜 인터넷에 액세스 할 수 있습니다. VPN은 기업이 외부 사용자 또는 리모트 사용자에게 제공하는 회사 네트워크에 대한 직접 연결입니다. VPN을 사용함으로써 기업은 사용자가 필요한 자원(이메일, 내부 데이터)에 액세스할 수 있는지 제어 및 확인할 수 있으며 사용자가 회사 데이터를 보호하기 위한 안전한 연결을 제공할 수도 있습니다.
https://www.strongdm.com/blog/difference-between-proxy-and-reverse-proxy
The Difference Between Proxy and Reverse Proxy | strongDM
In this post we dissect the differences between proxy & reverse proxy and explain how admins can use a reverse proxy for easy access management control.
www.strongdm.com
그런데 너무 개념이 헷갈렸다. 그래서 이게 클라가 이득인건지 오리진 서버가 이득인건지 구분을 잘 못해서 그런 것 같아서 예전에 리유님이 프록시 종류가 크게 2가지(리버스와 포워드)가 있다고 말씀해주신 것을 떠올리고 검색해보았다.
리유 — 2022.03.14.
(네 라디오들어요) 핑9림이 프록시 종류가 크게 2개라서 헷갈리시는거같기도..해유
리유 — 2022.03.14.
네네 포워드 프록시랑 리버스 프록시가 있어옘아니 말투 너무 친절하셔서 감동.. 이렇게 던져주면 감사히 잘 받겠습니다
리버스 프록시
: 서버를 보호하는 데 사용된다.
클라이언트로부터의 요청을 받아들여 (요청을) 다른 많은 서버로 전송하고, 요청을 실제로 처리한 오리진 서버로부터의 결과를 프록시 서버가 요청을 처리한 것처럼 클라이언트에 반환하는 서버이다. 클라이언트는 리버스 프록시 서버와 직접 통신할 뿐이며 다른 서버가 요청을 실제로 처리했는지 알 수 없다.(막간의 드립을 치면 왼손이 한 일을 오른손이 모르게 한 것. 클라한텐 비밀이지롱.. 오리진, 나 <프록시>가 요청을 대신 처리했다굿-!)역사와 전통의프록시 서버에서는, 여러 개의 클라이언트가 외부 네트워크에 트래픽을 라우팅 할 수 있다. 예를 들어, 기업에는 직원 트래픽을 공용 인터넷에 라우팅 및 필터링하는 프록시가 있을 수 있다. 그러나 리버스 프록시는, 여러 개의 서버를 대신해 트래픽을 라우팅한다.
리버스 프록시는 클라이언트, 사용자 및 응용 프로그램서버 간의 게이트웨이로 기능합니다. 액세스 정책 관리 및 트래픽 라우팅을 모두 처리하고 실제로 요청을 처리하는 서버의 ID를 보호합니다.
https://www.nginx.com/resources/glossary/reverse-proxy-server/
What is a Reverse Proxy Server? | NGINX
Discover the difference between proxy vs reverse proxy and learn how NGINX provides reverse proxy functionality for load balancing, web acceleration & more.
www.nginx.com
로드 밸런싱 – 리버스 프록시 서버는 백엔드 서버 앞에 배치되어 속도와 용량 활용률을 최대화하는 동시에 서버 그룹 전체에 클라이언트 요구를 분산하는 '트래픽 경찰' 역할을 할 수 있습니다.이것에 의해, 어느 서버도 과부하가 되지 않게 되어, 퍼포먼스가 저하하는 일이 있습니다. 서버가 다운되면 로드 밸런서는 트래픽을 나머지 온라인 서버로 리다이렉트다.
Web 액셀러레이션– 리버스 프록시는 인바운드 및 아웃바운드 데이터를 압축할 수 있을 뿐만 아니라 일반적으로 요구되는 콘텐츠를 캐시할 수 있기 때문에 클라이언트와 서버 간의 트래픽 흐름이 빨라다. 또한 SSL 암호화와 같은 추가 태스크를 수행하여 웹 서버의 부하를 덜어주므로 성능이 향상됩니다.
보안 및 익명성– 백엔드 서버로 향하는 요구를 대행 수신함으로써 리버스 프록시 서버는 해당 ID를 보호하고 보안 공격에 대한 추가 방어 역할을 합니다. 또한 로컬 영역 네트워크의 구조에 관계없이 단일 레코드 로케이터 또는 URL에서 여러 서버에 액세스할 수 있습니다.https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
NGINX Reverse Proxy | NGINX Plus
NGINX Reverse Proxy Configure NGINX as a reverse proxy for HTTP and other protocols, with support for modifying request headers and fine-tuned buffering of responses. This article describes the basic configuration of a proxy server. You will learn how to p
docs.nginx.com
요청 헤더를 수정하고 응답 버퍼링을 미세 조정하여 HTTP 및 기타 프로토콜의 역방향 프록시로 NGINX를 구성합니다.
이 문서에서는 프록시 서버의 기본 구성에 대해 설명합니다. NGINX에서 프록시 서버로 요청을 전달하고, 프록시 서버로 전송되는 클라이언트 요청 헤더를 수정하고, 프록시 서버에서 오는 응답 버퍼링을 구성하는 방법을 배우게 됩니다.'memoir' 카테고리의 다른 글
참고자료 npm vs npx (0) 2022.03.25 color-picker (0) 2022.03.17 깃 (0) 2022.03.02 간단한 shell 스크립트 만들고 bash로 실행시켜보기 (0) 2022.03.01 shell, curl, nvm (0) 2022.03.01