개발용 HTTP 프록시를 쉽게 세우는 뒷 기술
<추기>
proxy.pac로 충분하다는 의견을 부코메에서 받았습니다만, 하고 싶은 것은 「프로덕션 리버스 프록시나 로드 밸런서를 통하지 않고 특정의 서버에만 임의의 타이밍으로 액세스 하는 수단」을, 시스템 파일 재기록을 수반하지 않고 실시하는 방법이므로 이번 컨셉과는 조금만 다른 것입니다.
루비마에는 Webrick에서 프록시 서버 기사가 있습니다.
#!/usr/bin/env ruby
require 'webrick'
require 'webrick/httpproxy'
# プロキシサーバオブジェクトを作る
s = WEBrick::HTTPProxyServer.new({})
# SIGINT を捕捉する。
Signal.trap('INT') do
# 捕捉した場合、シャットダウンする。
s.shutdown
end
# サーバを起動する。
s.start
이런 식으로 거는 거야.
우선 구조를 이해
service 메소드가 본체인 것 같다.
HTTP 통신 요구가 발생했을 때, CONNECT의 경우는 do_CONNECT 메소드에, 그 이외는 proxy_service 메소드에 흔들린다. 인수는 (req, res)입니다.
do_CONNECT는 req.unparsed_uri를 기반으로 연결을 설정합니다. 그렇지 않은 사람은 req.host 를 사용해 http 모듈에 위양하고 있는 것 같다.
여기까지 알면 괜찮아.
example.com에 대한 모든 통신을 AWS (ELB)로 향하는 프록시 만들기
뭐 이미지적으로는 example.com 은 사실은 어딘가로 제대로 움직이고 있지만, 개발용으로 AWS 에 세운 어딘가의 로드 밸런서를 향하고 싶다고 생각해요.
이것을 참고로 커스터마이즈 했다.
require 'webrick'
require 'webrick/httpproxy'
UPSTREAM='fugafuga-example-no-1-1111.ap-northeast-1.elb.amazonaws.com'
def rewrite_url(uri)
uri.sub!(/^.+example\.com/, UPSTREAM)
end
class ProxyServer < WEBrick::HTTPProxyServer
# HTTP の場合はここで書き換え
def proxy_service(req, res)
print "proxy_service: #{req.host} -> "
rewrite_url(req.host)
puts req.host
super
end
# CONNECT の場合はここで書き換え (HTTPSの確立のタイミングなど)
def do_CONNECT(req, res)
print "proxy_connect: #{req.unparsed_uri} -> "
rewrite_url(req.unparsed_uri)
puts req.unparsed_uri
# プロキシのメイン処理
super
end
end
config = { :BindAddress => '0.0.0.0', :Port => 8080, :Logger => WEBrick::Log::new(nil, WEBrick::Log::WARN), }
s = ProxyServer.new( config )
Signal.trap('INT') do
s.shutdown
end
s.start
나왔다.
Firefox의 FoxyProxy 등과 병용하는 것으로 함부로 편리하게 된다
물론 개발기에 연결되어 있는지 알 수 없게 될 위험성이 항상 있습니다.
요약
접속처를 재기록할 수 있는 프록시라고 의외로 간편한 것이 없는 것이군요.
이번에는 다소 어려운 일은 하지 않지만, 로깅이나 퍼포먼스의 측정, 액세스 제어 등 간단하게 쓸 수 있습니다.
표준 루비 라이브러리에서 작동하기 때문에 필요할 때 빨리 스스로 설치하는 것과 같은 사용법을 할 수 있으므로 편리 할 것 같습니다.
Reference
이 문제에 관하여(개발용 HTTP 프록시를 쉽게 세우는 뒷 기술), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ma2saka/items/da28409d51d883b7dba4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)