Tinyproxy로 역방향 에이전트를 시원하게 만들어 보도록 하겠습니다.

개시하다
포트를 하나의 포트로 정리하고 싶은데 아파치와nginx로 제대로 만들 정도는 아니야...생각하다가 Tinyproxy를 발견했어요.
최소한으로 설정하면 바로 사용할 수 있고 메모리 소모량도 적다.
The memory footprint tends to be around 2 MB with glibc
그래서 나는 웹 응용 프로그램을 역 에이전트로 사용해 보았다.
컨디션
$ tinyproxy -v
tinyproxy 1.10.0
샘플 응용 프로그램
docker-compose를 사용하여 리버스 프록시(Tinyproxy)와 웹 응용 프로그램을 이동합니다.
docker-compose.yml
version: '3'

services:
  # リバースプロキシ
  tinyproxy:
    image: vimagick/tinyproxy
    ports:
      - "8080:8080"
    volumes:
      - ./tinyproxy:/etc/tinyproxy
    restart: unless-stopped
    # -dでフォアグラウンド起動(デフォルトはバックグラウンド)
    entrypoint: tinyproxy -d -c /etc/tinyproxy/reverseproxy.conf
  # webアプリ(何でもいいけどここではワンライナーREST API)
  web:
    image: ghcr.io/syuparn/webawk:0.3.0
    entrypoint: ./webawk.sh 'GET("/names") { b["names"][1]="Taro"; res(200, b) }'
경로/example/ 아래는 example.com이고 아래는 웹 용기에 대한 에이전트입니다.

tinyproxy/reverseproxy.conf
# Tinyproxyの設定

User nobody
Group nobody

# 1024以下の場合はrootユーザー必要
Port 8080
Listen 0.0.0.0

# 60秒でタイムアウト
Timeout 60

# yesの場合普通のプロキシが使えなくなる。リバースプロキシの場合はyes推奨(公式)
ReverseOnly Yes

# example.com
ReversePath "/example/" "http://www.example.com/"

# webコンテナ
# NOTE: docker-composeはコンテナ名をホストとして名前解決可能
ReversePath "/web/" "http://web:8080/"
참고 자료
결실
# localhost:8080/example/ -> example.com
$ curl localhost:8080/example/
<!doctype html>
<html>
<head>
    <title>Example Domain</title>
...
# localhost:8080/web/ -> web:8080/ (webコンテナへコンテナ間通信)
$ curl localhost:8080/web/names
{"names":["Taro"]}
응답 헤드에 /web/가 추가되었습니다.
$ curl -i localhost:8080/web/names
HTTP/1.1 200 OK
Via: 1.1 e8667db7b85d (tinyproxy/1.11.0)
Content-Length: 18
Content-Type: application/json
Date: Sat, 04 Sep 2021 12:57:38 GMT

{"names":["Taro"]}
Via 옵션이 활성화된 경우 요청 소스의 IP 주소를 서버에 전송할 수 있습니다.
tinyproxy/reverseproxy.conf
# リクエストに "X-Tinyproxy" ヘッダ追加
XTinyproxy Yes
docker-compose.yml
    # webアプリ: リクエストヘッダ X-Tinyproxy をログだし
    entrypoint: ./webawk.sh 'GET("/names") { print("X-Tinyproxy ", REQUEST_HEADERS["X-Tinyproxy"]); b["names"][1]="Taro"; res(200, b) }'
$ docker-compose logs web
Attaching to tinyproxy-sample_web_1
web_1        | X-Tinyproxy  172.21.0.1
끝말
기본적으로 경로만 설정하면 사용할 수 있기 때문에 프레젠테이션 앱을 만드는 것이 매우 편리하다.(공격수) 에이전시 기능이 있어서 기회가 되면 한번 써보고 싶어요.

좋은 웹페이지 즐겨찾기