{"id":28393854,"url":"https://github.com/fluffy-melli/routenx","last_synced_at":"2025-06-26T11:32:32.218Z","repository":{"id":285053899,"uuid":"956842635","full_name":"fluffy-melli/RouteNX","owner":"fluffy-melli","description":"A reverse proxy server with a built-in firewall and intuitive web console for easy configuration and real-time monitoring.","archived":false,"fork":false,"pushed_at":"2025-06-09T13:50:19.000Z","size":1109,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-09T14:41:40.680Z","etag":null,"topics":["http","http-proxy-server","https","https-proxy-server","reverse-proxy","ssl-automation","ssl-support","web-console"],"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/fluffy-melli.png","metadata":{"files":{"readme":"README.KR.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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,"zenodo":null}},"created_at":"2025-03-29T00:45:40.000Z","updated_at":"2025-06-09T13:59:24.000Z","dependencies_parsed_at":"2025-03-29T07:26:34.433Z","dependency_job_id":"104b1eae-f213-4756-9244-c67a655f75f4","html_url":"https://github.com/fluffy-melli/RouteNX","commit_stats":null,"previous_names":["fluffy-melli/routenx"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/fluffy-melli/RouteNX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluffy-melli%2FRouteNX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluffy-melli%2FRouteNX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluffy-melli%2FRouteNX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluffy-melli%2FRouteNX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fluffy-melli","download_url":"https://codeload.github.com/fluffy-melli/RouteNX/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluffy-melli%2FRouteNX/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262056225,"owners_count":23251628,"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":["http","http-proxy-server","https","https-proxy-server","reverse-proxy","ssl-automation","ssl-support","web-console"],"created_at":"2025-05-31T17:09:32.708Z","updated_at":"2025-06-26T11:32:32.209Z","avatar_url":"https://github.com/fluffy-melli.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003e\n    \u003ca href=\"https://github.com/fluffy-melli/RouteNX/blob/main/README.KR.md\"\u003eKR\u003c/a\u003e /\n    \u003ca href=\"https://github.com/fluffy-melli/RouteNX/\"\u003eEN\u003c/a\u003e\n  \u003c/h3\u003e\n\u003c/div\u003e\n\n```sh\ngo build -o routenx ./main.go\npm2 start routenx --name routenx\n```\n\n\u003e [!NOTE]  \n\u003e Go 애플리케이션을 **`routenx`** 라는 실행 파일로 빌드하고,\n\u003e **PM2** 를 사용해 백그라운드에서 **`routenx`**를 실행합니다.\n\u003e **PM2** 는 프로세스를 자동으로 재시작하고 모니터링할 수 있습니다.\n\n---\n\n```sh\ndocker build -t routenx .\n```\n\n\u003e [!NOTE]  \n\u003e 현재 디렉토리를 빌드 컨텍스트로 사용하여 **`routenx`**라는 태그를 가진 Docker 이미지를 생성합니다.\n\n```sh\ndocker run -d \\\n    --restart unless-stopped \\\n    -p 80:80 -p 443:443 -p 3000:3000 \\\n    routenx\n```\n\n\u003e [!NOTE]  \n\u003e **`routenx`** 컨테이너를 **백그라운드(detached mode)**로 실행하며,  \n\u003e 수동으로 중지하지 않는 이상 자동으로 재시작됩니다.  \n\u003e 포트 **80**, **443**, **3000**을 호스트와 연결합니다.\n\n---\n\n```json\n\"port\": 80,\n\"ssl-port\": 443,\n\"web-port\": 3000\n```\n\n\u003e [!NOTE]  \n\u003e 포트 **80**은 HTTP, **443**은 HTTPS(SSL), **3000**은 웹 콘솔 인터페이스 용도로 사용됩니다.\n\n---\n\n```json\n\"ssl\": {\n  \"enabled\": true,\n  \"testing\": true,\n  \"email\": \"you@example.com\",\n  \"domains\": [\n    \"example.com\",\n    \"sub.example.com\"\n  ]\n}\n```\n\n\u003e [!WARNING]  \n\u003e `\"you@example.com\"`과 `\"example.com\"`을 실제 이메일과 도메인으로 반드시 교체하세요.  \n\u003e 유효하지 않은 값일 경우 SSL 인증서 발급이 실패합니다.\n\n\u003e [!TIP]  \n\u003e `\"testing\"`이 `true`로 설정되어 있으면 **Let's Encrypt의 스테이징 환경**에서 테스트용 인증서를 발급합니다.  \n\u003e 이는 개발 및 테스트에 유용하며 **요청 제한(rate limit)**을 피할 수 있습니다.  \n\u003e 실제 운영 환경에서는 `\"testing\": false`로 설정하여 실제 인증서를 받으세요.\n\n\u003e [!NOTE]  \n\u003e SSL이 활성화되며, HTTPS 트래픽을 위해 **443번 포트**에서 수신합니다.\n\n---\n\n```json\n\"firewalls\": [\n  {\n    \"name\": \"cloudflare\",\n    \"cidr\": [\n      \"173.245.48.0/20\",\n      \"103.21.244.0/22\",\n      \"... (기타)\",\n      \"2c0f:f248::/32\"\n    ],\n    \"block\": false\n  }\n]\n```\n\n\u003e [!TIP]  \n\u003e 이 방화벽 규칙을 사용하는 라우트는 **Cloudflare를 통해 들어오는 패킷만 허용**합니다.\n\n---\n\n```json\n\"routes\": [\n  {\n    \"host\": [\n      \"*.example.com\"\n    ],\n    \"firewall\": [\n      \"cloudflare\"\n    ],\n    \"endpoint\": \"http://localhost:2222\"\n  }\n]\n```\n\n\u003e [!NOTE]  \n\u003e `*.example.com`에서 들어오는 트래픽을 `localhost:2222`로 전달하며,  \n\u003e 오직 **Cloudflare IP로부터의 요청만 허용**합니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluffy-melli%2Froutenx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffluffy-melli%2Froutenx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluffy-melli%2Froutenx/lists"}