Маршрут nginx к разным портамLinux

Ответить Пред. темаСлед. тема
Anonymous
 Маршрут nginx к разным портам

Сообщение Anonymous »

У меня есть настройка: у меня есть node/express API, который я размещаю в контейнере Linux на порту 3000.
Затем я хочу, чтобы служба веб-сокетов работала в том же контейнере Linux на порту 3001. p>
У меня есть простой сокет-io, который я начинаю так:

Код: Выделить всё

   io = new Server(3001, {
path: "/socket-io/",
cors: {
origin: ["http://localhost:4200", "http://10.0.2.2", "http://localhost", "capacitor://localhost"],
methods: ["GET", "POST"],
},
});

// Ensure it binds to an IPv4 address
io.listen(3001, '0.0.0.0'); // Explicitly bind to IPv4

io.adapter(createAdapter(redisClient, subClient));

io.httpServer.on('listening', async () => {
const address = io.httpServer.address();
const isIPv6 = address.family === 'IPv6';
const host = isIPv6 ? `[${address.address}]` : address.address;

const bindType = isIPv6 ? 'IPv6' : 'IPv4';
await logger.logMessage(undefined, undefined, `Socket.IO server is listening on ${bindType} host: ${host}, port: ${address.port}`);
});
И все это работает нормально, когда я запускаю его локально, поэтому я знаю, что это работает.
Затем у меня есть файл docker-compose.yml, который создает все мои услуги выглядят так:

Код: Выделить всё

version: '3.8'

services:
rabbitmq:
image: "rabbitmq:management"
container_name: rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=test
- RABBITMQ_DEFAULT_PASS=test
ports:
- "5672:5672"
- "15672:15672"
volumes:
- ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/
- ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
networks:
- test-network
restart: always

seq:
image: datalust/seq:latest
container_name: seq
ports:
- "5341:80"
environment:
- ACCEPT_EULA=Y
- VIRTUAL_HOST=seq.test.se
- LETSENCRYPT_HOST=seq.test.se
- [email protected]
volumes:
- ./seq-data:/data
networks:
- test-network
restart: always

redis:
image: redis:latest
container_name: redis
ports:
- "6380:6379"
environment:
- ACCEPT_EULA=Y
- VIRTUAL_HOST=redis.test.se
- LETSENCRYPT_HOST=redis.test.se
- [email protected]
volumes:
- ./data/redis:/data
command: redis-server --appendonly yes
networks:
- test-network

nginx-proxy:
image: jwilder/nginx-proxy:1.2.2
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /etc/nginx/certs:/etc/nginx/certs:ro
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./socket-io.conf:/etc/nginx/conf.d/socket-io.conf
- acme:/etc/acme.sh
networks:
- test-network
restart: always

nginx-letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-letsencrypt
volumes:
- /etc/nginx/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- nginx-proxy
networks:
- test-network
depends_on:
- nginx-proxy
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
- [email protected]
- LETSENCRYPT_RENEWAL_DAYS=30
restart: always

test-api:
image: ewr.vultrcr.com/test/testapi:latest
container_name: test-api
ports:
- "3000:3000"
environment:
- VIRTUAL_HOST=api.test.se
- VIRTUAL_PORT=3000
- LETSENCRYPT_HOST=api.test.se
- [email protected]
depends_on:
- rabbitmq
networks:
- test-network
restart: always
volumes:
acme:
certs:

networks:
test-network:
driver: bridge
И затем, как вы можете видеть в прокси-сервере nginx, я добавляю еще один файл конфигурации nginx (socket-io.conf)

Код: Выделить всё

upstream websocket_backend {
server api.test.se:3001;
}

server {
listen 443;

location /socket-io/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;

proxy_pass http://websocket_backend;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Поэтому я хочу, чтобы все запросы, поступающие на мой api.test.se/socket-io/, направлялись на порт 3001, который является моей службой веб-сокетов.
Это сообщение журнала Я получаю событие прослушивания сокета:
"Сервер Socket.IO прослушивает хост IPv6: [::], порт: 3001"
Что я здесь делаю не так? Chatgpt, похоже, не может этого понять....
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... rent-ports
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»