Изначально мой тестовый файл работал с использованием Artillery.io для тестирования моего приложения чата с Socket.io (Express). Однако все изменилось при попытке загрузить тест Nginx.
Теперь при запуске $ artillery run test.yml
ничего не запускается, и это окончательный отчет:
All virtual users finished
Summary report @ 16:51:26(+0100) 2019-03-19
Scenarios launched: 10
Scenarios completed: 0
Requests completed: 0
RPS sent: NaN
Request latency:
min: NaN
max: NaN
median: NaN
p95: NaN
p99: NaN
Scenario counts:
0: 10 (100%)
Errors:
Error: websocket error: 10
Я считаю, что проблема в том, что в консоли выдает эту ошибку:
index.js: 83 Отказался от подключения к
'WS: //127.0.0.1: 8080 / socket.io / EIO = 3 & транспортное = WebSocket & SID = XntHB1NMZhCYOPNLAABI'
потому что это нарушает следующую директиву политики безопасности контента:
"default-src 'self' http://127.0.0.1:8080/". Обратите внимание, что 'connect-src'
не был задан явно, поэтому «default-src» используется как запасной вариант.
При этом я вижу в своем терминале, что браузеру назначается socket.id, так как каждый раз, когда я обновляюсь, я вижу повторную выдачу идентификатора сокета.
Я также добавил этот тег в свой index.html
:
<meta http-equiv="Content-Security-Policy" content="connect-src 'self' data:; default-src 'self' http://127.0.0.1:8080/">
но это только мешает подключению всех браузеров.
Как пользователь я могу отправить сообщение вручную, и все работает нормально.
Это просто при попытке запустить команду артиллерии. Есть ли проблема с IP, с которого идет тест?
Вот файл test.yml
:
config:
target: 'http://127.0.0.1:80'
socketio:
transports: ["websocket"]
phases:
- duration: 10
arrivalRate: 1
scenarios:
- engine: "socketio"
flow:
- get:
url: "/"
- emit:
channel: "test new message"
data: {
message: "hello",
handle: "Christian"
}
Наконец, конф Nginx:
http {
server {
listen 80;
#serve static files
root /public/;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://io_nodes;
#enable websockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_update;
proxy_set_header Connection "upgrade";
}
}
#load balancing socket io
upstream io_nodes {
# enable sticky sessions
ip_hash;
server 127.0.0.1:8080 weight=5;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
}
Спасибо за любую помощь в этом.