개발용 HTTP 프록시를 쉽게 세우는 뒷 기술

/etc/hosts를 다시 쓰지 않아도 부담없이 특정 서버에 통신할 수 있는 프록시를 갖고 싶었는데, 의외로 딱 좋은 것이 없었기 때문에 자작했습니다.

<추기>
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 등과 병용하는 것으로 함부로 편리하게 된다





물론 개발기에 연결되어 있는지 알 수 없게 될 위험성이 항상 있습니다.

요약



접속처를 재기록할 수 있는 프록시라고 의외로 간편한 것이 없는 것이군요.

이번에는 다소 어려운 일은 하지 않지만, 로깅이나 퍼포먼스의 측정, 액세스 제어 등 간단하게 쓸 수 있습니다.

표준 루비 라이브러리에서 작동하기 때문에 필요할 때 빨리 스스로 설치하는 것과 같은 사용법을 할 수 있으므로 편리 할 것 같습니다.

좋은 웹페이지 즐겨찾기