@robiki/proxy 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +101 -395
- package/README.es.md +100 -394
- package/README.ja.md +101 -395
- package/README.md +101 -395
- package/README.pl.md +101 -395
- package/README.ru.md +100 -394
- package/README.zh.md +100 -394
- package/dist/{config-CeJ1tf8T.d.ts → config-Bmt0asXb.d.ts} +5 -11
- package/dist/config-C-0wrirG.js +315 -0
- package/dist/{config-CQ7zIaQt.d.ts → config-CCOdQL7F.d.ts} +7 -11
- package/dist/{config-_6LOsppp.d.ts → config-DtfpOtWI.d.ts} +30 -73
- package/dist/index.d.ts +14 -2
- package/dist/index.js +30 -58
- package/dist/utils/config.d.ts +1 -1
- package/dist/utils/config.js +3 -215
- package/package.json +2 -5
package/README.ja.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# 🚀 Robiki プロキシ
|
|
2
2
|
|
|
3
|
-
> WebSocket サポート、設定可能なルーティング、CORS
|
|
3
|
+
> WebSocket サポート、設定可能なルーティング、CORS、リクエスト検証を備えた高性能な HTTP/2 リバースプロキシ。npm パッケージまたは Docker コンテナとしてローカル開発環境で使用できます。
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@robiki/proxy)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
|
-
## 🌍 言語
|
|
8
|
+
## 🌍 言語
|
|
9
9
|
|
|
10
10
|
[English](README.md) | [Deutsch](README.de.md) | [中文](README.zh.md) | [日本語](README.ja.md) | [Polski](README.pl.md) | [Español](README.es.md) | [Русский](README.ru.md)
|
|
11
11
|
|
|
@@ -18,54 +18,29 @@
|
|
|
18
18
|
- **✅ リクエスト検証**:認証、レート制限などのカスタム検証ロジック
|
|
19
19
|
- **🔄 URL リマッピング**:ターゲットサービスに転送する前に URL を変換
|
|
20
20
|
- **📦 デュアル使用**:npm パッケージまたは Docker コンテナとして使用
|
|
21
|
+
- **⚙️ JavaScript & TypeScript 設定サポート**:Docker で関数を使用した `.js` または `.ts` 設定ファイルを使用
|
|
21
22
|
- **🎯 マルチポートサポート**:複数のポートで同時にリッスン
|
|
22
23
|
- **⚡ 高性能**:Node.js ネイティブ HTTP/2 実装に基づく
|
|
23
24
|
|
|
24
25
|
## 📦 インストール
|
|
25
26
|
|
|
26
|
-
### npm
|
|
27
|
+
### npm パッケージ
|
|
27
28
|
|
|
28
29
|
```bash
|
|
29
30
|
npm install @robiki/proxy
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```bash
|
|
31
|
+
# または
|
|
33
32
|
yarn add @robiki/proxy
|
|
34
33
|
```
|
|
35
34
|
|
|
36
|
-
### Docker
|
|
35
|
+
### Docker
|
|
37
36
|
|
|
38
37
|
```bash
|
|
39
38
|
docker pull robiki/proxy:latest
|
|
40
39
|
```
|
|
41
40
|
|
|
42
|
-
### Docker Compose サービスとして
|
|
43
|
-
|
|
44
|
-
```yaml
|
|
45
|
-
services:
|
|
46
|
-
proxy:
|
|
47
|
-
image: robiki/proxy:latest
|
|
48
|
-
container_name: robiki-proxy
|
|
49
|
-
restart: unless-stopped
|
|
50
|
-
ports:
|
|
51
|
-
- '443:443'
|
|
52
|
-
- '8080:8080'
|
|
53
|
-
- '9229:9229'
|
|
54
|
-
volumes:
|
|
55
|
-
- ./proxy.config.json:/app/proxy.config.json:ro
|
|
56
|
-
- ./certs:/app/certs:ro
|
|
57
|
-
networks:
|
|
58
|
-
- app-network
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## 注意事項
|
|
62
|
-
|
|
63
|
-
- ローカルで設定されたホストは、ローカルの `hosts` ファイルに追加する必要があります。
|
|
64
|
-
- カスタム証明書を使用する場合は、証明書ファイルを `certs` ディレクトリに追加する必要があります。
|
|
65
|
-
|
|
66
41
|
## 🚀 クイックスタート
|
|
67
42
|
|
|
68
|
-
### npm
|
|
43
|
+
### npm パッケージ
|
|
69
44
|
|
|
70
45
|
```javascript
|
|
71
46
|
import { createProxy } from '@robiki/proxy';
|
|
@@ -88,13 +63,11 @@ const proxy = await createProxy({
|
|
|
88
63
|
},
|
|
89
64
|
},
|
|
90
65
|
});
|
|
91
|
-
|
|
92
|
-
console.log('プロキシサーバーが実行中です!');
|
|
93
66
|
```
|
|
94
67
|
|
|
95
|
-
### Docker
|
|
68
|
+
### Docker
|
|
96
69
|
|
|
97
|
-
|
|
70
|
+
`proxy.config.json` を作成:
|
|
98
71
|
|
|
99
72
|
```json
|
|
100
73
|
{
|
|
@@ -108,20 +81,14 @@ console.log('プロキシサーバーが実行中です!');
|
|
|
108
81
|
"api.example.com": {
|
|
109
82
|
"target": "backend-service:3000",
|
|
110
83
|
"ssl": true
|
|
111
|
-
},
|
|
112
|
-
"example.com": {
|
|
113
|
-
"target": "frontend-service:8080",
|
|
114
|
-
"ssl": false
|
|
115
84
|
}
|
|
116
85
|
}
|
|
117
86
|
}
|
|
118
87
|
```
|
|
119
88
|
|
|
120
|
-
|
|
89
|
+
`docker-compose.yml` を作成:
|
|
121
90
|
|
|
122
91
|
```yaml
|
|
123
|
-
version: '3.8'
|
|
124
|
-
|
|
125
92
|
services:
|
|
126
93
|
proxy:
|
|
127
94
|
image: robiki/proxy:latest
|
|
@@ -133,25 +100,9 @@ services:
|
|
|
133
100
|
- ./certs:/app/certs:ro
|
|
134
101
|
environment:
|
|
135
102
|
- PROXY_CONFIG=/app/proxy.config.json
|
|
136
|
-
networks:
|
|
137
|
-
- app-network
|
|
138
|
-
|
|
139
|
-
backend-service:
|
|
140
|
-
image: your-backend-image
|
|
141
|
-
networks:
|
|
142
|
-
- app-network
|
|
143
|
-
|
|
144
|
-
frontend-service:
|
|
145
|
-
image: your-frontend-image
|
|
146
|
-
networks:
|
|
147
|
-
- app-network
|
|
148
|
-
|
|
149
|
-
networks:
|
|
150
|
-
app-network:
|
|
151
|
-
driver: bridge
|
|
152
103
|
```
|
|
153
104
|
|
|
154
|
-
|
|
105
|
+
起動:
|
|
155
106
|
|
|
156
107
|
```bash
|
|
157
108
|
docker-compose up -d
|
|
@@ -159,9 +110,9 @@ docker-compose up -d
|
|
|
159
110
|
|
|
160
111
|
## 📖 設定
|
|
161
112
|
|
|
162
|
-
###
|
|
113
|
+
### JSON 設定
|
|
163
114
|
|
|
164
|
-
|
|
115
|
+
シンプルな宣言的設定:
|
|
165
116
|
|
|
166
117
|
```json
|
|
167
118
|
{
|
|
@@ -169,24 +120,17 @@ docker-compose up -d
|
|
|
169
120
|
"ssl": {
|
|
170
121
|
"key": "./certs/key.pem",
|
|
171
122
|
"cert": "./certs/cert.pem",
|
|
172
|
-
"ca": "./certs/ca.pem",
|
|
173
123
|
"allowHTTP1": true
|
|
174
124
|
},
|
|
175
125
|
"cors": {
|
|
176
126
|
"origin": "*",
|
|
177
|
-
"methods": ["GET", "POST", "PUT", "DELETE"
|
|
178
|
-
"
|
|
179
|
-
"credentials": true,
|
|
180
|
-
"maxAge": 86400
|
|
127
|
+
"methods": ["GET", "POST", "PUT", "DELETE"],
|
|
128
|
+
"credentials": true
|
|
181
129
|
},
|
|
182
130
|
"routes": {
|
|
183
131
|
"api.example.com": {
|
|
184
|
-
"target": "backend
|
|
185
|
-
"ssl": true
|
|
186
|
-
"cors": {
|
|
187
|
-
"origin": ["https://example.com"],
|
|
188
|
-
"credentials": true
|
|
189
|
-
}
|
|
132
|
+
"target": "backend:3000",
|
|
133
|
+
"ssl": true
|
|
190
134
|
},
|
|
191
135
|
"*.example.com": {
|
|
192
136
|
"target": "wildcard-service:4000",
|
|
@@ -196,78 +140,32 @@ docker-compose up -d
|
|
|
196
140
|
}
|
|
197
141
|
```
|
|
198
142
|
|
|
199
|
-
###
|
|
200
|
-
|
|
201
|
-
環境変数を使用してプロキシを設定することもできます:
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
# SSL 設定
|
|
205
|
-
SSL_KEY=/app/certs/key.pem
|
|
206
|
-
SSL_CERT=/app/certs/cert.pem
|
|
207
|
-
SSL_CA=/app/certs/ca.pem
|
|
208
|
-
SSL_ALLOW_HTTP1=true
|
|
209
|
-
|
|
210
|
-
# CORS 設定
|
|
211
|
-
CORS_ORIGIN=*
|
|
212
|
-
CORS_METHODS=GET,POST,PUT,DELETE,OPTIONS
|
|
213
|
-
CORS_HEADERS=Content-Type,Authorization
|
|
214
|
-
CORS_CREDENTIALS=true
|
|
215
|
-
|
|
216
|
-
# デバッグモード
|
|
217
|
-
DEBUG=true # プロキシ接続とエラーの詳細なログを有効にする
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
## 🎯 高度な使用法
|
|
221
|
-
|
|
222
|
-
### URL リマッピング
|
|
223
|
-
|
|
224
|
-
ターゲットサービスに転送する前に URL を変換:
|
|
225
|
-
|
|
226
|
-
```javascript
|
|
227
|
-
const config = {
|
|
228
|
-
routes: {
|
|
229
|
-
'api.example.com': {
|
|
230
|
-
target: 'backend:3000',
|
|
231
|
-
ssl: true,
|
|
232
|
-
remap: (url) => {
|
|
233
|
-
// /api プレフィックスを削除
|
|
234
|
-
return url.replace(/^\/api/, '');
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
};
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### リクエスト検証
|
|
143
|
+
### JavaScript 設定
|
|
242
144
|
|
|
243
|
-
|
|
145
|
+
URL リマッピングや検証などの高度な機能用:
|
|
244
146
|
|
|
245
147
|
```javascript
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
message: '認証されていません',
|
|
254
|
-
headers: { 'www-authenticate': 'Bearer' },
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
return { status: true };
|
|
148
|
+
// proxy.config.js
|
|
149
|
+
export default {
|
|
150
|
+
ports: [443, 8080],
|
|
151
|
+
ssl: {
|
|
152
|
+
key: './certs/key.pem',
|
|
153
|
+
cert: './certs/cert.pem',
|
|
154
|
+
allowHTTP1: true,
|
|
258
155
|
},
|
|
259
156
|
routes: {
|
|
260
157
|
'api.example.com': {
|
|
261
158
|
target: 'backend:3000',
|
|
262
159
|
ssl: true,
|
|
263
|
-
//
|
|
160
|
+
// URL リマッピング
|
|
161
|
+
remap: (url) => url.replace(/^\/api/, ''),
|
|
162
|
+
// リクエスト検証
|
|
264
163
|
validate: async (info) => {
|
|
265
|
-
|
|
266
|
-
if (!rateLimit.allowed) {
|
|
164
|
+
if (!info.headers.authorization) {
|
|
267
165
|
return {
|
|
268
166
|
status: false,
|
|
269
|
-
code:
|
|
270
|
-
message: '
|
|
167
|
+
code: 401,
|
|
168
|
+
message: 'Unauthorized',
|
|
271
169
|
};
|
|
272
170
|
}
|
|
273
171
|
return { status: true };
|
|
@@ -277,93 +175,80 @@ const config = {
|
|
|
277
175
|
};
|
|
278
176
|
```
|
|
279
177
|
|
|
280
|
-
###
|
|
178
|
+
### TypeScript 設定
|
|
281
179
|
|
|
282
|
-
|
|
180
|
+
完全な IDE サポート付きの型安全な設定:
|
|
283
181
|
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
182
|
+
```typescript
|
|
183
|
+
// proxy.config.ts
|
|
184
|
+
import type { ServerConfig, ConnectionInfo } from '@robiki/proxy';
|
|
185
|
+
|
|
186
|
+
const config: ServerConfig = {
|
|
187
|
+
ports: [443, 8080],
|
|
188
|
+
ssl: {
|
|
189
|
+
key: './certs/key.pem',
|
|
190
|
+
cert: './certs/cert.pem',
|
|
191
|
+
allowHTTP1: true,
|
|
293
192
|
},
|
|
294
193
|
routes: {
|
|
295
194
|
'api.example.com': {
|
|
296
195
|
target: 'backend:3000',
|
|
297
196
|
ssl: true,
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
197
|
+
remap: (url: string) => url.replace(/^\/api/, ''),
|
|
198
|
+
validate: async (info: ConnectionInfo) => {
|
|
199
|
+
if (!info.headers['x-api-key']) {
|
|
200
|
+
return { status: false, code: 401, message: 'API Key Required' };
|
|
201
|
+
}
|
|
202
|
+
return { status: true };
|
|
302
203
|
},
|
|
303
204
|
},
|
|
304
205
|
},
|
|
305
206
|
};
|
|
306
|
-
```
|
|
307
207
|
|
|
308
|
-
|
|
208
|
+
export default config;
|
|
209
|
+
```
|
|
309
210
|
|
|
310
|
-
|
|
211
|
+
### 環境変数
|
|
311
212
|
|
|
312
|
-
```
|
|
313
|
-
|
|
213
|
+
```bash
|
|
214
|
+
# SSL 設定
|
|
215
|
+
SSL_KEY=/app/certs/key.pem
|
|
216
|
+
SSL_CERT=/app/certs/cert.pem
|
|
217
|
+
SSL_ALLOW_HTTP1=true
|
|
314
218
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
// デフォルトのプロキシ動作にフォールバック
|
|
321
|
-
const { restAPIProxyHandler } = await import('@robiki/proxy/connections');
|
|
322
|
-
return restAPIProxyHandler(req, res);
|
|
323
|
-
};
|
|
219
|
+
# CORS 設定
|
|
220
|
+
CORS_ORIGIN=*
|
|
221
|
+
CORS_METHODS=GET,POST,PUT,DELETE
|
|
222
|
+
CORS_CREDENTIALS=true
|
|
324
223
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
websocket: customWebSocketHandler,
|
|
328
|
-
stream: customStreamHandler,
|
|
329
|
-
});
|
|
224
|
+
# デバッグモード
|
|
225
|
+
DEBUG=true
|
|
330
226
|
```
|
|
331
227
|
|
|
332
228
|
## 🔧 API リファレンス
|
|
333
229
|
|
|
334
|
-
### `createProxy(config: ServerConfig)
|
|
335
|
-
|
|
336
|
-
指定された設定でプロキシサーバーを作成して起動します。
|
|
337
|
-
|
|
338
|
-
**パラメータ:**
|
|
339
|
-
|
|
340
|
-
- `config`:サーバー設定オブジェクト
|
|
341
|
-
|
|
342
|
-
**戻り値:** `ProxyServer` インスタンスに解決される Promise
|
|
230
|
+
### `createProxy(config: ServerConfig)`
|
|
343
231
|
|
|
344
|
-
|
|
232
|
+
プロキシサーバーを作成して起動します。
|
|
345
233
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
- `start()`:プロキシサーバーを起動
|
|
349
|
-
- `stop()`:プロキシサーバーを停止
|
|
350
|
-
- `getConfig()`:現在の設定を取得
|
|
351
|
-
|
|
352
|
-
### 設定タイプ
|
|
353
|
-
|
|
354
|
-
#### `ServerConfig`
|
|
234
|
+
**ServerConfig:**
|
|
355
235
|
|
|
356
236
|
```typescript
|
|
357
237
|
interface ServerConfig {
|
|
358
238
|
ports?: number[];
|
|
359
|
-
ssl?:
|
|
239
|
+
ssl?: {
|
|
240
|
+
key: string;
|
|
241
|
+
cert: string;
|
|
242
|
+
ca?: string;
|
|
243
|
+
allowHTTP1?: boolean;
|
|
244
|
+
};
|
|
360
245
|
routes: Record<string, RouteConfig>;
|
|
361
246
|
cors?: CorsConfig;
|
|
362
247
|
validate?: (info: ConnectionInfo) => Promise<ForwardValidationResult>;
|
|
363
248
|
}
|
|
364
249
|
```
|
|
365
250
|
|
|
366
|
-
|
|
251
|
+
**RouteConfig:**
|
|
367
252
|
|
|
368
253
|
```typescript
|
|
369
254
|
interface RouteConfig {
|
|
@@ -375,265 +260,86 @@ interface RouteConfig {
|
|
|
375
260
|
}
|
|
376
261
|
```
|
|
377
262
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
```typescript
|
|
381
|
-
interface CorsConfig {
|
|
382
|
-
origin?: string | string[];
|
|
383
|
-
methods?: string[];
|
|
384
|
-
allowedHeaders?: string[];
|
|
385
|
-
exposedHeaders?: string[];
|
|
386
|
-
credentials?: boolean;
|
|
387
|
-
maxAge?: number;
|
|
388
|
-
}
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
#### `ConnectionInfo`
|
|
392
|
-
|
|
393
|
-
```typescript
|
|
394
|
-
interface ConnectionInfo {
|
|
395
|
-
id: number;
|
|
396
|
-
method: string;
|
|
397
|
-
path: string;
|
|
398
|
-
remoteAddress: string;
|
|
399
|
-
scheme: string;
|
|
400
|
-
authority: string;
|
|
401
|
-
origin: string;
|
|
402
|
-
headers: IncomingHttpHeaders;
|
|
403
|
-
query: URLSearchParams;
|
|
404
|
-
type: RequestType;
|
|
405
|
-
}
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
## 🐳 Docker の使用
|
|
409
|
-
|
|
410
|
-
### 別のプロジェクトで使用
|
|
263
|
+
## 🐳 Docker 使用
|
|
411
264
|
|
|
412
|
-
|
|
265
|
+
設定ファイル(JSON、.cjs、または .ts)をマウント:
|
|
413
266
|
|
|
414
267
|
```yaml
|
|
415
268
|
services:
|
|
416
269
|
proxy:
|
|
417
270
|
image: robiki/proxy:latest
|
|
418
|
-
ports:
|
|
419
|
-
- '443:443'
|
|
420
|
-
- '8080:8080'
|
|
421
271
|
volumes:
|
|
422
|
-
- ./proxy.config.
|
|
272
|
+
- ./proxy.config.cjs:/app/proxy.config.cjs:ro
|
|
423
273
|
- ./certs:/app/certs:ro
|
|
424
|
-
|
|
425
|
-
-
|
|
426
|
-
|
|
427
|
-
your-service:
|
|
428
|
-
image: your-service-image
|
|
429
|
-
networks:
|
|
430
|
-
- your-network
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
2. `proxy.config.json` でサービスを指すようにルートを設定
|
|
434
|
-
|
|
435
|
-
3. スタックを起動:
|
|
436
|
-
|
|
437
|
-
```bash
|
|
438
|
-
docker-compose up -d
|
|
439
|
-
```
|
|
440
|
-
|
|
441
|
-
### カスタムイメージのビルド
|
|
442
|
-
|
|
443
|
-
カスタム Dockerfile を作成:
|
|
444
|
-
|
|
445
|
-
```dockerfile
|
|
446
|
-
FROM robiki/proxy:latest
|
|
447
|
-
|
|
448
|
-
# 設定をコピー
|
|
449
|
-
COPY proxy.config.json /app/proxy.config.json
|
|
450
|
-
COPY certs /app/certs
|
|
451
|
-
|
|
452
|
-
# 環境変数を設定
|
|
453
|
-
ENV PROXY_CONFIG=/app/proxy.config.json
|
|
274
|
+
environment:
|
|
275
|
+
- PROXY_CONFIG=/app/proxy.config.cjs
|
|
454
276
|
```
|
|
455
277
|
|
|
456
|
-
##
|
|
457
|
-
|
|
458
|
-
より多くの使用例については、`examples/` ディレクトリを確認してください:
|
|
459
|
-
|
|
460
|
-
- `basic-usage.js` - シンプルなプロキシ設定
|
|
461
|
-
- `advanced-usage.js` - 高度な機能(検証、CORS、リマッピング)
|
|
462
|
-
- `custom-handlers.js` - カスタムリクエストハンドラー
|
|
463
|
-
- `docker-compose.example.yml` - 完全な Docker 設定
|
|
464
|
-
|
|
465
|
-
## 🔐 SSL/TLS 証明書
|
|
466
|
-
|
|
467
|
-
### 自己署名証明書の生成
|
|
278
|
+
## 🔐 SSL 証明書
|
|
468
279
|
|
|
469
|
-
|
|
280
|
+
### 開発環境(自己署名)
|
|
470
281
|
|
|
471
282
|
```bash
|
|
472
283
|
mkdir -p certs
|
|
473
284
|
openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes
|
|
474
285
|
```
|
|
475
286
|
|
|
476
|
-
### Let's Encrypt
|
|
477
|
-
|
|
478
|
-
本番環境では、Let's Encrypt 証明書を使用:
|
|
287
|
+
### 本番環境(Let's Encrypt)
|
|
479
288
|
|
|
480
289
|
```bash
|
|
481
290
|
certbot certonly --standalone -d example.com
|
|
482
291
|
```
|
|
483
292
|
|
|
484
|
-
次に、設定で参照:
|
|
485
|
-
|
|
486
|
-
```json
|
|
487
|
-
{
|
|
488
|
-
"ssl": {
|
|
489
|
-
"key": "/etc/letsencrypt/live/example.com/privkey.pem",
|
|
490
|
-
"cert": "/etc/letsencrypt/live/example.com/fullchain.pem"
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
## 🤝 貢献
|
|
496
|
-
|
|
497
|
-
貢献を歓迎します!お気軽にプルリクエストを送信してください。
|
|
498
|
-
|
|
499
|
-
## 📄 ライセンス
|
|
500
|
-
|
|
501
|
-
MIT © Robiki sp. z o.o.
|
|
502
|
-
|
|
503
|
-
## 🔗 リンク
|
|
504
|
-
|
|
505
|
-
- [GitHub リポジトリ](https://github.com/robiki-ai/robiki-proxy)
|
|
506
|
-
- [npm パッケージ](https://www.npmjs.com/package/@robiki/proxy)
|
|
507
|
-
- [イシュートラッカー](https://github.com/robiki-ai/robiki-proxy/issues)
|
|
508
|
-
|
|
509
|
-
## 💡 ユースケース
|
|
510
|
-
|
|
511
|
-
- **マイクロサービスアーキテクチャ**:ドメイン/パスに基づいて異なるサービスにリクエストをルーティング
|
|
512
|
-
- **開発環境**:複数のサービスをテストするためのローカルプロキシ
|
|
513
|
-
- **API ゲートウェイ**:認証とレート制限を備えた集中エントリポイント
|
|
514
|
-
- **SSL ターミネーション**:プロキシレベルで SSL/TLS を処理
|
|
515
|
-
- **CORS 管理**:集中型 CORS 設定
|
|
516
|
-
- **ロードバランシング**:複数のインスタンスにトラフィックを分散(カスタムハンドラーを使用)
|
|
517
|
-
|
|
518
293
|
## 🛠️ トラブルシューティング
|
|
519
294
|
|
|
520
295
|
### デバッグモード
|
|
521
296
|
|
|
522
|
-
|
|
297
|
+
詳細なログを有効化:
|
|
523
298
|
|
|
524
299
|
```bash
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
# または Docker で
|
|
300
|
+
DEBUG=true node your-script.js
|
|
301
|
+
# または
|
|
529
302
|
docker run -e DEBUG=true robiki/proxy:latest
|
|
530
|
-
|
|
531
|
-
# または docker-compose.yml で
|
|
532
|
-
services:
|
|
533
|
-
proxy:
|
|
534
|
-
image: robiki/proxy:latest
|
|
535
|
-
environment:
|
|
536
|
-
- DEBUG=true
|
|
537
303
|
```
|
|
538
304
|
|
|
539
|
-
`DEBUG=true` の場合、プロキシは以下をログに記録します:
|
|
540
|
-
- すべてのプロキシ接続試行(REST、WebSocket、HTTP/2 ストリーム)
|
|
541
|
-
- リクエストとレスポンスの詳細
|
|
542
|
-
- 接続エラーとタイムアウト
|
|
543
|
-
- プロキシエラーとクライアントエラー
|
|
544
|
-
|
|
545
305
|
### ポートが既に使用中
|
|
546
306
|
|
|
547
|
-
プロキシは、設定されたポートのプロセスを自動的に終了しようとします。失敗した場合は、手動でポートを解放:
|
|
548
|
-
|
|
549
307
|
```bash
|
|
550
308
|
lsof -ti:443 | xargs kill -9
|
|
551
|
-
lsof -ti:8080 | xargs kill -9
|
|
552
309
|
```
|
|
553
310
|
|
|
554
|
-
### SSL 証明書エラー
|
|
555
|
-
|
|
556
|
-
証明書ファイルが読み取り可能で、正しい形式(PEM)であることを確認してください。開発では、自己署名証明書を使用します。
|
|
557
|
-
|
|
558
|
-
### WebSocket 接続の問題
|
|
559
|
-
|
|
560
|
-
WebSocket ルートが正しいプロトコル(ws/wss)で設定されており、ターゲットサービスが WebSocket 接続をサポートしていることを確認してください。
|
|
561
|
-
|
|
562
311
|
## 🧪 テスト
|
|
563
312
|
|
|
564
|
-
Robiki Proxy には、ユニットテスト、統合テスト、高度なシナリオをカバーする包括的なテストスイートが含まれています。
|
|
565
|
-
|
|
566
|
-
### テストの実行
|
|
567
|
-
|
|
568
313
|
```bash
|
|
569
314
|
# すべてのテストを実行
|
|
570
315
|
yarn test
|
|
571
316
|
|
|
572
|
-
#
|
|
573
|
-
yarn test:watch
|
|
574
|
-
|
|
575
|
-
# カバレッジ付きでテストを実行
|
|
317
|
+
# カバレッジ付き
|
|
576
318
|
yarn test:coverage
|
|
577
319
|
|
|
578
|
-
#
|
|
579
|
-
yarn test:ui
|
|
580
|
-
```
|
|
581
|
-
|
|
582
|
-
### テストカバレッジ
|
|
583
|
-
|
|
584
|
-
テストスイートには以下が含まれます:
|
|
585
|
-
|
|
586
|
-
- **ユニットテスト**:設定、ユーティリティ、ヘッダー変換、CORS 処理
|
|
587
|
-
- **統合テスト**:HTTP プロキシ、ルート解決、検証、設定読み込み
|
|
588
|
-
- **高度なテスト**:WebSocket プロキシ、HTTP/2 ストリーム、同時接続
|
|
589
|
-
- **Docker テスト**:コンテナビルド、設定読み込み、ランタイム動作
|
|
590
|
-
|
|
591
|
-
### Docker テスト
|
|
592
|
-
|
|
593
|
-
Docker 統合テストを実行:
|
|
594
|
-
|
|
595
|
-
```bash
|
|
596
|
-
# 完全な Docker 統合テスト
|
|
320
|
+
# Docker テスト
|
|
597
321
|
yarn test:docker
|
|
598
|
-
|
|
599
|
-
# 設定読み込みを特にテスト
|
|
600
|
-
yarn test:docker:config
|
|
601
|
-
|
|
602
|
-
# すべてのテストを実行(ユニット + 統合 + Docker)
|
|
603
|
-
yarn test:all
|
|
604
322
|
```
|
|
605
323
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
```bash
|
|
609
|
-
# クイック Docker ビルドテスト
|
|
610
|
-
make test-docker
|
|
611
|
-
|
|
612
|
-
# 完全な統合テストスイート
|
|
613
|
-
make test-docker-full
|
|
614
|
-
|
|
615
|
-
# 設定読み込みテスト
|
|
616
|
-
make test-docker-config
|
|
324
|
+
## 📚 例
|
|
617
325
|
|
|
618
|
-
|
|
619
|
-
make test-docker-compose
|
|
620
|
-
```
|
|
326
|
+
`examples/` ディレクトリを参照:
|
|
621
327
|
|
|
622
|
-
|
|
328
|
+
- `basic-usage.js` - シンプルなプロキシ設定
|
|
329
|
+
- `advanced-usage.js` - 検証、CORS、リマッピング
|
|
330
|
+
- `custom-handlers.js` - カスタムリクエストハンドラ
|
|
331
|
+
- `docker-compose.example.yml` - Docker 設定
|
|
623
332
|
|
|
624
|
-
##
|
|
333
|
+
## 🤝 貢献
|
|
625
334
|
|
|
626
|
-
|
|
335
|
+
貢献を歓迎します!詳細は [CONTRIBUTING.md](CONTRIBUTING.md) を参照してください。
|
|
627
336
|
|
|
628
|
-
|
|
629
|
-
- 最小限のオーバーヘッド
|
|
630
|
-
- コネクションプーリング
|
|
631
|
-
- 自動 HTTP/1.1 フォールバック
|
|
337
|
+
## 📄 ライセンス
|
|
632
338
|
|
|
633
|
-
|
|
339
|
+
MIT © Robiki sp. z o.o.
|
|
634
340
|
|
|
635
|
-
|
|
636
|
-
- マルチコアシステム用のクラスタリングの有効化
|
|
637
|
-
- ヘルスチェックによる監視
|
|
638
|
-
- 適切なログ記録の設定
|
|
341
|
+
## 🔗 リンク
|
|
639
342
|
|
|
343
|
+
- [GitHub リポジトリ](https://github.com/robiki-ai/robiki-proxy)
|
|
344
|
+
- [npm パッケージ](https://www.npmjs.com/package/@robiki/proxy)
|
|
345
|
+
- [Issue トラッカー](https://github.com/robiki-ai/robiki-proxy/issues)
|