@robiki/proxy 1.0.2 → 1.0.3
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 +99 -394
- package/README.ja.md +100 -395
- package/README.md +100 -394
- package/README.pl.md +100 -395
- package/README.ru.md +99 -394
- package/README.zh.md +99 -394
- package/dist/{config-CeJ1tf8T.d.ts → config-CCOdQL7F.d.ts} +5 -11
- package/dist/index.d.ts +3 -2
- package/dist/index.js +51 -72
- package/dist/utils/config.d.ts +1 -1
- package/dist/utils/config.js +37 -20
- package/package.json +2 -5
- package/dist/config-CQ7zIaQt.d.ts +0 -172
- package/dist/config-_6LOsppp.d.ts +0 -180
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
|
|
|
@@ -23,49 +23,23 @@
|
|
|
23
23
|
|
|
24
24
|
## 📦 インストール
|
|
25
25
|
|
|
26
|
-
### npm
|
|
26
|
+
### npm パッケージ
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
29
|
npm install @robiki/proxy
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```bash
|
|
30
|
+
# または
|
|
33
31
|
yarn add @robiki/proxy
|
|
34
32
|
```
|
|
35
33
|
|
|
36
|
-
### Docker
|
|
34
|
+
### Docker
|
|
37
35
|
|
|
38
36
|
```bash
|
|
39
37
|
docker pull robiki/proxy:latest
|
|
40
38
|
```
|
|
41
39
|
|
|
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
40
|
## 🚀 クイックスタート
|
|
67
41
|
|
|
68
|
-
### npm
|
|
42
|
+
### npm パッケージ
|
|
69
43
|
|
|
70
44
|
```javascript
|
|
71
45
|
import { createProxy } from '@robiki/proxy';
|
|
@@ -88,13 +62,11 @@ const proxy = await createProxy({
|
|
|
88
62
|
},
|
|
89
63
|
},
|
|
90
64
|
});
|
|
91
|
-
|
|
92
|
-
console.log('プロキシサーバーが実行中です!');
|
|
93
65
|
```
|
|
94
66
|
|
|
95
|
-
### Docker
|
|
67
|
+
### Docker
|
|
96
68
|
|
|
97
|
-
|
|
69
|
+
`proxy.config.json` を作成:
|
|
98
70
|
|
|
99
71
|
```json
|
|
100
72
|
{
|
|
@@ -108,20 +80,14 @@ console.log('プロキシサーバーが実行中です!');
|
|
|
108
80
|
"api.example.com": {
|
|
109
81
|
"target": "backend-service:3000",
|
|
110
82
|
"ssl": true
|
|
111
|
-
},
|
|
112
|
-
"example.com": {
|
|
113
|
-
"target": "frontend-service:8080",
|
|
114
|
-
"ssl": false
|
|
115
83
|
}
|
|
116
84
|
}
|
|
117
85
|
}
|
|
118
86
|
```
|
|
119
87
|
|
|
120
|
-
|
|
88
|
+
`docker-compose.yml` を作成:
|
|
121
89
|
|
|
122
90
|
```yaml
|
|
123
|
-
version: '3.8'
|
|
124
|
-
|
|
125
91
|
services:
|
|
126
92
|
proxy:
|
|
127
93
|
image: robiki/proxy:latest
|
|
@@ -133,25 +99,9 @@ services:
|
|
|
133
99
|
- ./certs:/app/certs:ro
|
|
134
100
|
environment:
|
|
135
101
|
- 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
102
|
```
|
|
153
103
|
|
|
154
|
-
|
|
104
|
+
起動:
|
|
155
105
|
|
|
156
106
|
```bash
|
|
157
107
|
docker-compose up -d
|
|
@@ -159,9 +109,9 @@ docker-compose up -d
|
|
|
159
109
|
|
|
160
110
|
## 📖 設定
|
|
161
111
|
|
|
162
|
-
###
|
|
112
|
+
### JSON 設定
|
|
163
113
|
|
|
164
|
-
|
|
114
|
+
シンプルな宣言的設定:
|
|
165
115
|
|
|
166
116
|
```json
|
|
167
117
|
{
|
|
@@ -169,24 +119,17 @@ docker-compose up -d
|
|
|
169
119
|
"ssl": {
|
|
170
120
|
"key": "./certs/key.pem",
|
|
171
121
|
"cert": "./certs/cert.pem",
|
|
172
|
-
"ca": "./certs/ca.pem",
|
|
173
122
|
"allowHTTP1": true
|
|
174
123
|
},
|
|
175
124
|
"cors": {
|
|
176
125
|
"origin": "*",
|
|
177
|
-
"methods": ["GET", "POST", "PUT", "DELETE"
|
|
178
|
-
"
|
|
179
|
-
"credentials": true,
|
|
180
|
-
"maxAge": 86400
|
|
126
|
+
"methods": ["GET", "POST", "PUT", "DELETE"],
|
|
127
|
+
"credentials": true
|
|
181
128
|
},
|
|
182
129
|
"routes": {
|
|
183
130
|
"api.example.com": {
|
|
184
|
-
"target": "backend
|
|
185
|
-
"ssl": true
|
|
186
|
-
"cors": {
|
|
187
|
-
"origin": ["https://example.com"],
|
|
188
|
-
"credentials": true
|
|
189
|
-
}
|
|
131
|
+
"target": "backend:3000",
|
|
132
|
+
"ssl": true
|
|
190
133
|
},
|
|
191
134
|
"*.example.com": {
|
|
192
135
|
"target": "wildcard-service:4000",
|
|
@@ -196,78 +139,32 @@ docker-compose up -d
|
|
|
196
139
|
}
|
|
197
140
|
```
|
|
198
141
|
|
|
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
|
-
### リクエスト検証
|
|
142
|
+
### JavaScript 設定
|
|
242
143
|
|
|
243
|
-
|
|
144
|
+
URL リマッピングや検証などの高度な機能用:
|
|
244
145
|
|
|
245
146
|
```javascript
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
message: '認証されていません',
|
|
254
|
-
headers: { 'www-authenticate': 'Bearer' },
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
return { status: true };
|
|
147
|
+
// proxy.config.cjs
|
|
148
|
+
module.exports = {
|
|
149
|
+
ports: [443, 8080],
|
|
150
|
+
ssl: {
|
|
151
|
+
key: './certs/key.pem',
|
|
152
|
+
cert: './certs/cert.pem',
|
|
153
|
+
allowHTTP1: true,
|
|
258
154
|
},
|
|
259
155
|
routes: {
|
|
260
156
|
'api.example.com': {
|
|
261
157
|
target: 'backend:3000',
|
|
262
158
|
ssl: true,
|
|
263
|
-
//
|
|
159
|
+
// URL リマッピング
|
|
160
|
+
remap: (url) => url.replace(/^\/api/, ''),
|
|
161
|
+
// リクエスト検証
|
|
264
162
|
validate: async (info) => {
|
|
265
|
-
|
|
266
|
-
if (!rateLimit.allowed) {
|
|
163
|
+
if (!info.headers.authorization) {
|
|
267
164
|
return {
|
|
268
165
|
status: false,
|
|
269
|
-
code:
|
|
270
|
-
message: '
|
|
166
|
+
code: 401,
|
|
167
|
+
message: 'Unauthorized',
|
|
271
168
|
};
|
|
272
169
|
}
|
|
273
170
|
return { status: true };
|
|
@@ -277,93 +174,80 @@ const config = {
|
|
|
277
174
|
};
|
|
278
175
|
```
|
|
279
176
|
|
|
280
|
-
###
|
|
177
|
+
### TypeScript 設定
|
|
281
178
|
|
|
282
|
-
|
|
179
|
+
完全な IDE サポート付きの型安全な設定:
|
|
283
180
|
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
181
|
+
```typescript
|
|
182
|
+
// proxy.config.ts
|
|
183
|
+
import type { ServerConfig, ConnectionInfo } from '@robiki/proxy';
|
|
184
|
+
|
|
185
|
+
const config: ServerConfig = {
|
|
186
|
+
ports: [443, 8080],
|
|
187
|
+
ssl: {
|
|
188
|
+
key: './certs/key.pem',
|
|
189
|
+
cert: './certs/cert.pem',
|
|
190
|
+
allowHTTP1: true,
|
|
293
191
|
},
|
|
294
192
|
routes: {
|
|
295
193
|
'api.example.com': {
|
|
296
194
|
target: 'backend:3000',
|
|
297
195
|
ssl: true,
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
196
|
+
remap: (url: string) => url.replace(/^\/api/, ''),
|
|
197
|
+
validate: async (info: ConnectionInfo) => {
|
|
198
|
+
if (!info.headers['x-api-key']) {
|
|
199
|
+
return { status: false, code: 401, message: 'API Key Required' };
|
|
200
|
+
}
|
|
201
|
+
return { status: true };
|
|
302
202
|
},
|
|
303
203
|
},
|
|
304
204
|
},
|
|
305
205
|
};
|
|
306
|
-
```
|
|
307
206
|
|
|
308
|
-
|
|
207
|
+
export default config;
|
|
208
|
+
```
|
|
309
209
|
|
|
310
|
-
|
|
210
|
+
### 環境変数
|
|
311
211
|
|
|
312
|
-
```
|
|
313
|
-
|
|
212
|
+
```bash
|
|
213
|
+
# SSL 設定
|
|
214
|
+
SSL_KEY=/app/certs/key.pem
|
|
215
|
+
SSL_CERT=/app/certs/cert.pem
|
|
216
|
+
SSL_ALLOW_HTTP1=true
|
|
314
217
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
// デフォルトのプロキシ動作にフォールバック
|
|
321
|
-
const { restAPIProxyHandler } = await import('@robiki/proxy/connections');
|
|
322
|
-
return restAPIProxyHandler(req, res);
|
|
323
|
-
};
|
|
218
|
+
# CORS 設定
|
|
219
|
+
CORS_ORIGIN=*
|
|
220
|
+
CORS_METHODS=GET,POST,PUT,DELETE
|
|
221
|
+
CORS_CREDENTIALS=true
|
|
324
222
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
websocket: customWebSocketHandler,
|
|
328
|
-
stream: customStreamHandler,
|
|
329
|
-
});
|
|
223
|
+
# デバッグモード
|
|
224
|
+
DEBUG=true
|
|
330
225
|
```
|
|
331
226
|
|
|
332
227
|
## 🔧 API リファレンス
|
|
333
228
|
|
|
334
|
-
### `createProxy(config: ServerConfig)
|
|
335
|
-
|
|
336
|
-
指定された設定でプロキシサーバーを作成して起動します。
|
|
337
|
-
|
|
338
|
-
**パラメータ:**
|
|
339
|
-
|
|
340
|
-
- `config`:サーバー設定オブジェクト
|
|
341
|
-
|
|
342
|
-
**戻り値:** `ProxyServer` インスタンスに解決される Promise
|
|
229
|
+
### `createProxy(config: ServerConfig)`
|
|
343
230
|
|
|
344
|
-
|
|
231
|
+
プロキシサーバーを作成して起動します。
|
|
345
232
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
- `start()`:プロキシサーバーを起動
|
|
349
|
-
- `stop()`:プロキシサーバーを停止
|
|
350
|
-
- `getConfig()`:現在の設定を取得
|
|
351
|
-
|
|
352
|
-
### 設定タイプ
|
|
353
|
-
|
|
354
|
-
#### `ServerConfig`
|
|
233
|
+
**ServerConfig:**
|
|
355
234
|
|
|
356
235
|
```typescript
|
|
357
236
|
interface ServerConfig {
|
|
358
237
|
ports?: number[];
|
|
359
|
-
ssl?:
|
|
238
|
+
ssl?: {
|
|
239
|
+
key: string;
|
|
240
|
+
cert: string;
|
|
241
|
+
ca?: string;
|
|
242
|
+
allowHTTP1?: boolean;
|
|
243
|
+
};
|
|
360
244
|
routes: Record<string, RouteConfig>;
|
|
361
245
|
cors?: CorsConfig;
|
|
362
246
|
validate?: (info: ConnectionInfo) => Promise<ForwardValidationResult>;
|
|
363
247
|
}
|
|
364
248
|
```
|
|
365
249
|
|
|
366
|
-
|
|
250
|
+
**RouteConfig:**
|
|
367
251
|
|
|
368
252
|
```typescript
|
|
369
253
|
interface RouteConfig {
|
|
@@ -375,265 +259,86 @@ interface RouteConfig {
|
|
|
375
259
|
}
|
|
376
260
|
```
|
|
377
261
|
|
|
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
|
-
### 別のプロジェクトで使用
|
|
262
|
+
## 🐳 Docker 使用
|
|
411
263
|
|
|
412
|
-
|
|
264
|
+
設定ファイル(JSON、.cjs、または .ts)をマウント:
|
|
413
265
|
|
|
414
266
|
```yaml
|
|
415
267
|
services:
|
|
416
268
|
proxy:
|
|
417
269
|
image: robiki/proxy:latest
|
|
418
|
-
ports:
|
|
419
|
-
- '443:443'
|
|
420
|
-
- '8080:8080'
|
|
421
270
|
volumes:
|
|
422
|
-
- ./proxy.config.
|
|
271
|
+
- ./proxy.config.cjs:/app/proxy.config.cjs:ro
|
|
423
272
|
- ./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
|
|
273
|
+
environment:
|
|
274
|
+
- PROXY_CONFIG=/app/proxy.config.cjs
|
|
454
275
|
```
|
|
455
276
|
|
|
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
|
-
### 自己署名証明書の生成
|
|
277
|
+
## 🔐 SSL 証明書
|
|
468
278
|
|
|
469
|
-
|
|
279
|
+
### 開発環境(自己署名)
|
|
470
280
|
|
|
471
281
|
```bash
|
|
472
282
|
mkdir -p certs
|
|
473
283
|
openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes
|
|
474
284
|
```
|
|
475
285
|
|
|
476
|
-
### Let's Encrypt
|
|
477
|
-
|
|
478
|
-
本番環境では、Let's Encrypt 証明書を使用:
|
|
286
|
+
### 本番環境(Let's Encrypt)
|
|
479
287
|
|
|
480
288
|
```bash
|
|
481
289
|
certbot certonly --standalone -d example.com
|
|
482
290
|
```
|
|
483
291
|
|
|
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
292
|
## 🛠️ トラブルシューティング
|
|
519
293
|
|
|
520
294
|
### デバッグモード
|
|
521
295
|
|
|
522
|
-
|
|
296
|
+
詳細なログを有効化:
|
|
523
297
|
|
|
524
298
|
```bash
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
# または Docker で
|
|
299
|
+
DEBUG=true node your-script.js
|
|
300
|
+
# または
|
|
529
301
|
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
302
|
```
|
|
538
303
|
|
|
539
|
-
`DEBUG=true` の場合、プロキシは以下をログに記録します:
|
|
540
|
-
- すべてのプロキシ接続試行(REST、WebSocket、HTTP/2 ストリーム)
|
|
541
|
-
- リクエストとレスポンスの詳細
|
|
542
|
-
- 接続エラーとタイムアウト
|
|
543
|
-
- プロキシエラーとクライアントエラー
|
|
544
|
-
|
|
545
304
|
### ポートが既に使用中
|
|
546
305
|
|
|
547
|
-
プロキシは、設定されたポートのプロセスを自動的に終了しようとします。失敗した場合は、手動でポートを解放:
|
|
548
|
-
|
|
549
306
|
```bash
|
|
550
307
|
lsof -ti:443 | xargs kill -9
|
|
551
|
-
lsof -ti:8080 | xargs kill -9
|
|
552
308
|
```
|
|
553
309
|
|
|
554
|
-
### SSL 証明書エラー
|
|
555
|
-
|
|
556
|
-
証明書ファイルが読み取り可能で、正しい形式(PEM)であることを確認してください。開発では、自己署名証明書を使用します。
|
|
557
|
-
|
|
558
|
-
### WebSocket 接続の問題
|
|
559
|
-
|
|
560
|
-
WebSocket ルートが正しいプロトコル(ws/wss)で設定されており、ターゲットサービスが WebSocket 接続をサポートしていることを確認してください。
|
|
561
|
-
|
|
562
310
|
## 🧪 テスト
|
|
563
311
|
|
|
564
|
-
Robiki Proxy には、ユニットテスト、統合テスト、高度なシナリオをカバーする包括的なテストスイートが含まれています。
|
|
565
|
-
|
|
566
|
-
### テストの実行
|
|
567
|
-
|
|
568
312
|
```bash
|
|
569
313
|
# すべてのテストを実行
|
|
570
314
|
yarn test
|
|
571
315
|
|
|
572
|
-
#
|
|
573
|
-
yarn test:watch
|
|
574
|
-
|
|
575
|
-
# カバレッジ付きでテストを実行
|
|
316
|
+
# カバレッジ付き
|
|
576
317
|
yarn test:coverage
|
|
577
318
|
|
|
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 統合テスト
|
|
319
|
+
# Docker テスト
|
|
597
320
|
yarn test:docker
|
|
598
|
-
|
|
599
|
-
# 設定読み込みを特にテスト
|
|
600
|
-
yarn test:docker:config
|
|
601
|
-
|
|
602
|
-
# すべてのテストを実行(ユニット + 統合 + Docker)
|
|
603
|
-
yarn test:all
|
|
604
321
|
```
|
|
605
322
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
```bash
|
|
609
|
-
# クイック Docker ビルドテスト
|
|
610
|
-
make test-docker
|
|
611
|
-
|
|
612
|
-
# 完全な統合テストスイート
|
|
613
|
-
make test-docker-full
|
|
614
|
-
|
|
615
|
-
# 設定読み込みテスト
|
|
616
|
-
make test-docker-config
|
|
323
|
+
## 📚 例
|
|
617
324
|
|
|
618
|
-
|
|
619
|
-
make test-docker-compose
|
|
620
|
-
```
|
|
325
|
+
`examples/` ディレクトリを参照:
|
|
621
326
|
|
|
622
|
-
|
|
327
|
+
- `basic-usage.js` - シンプルなプロキシ設定
|
|
328
|
+
- `advanced-usage.js` - 検証、CORS、リマッピング
|
|
329
|
+
- `custom-handlers.js` - カスタムリクエストハンドラ
|
|
330
|
+
- `docker-compose.example.yml` - Docker 設定
|
|
623
331
|
|
|
624
|
-
##
|
|
332
|
+
## 🤝 貢献
|
|
625
333
|
|
|
626
|
-
|
|
334
|
+
貢献を歓迎します!詳細は [CONTRIBUTING.md](CONTRIBUTING.md) を参照してください。
|
|
627
335
|
|
|
628
|
-
|
|
629
|
-
- 最小限のオーバーヘッド
|
|
630
|
-
- コネクションプーリング
|
|
631
|
-
- 自動 HTTP/1.1 フォールバック
|
|
336
|
+
## 📄 ライセンス
|
|
632
337
|
|
|
633
|
-
|
|
338
|
+
MIT © Robiki sp. z o.o.
|
|
634
339
|
|
|
635
|
-
|
|
636
|
-
- マルチコアシステム用のクラスタリングの有効化
|
|
637
|
-
- ヘルスチェックによる監視
|
|
638
|
-
- 適切なログ記録の設定
|
|
340
|
+
## 🔗 リンク
|
|
639
341
|
|
|
342
|
+
- [GitHub リポジトリ](https://github.com/robiki-ai/robiki-proxy)
|
|
343
|
+
- [npm パッケージ](https://www.npmjs.com/package/@robiki/proxy)
|
|
344
|
+
- [Issue トラッカー](https://github.com/robiki-ai/robiki-proxy/issues)
|