{"id":13413826,"url":"https://github.com/bmf-san/gondola","last_synced_at":"2026-04-03T10:39:57.545Z","repository":{"id":195507968,"uuid":"693045206","full_name":"bmf-san/gondola","owner":"bmf-san","description":"A YAML based golang reverse proxy","archived":false,"fork":false,"pushed_at":"2025-03-21T23:38:09.000Z","size":5325,"stargazers_count":8,"open_issues_count":6,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-22T00:24:12.834Z","etag":null,"topics":["go","http","https","proxy-server","reverse-proxy","tls","webserver"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bmf-san.png","metadata":{"files":{"readme":"README-ja.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["bmf-san"]}},"created_at":"2023-09-18T08:31:50.000Z","updated_at":"2025-03-21T23:37:52.000Z","dependencies_parsed_at":"2023-10-21T14:38:57.731Z","dependency_job_id":"c6ed7c9e-1b4c-41db-be92-04373d2640a7","html_url":"https://github.com/bmf-san/gondola","commit_stats":{"total_commits":61,"total_committers":1,"mean_commits":61.0,"dds":0.0,"last_synced_commit":"b12b00a4a7183dcd24d252a35ab8cff9e238e45d"},"previous_names":["bmf-san/gondra"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmf-san%2Fgondola","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmf-san%2Fgondola/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmf-san%2Fgondola/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmf-san%2Fgondola/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bmf-san","download_url":"https://codeload.github.com/bmf-san/gondola/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249020057,"owners_count":21199481,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","http","https","proxy-server","reverse-proxy","tls","webserver"],"created_at":"2024-07-30T20:01:50.450Z","updated_at":"2026-04-03T10:39:57.515Z","avatar_url":"https://github.com/bmf-san.png","language":"Go","funding_links":["https://github.com/sponsors/bmf-san"],"categories":["Server Applications","服务器应用程序"],"sub_categories":["HTTP Clients","HTTP客户端"],"readme":"[English](https://github.com/bmf-san/gondola) [日本語](https://github.com/bmf-san/gondola/blob/master/README-ja.md)\n\n# Gondola\n[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge.svg)](https://github.com/avelino/awesome-go)\n[![GitHub release](https://img.shields.io/github/release/bmf-san/gondola.svg)](https://github.com/bmf-san/gondola/releases)\n[![Go Report Card](https://goreportcard.com/badge/github.com/bmf-san/gondola)](https://goreportcard.com/report/github.com/bmf-san/gondola)\n[![codecov](https://codecov.io/gh/bmf-san/gondola/branch/main/graph/badge.svg?token=ZLOLQKUD39)](https://codecov.io/gh/bmf-san/gondola)\n[![GitHub license](https://img.shields.io/github/license/bmf-san/gondola)](https://github.com/bmf-san/gondola/blob/main/LICENSE)\n[![Go Reference](https://pkg.go.dev/badge/github.com/bmf-san/gondola.svg)](https://pkg.go.dev/github.com/bmf-san/gondola)\n[![Sourcegraph](https://sourcegraph.com/github.com/bmf-san/gondola/-/badge.svg)](https://sourcegraph.com/github.com/bmf-san/gondola?badge)\n\nシンプルで柔軟な Go 製のリバースプロキシ\n\n## 特徴\n- 軽量で高速な実行\n- シンプルな設定ファイル（YAML）\n- 静的ファイルのホスティング\n- バーチャルホストサポート\n- 詳細なアクセスログ（nginx互換）\n- アクセスログの構造化出力（JSON）\n- TLS/SSL対応\n- トレースID対応\n- タイムアウト制御\n\n## インストール\n\n### Go\n```bash\ngo get github.com/bmf-san/gondola\n```\n\n### バイナリ\n[Releases](https://github.com/bmf-san/gondola/releases) ページから最新のバイナリをダウンロード\n\n### Docker\n```bash\ndocker pull bmf-san/gondola\ndocker run -v $(pwd)/config.yaml:/etc/gondola/config.yaml bmf-san/gondola\n```\n\n## 使用方法\n\n### コマンドラインオプション\n\n```bash\nUsage: gondola [options]\n\nOptions:\n  -config string    設定ファイルのパス（デフォルト: /etc/gondola/config.yaml）\n  -version         バージョン情報を表示\n  -help           ヘルプを表示\n```\n\n### 環境変数\n\n以下の環境変数でコマンドラインオプションを上書きできます：\n\n- `GONDOLA_CONFIG`: 設定ファイルのパス\n- `GONDOLA_LOG_LEVEL`: ログレベル（debug, info, warn, error）\n\n### シグナルハンドリング\n\nGondolaは以下のシグナルを処理します：\n\n- `SIGTERM`, `SIGINT`: グレースフルシャットダウン\n- `SIGHUP`: 設定ファイルの再読み込み\n- `SIGUSR1`: アクセスログの再オープン\n\n### 設定ファイル\n\n```yaml\nproxy:\n  port: \"8080\"\n  read_header_timeout: 2000  # ミリ秒\n  shutdown_timeout: 3000     # ミリ秒\n  log_level: \"info\"         # debug, info, warn, error\n  static_files:\n    - path: /public/\n      dir: /path/to/public\n\nupstreams:\n  - host_name: api.example.com\n    target: http://localhost:3000\n    read_timeout: 5000      # ミリ秒\n    write_timeout: 5000     # ミリ秒\n  - host_name: web.example.com\n    target: http://localhost:8000\n```\n\n### 起動例\n\n基本的な起動：\n```bash\ngondola -config config.yaml\n```\n\nデバッグモードで起動：\n```bash\nGONDOLA_LOG_LEVEL=debug gondola -config config.yaml\n```\n\nDocker での起動：\n```bash\ndocker run -v $(pwd)/config.yaml:/etc/gondola/config.yaml \\\n          -p 8080:8080 \\\n          bmf-san/gondola\n```\n\nsystemd での起動：\n```ini\n[Unit]\nDescription=Gondola Reverse Proxy\nAfter=network.target\n\n[Service]\nExecStart=/usr/local/bin/gondola -config /etc/gondola/config.yaml\nRestart=always\nEnvironment=GONDOLA_LOG_LEVEL=info\n\n[Install]\nWantedBy=multi-user.target\n```\n\n## アクセスログ\n\nnginxと互換性のある詳細なアクセスログを出力します。\n\n### ログフィールド\n\n1. クライアント情報\n- `remote_addr`: クライアントのIPアドレス\n- `remote_port`: クライアントのポート番号\n- `x_forwarded_for`: X-Forwarded-Forヘッダー\n\n2. リクエスト情報\n- `method`: HTTPメソッド（GET, POST等）\n- `request_uri`: フルリクエストURI\n- `query_string`: クエリパラメータ\n- `host`: Hostヘッダー\n- `request_size`: リクエストサイズ\n\n3. レスポンス情報\n- `status`: HTTPステータス\n- `body_bytes_sent`: レスポンスボディのサイズ\n- `bytes_sent`: レスポンス全体のサイズ\n- `request_time`: リクエスト処理時間（秒）\n\n4. アップストリーム情報\n- `upstream_addr`: バックエンドのアドレス\n- `upstream_status`: バックエンドのステータス\n- `upstream_size`: バックエンドのレスポンスサイズ\n- `upstream_response_time`: バックエンドの応答時間（秒）\n\n5. その他のヘッダー\n- `referer`: Refererヘッダー\n- `user_agent`: User-Agentヘッダー\n\n### ログ出力例\n\n```json\n{\n  \"level\": \"INFO\",\n  \"msg\": \"access_log\",\n  \"remote_addr\": \"192.168.1.100\",\n  \"remote_port\": \"54321\",\n  \"x_forwarded_for\": \"\",\n  \"method\": \"GET\",\n  \"request_uri\": \"/api/users\",\n  \"query_string\": \"page=1\",\n  \"host\": \"api.example.com\",\n  \"request_size\": 243,\n  \"status\": \"OK\",\n  \"body_bytes_sent\": 1532,\n  \"bytes_sent\": 1843,\n  \"request_time\": 0.153,\n  \"upstream_addr\": \"localhost:3000\",\n  \"upstream_status\": \"200 OK\",\n  \"upstream_size\": 1532,\n  \"upstream_response_time\": 0.142,\n  \"referer\": \"https://example.com\",\n  \"user_agent\": \"Mozilla/5.0 ...\",\n  \"trace_id\": \"550e8400-e29b-41d4-a716-446655440000\"\n}\n```\n\n# Projects\n- [The gondola's board](https://github.com/users/bmf-san/projects/1/views/1)\n\n# ADR\n- [ADR](https://github.com/bmf-san/gondola/discussions?discussions_q=is%3Aopen+label%3AADR)\n\n# コントリビューション\nIssueやPull Requestはいつでもお待ちしています。\n\n気軽にコントリビュートしてもらえると嬉しいです。\n\nコントリビュートする際は、以下の資料を事前にご確認ください。\n\n- [CODE_OF_CONDUCT](https://github.com/bmf-san/godra/blob/main/.github/CODE_OF_CONDUCT.md)\n- [CONTRIBUTING](https://github.com/bmf-san/godra/blob/main/.github/CONTRIBUTING.md)\n\n# スポンサー\nもし気に入って頂けたのならスポンサーしてもらえると嬉しいです！\n\n[Github Sponsors - bmf-san](https://github.com/sponsors/bmf-san)\n\nあるいはstarを貰えると嬉しいです！\n\n継続的にメンテナンスしていく上でのモチベーションになります :D\n\n# ライセンス\nMITライセンスに基づいています。\n\n[LICENSE](https://github.com/bmf-san/gondola/blob/main/LICENSE)\n\n# Stargazers\n[![Stargazers repo roster for @bmf-san/gondola](https://reporoster.com/stars/bmf-san/gondola)](https://github.com/bmf-san/gondola/stargazers)\n\n# Forkers\n[![Forkers repo roster for @bmf-san/gondola](https://reporoster.com/forks/bmf-san/gondola)](https://github.com/bmf-san/gondola/network/members)\n\n# 作者\n[bmf-san](https://github.com/bmf-san)\n\n- Email\n  - bmf.infomation@gmail.com\n- Blog\n  - [bmf-tech.com](http://bmf-tech.com)\n- Twitter\n  - [bmf-san](https://twitter.com/bmf-san)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmf-san%2Fgondola","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbmf-san%2Fgondola","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmf-san%2Fgondola/lists"}