@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.ru.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# 🚀 Robiki Proxy
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Высокопроизводительный обратный прокси-сервер HTTP/2 с поддержкой WebSocket, настраиваемой маршрутизацией, CORS и валидацией запросов. Используйте как 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**: Используйте файлы конфигурации `.js` или `.ts` с функциями в Docker
|
|
21
22
|
- **🎯 Поддержка нескольких портов**: Прослушивание нескольких портов одновременно
|
|
22
23
|
- **⚡ Высокая производительность**: Построен на нативной реализации HTTP/2 в Node.js
|
|
23
24
|
|
|
24
25
|
## 📦 Установка
|
|
25
26
|
|
|
26
|
-
###
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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
|
-
###
|
|
143
|
+
### JavaScript конфигурация
|
|
200
144
|
|
|
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 перед пересылкой к целевым сервисам:
|
|
145
|
+
Для расширенных функций, таких как переназначение URL и валидация:
|
|
225
146
|
|
|
226
147
|
```javascript
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
return url.replace(/^\/api/, '');
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
};
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### Валидация запросов
|
|
242
|
-
|
|
243
|
-
Добавление пользовательской логики валидации для аутентификации, ограничения скорости и т.д.:
|
|
244
|
-
|
|
245
|
-
```javascript
|
|
246
|
-
const config = {
|
|
247
|
-
// Глобальная валидация
|
|
248
|
-
validate: async (info) => {
|
|
249
|
-
if (!info.headers.authorization) {
|
|
250
|
-
return {
|
|
251
|
-
status: false,
|
|
252
|
-
code: 401,
|
|
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`: Объект конфигурации сервера
|
|
230
|
+
### `createProxy(config: ServerConfig)`
|
|
341
231
|
|
|
342
|
-
|
|
232
|
+
Создает и запускает прокси-сервер.
|
|
343
233
|
|
|
344
|
-
|
|
345
|
-
|
|
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
|
-
#### `CorsConfig`
|
|
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
263
|
## 🐳 Использование Docker
|
|
409
264
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
1. Добавьте прокси в ваш `docker-compose.yml`:
|
|
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/` для большего количества примеров использования:
|
|
278
|
+
## 🔐 SSL сертификаты
|
|
459
279
|
|
|
460
|
-
|
|
461
|
-
- `advanced-usage.js` - Расширенные функции (валидация, CORS, переназначение)
|
|
462
|
-
- `custom-handlers.js` - Пользовательские обработчики запросов
|
|
463
|
-
- `docker-compose.example.yml` - Полная настройка Docker
|
|
464
|
-
|
|
465
|
-
## 🔐 SSL/TLS сертификаты
|
|
466
|
-
|
|
467
|
-
### Генерация самоподписанных сертификатов
|
|
468
|
-
|
|
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
|
-
###
|
|
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
|
-
Вклады приветствуются! Пожалуйста, не стесняйтесь отправлять Pull Request.
|
|
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 Gateway**: Централизованная точка входа с аутентификацией и ограничением скорости
|
|
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
|
-
- Мониторинг с помощью health checks
|
|
638
|
-
- Настройка правильного логирования
|
|
341
|
+
## 🔗 Ссылки
|
|
639
342
|
|
|
343
|
+
- [Репозиторий GitHub](https://github.com/robiki-ai/robiki-proxy)
|
|
344
|
+
- [npm пакет](https://www.npmjs.com/package/@robiki/proxy)
|
|
345
|
+
- [Issue Tracker](https://github.com/robiki-ai/robiki-proxy/issues)
|