Я не специалист по серверным процессам, поэтому постараюсь сделать свой вопрос очень простым. Я использую Socket.io + Nginx + Vuejs + LetsEncrypt и хочу разместить несколько сайтов на docker. Но у меня проблема с socket.io SSL. У меня есть два контейнера, один для внутреннего интерфейса, а другой для внешнего интерфейса. Я могу делиться данными из бэкэнда во внешний интерфейс, используя socket.io с HTTP. Однако проблема заключается в использовании HTTPS. Потому что я должен использовать файлы, которые являются ключами для сертификации от LetsEncrypt в бэкэнд-контейнере для рукопожатия с внешним интерфейсом.
Итак, как мне получить доступ к файлам из внутреннего контейнера в nginx контейнер? или каков наилучший способ связи для получения ключей из контейнера nginx? Я так новичок в этом. Может быть, я не подходящая точка для достижения этой цели.
это nginx составной файл
version: '3'
services:
nginx:
image: nginx:1.13.1
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
dockergen:
image: jwilder/docker-gen:0.7.3
container_name: nginx-proxy-gen
depends_on:
- nginx
command: -notify-sighup nginx-proxy -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
volumes:
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-proxy-le
depends_on:
- nginx
- dockergen
environment:
NGINX_PROXY_CONTAINER: nginx-proxy
NGINX_DOCKER_GEN_CONTAINER: nginx-proxy-gen
volumes:
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
conf:
vhost:
html:
certs:
# Do not forget to 'docker network create nginx-proxy' before launch, and to add '--network nginx-proxy' to proxied containers.
networks:
default:
external:
name: nginx-proxy
сервер. js в бэкэнд-контейнере
var fs = require('fs');
var app = require('express')();
var https = require('https');
var io = require('socket.io')(https);
var HTTPSOptions = {
cert: fs.readFileSync('./certs/cert.pem'), // i have to reach certs files from nginx container
key: fs.readFileSync('./certs/key.pem'),
ca: fs.readFileSync('./certs/chain.pem'),
requestCert: false,
rejectUnauthorized: false,
};
HTTPSOptions.agent = new https.Agent(HTTPSOptions);
var httpsServer = https.createServer(HTTPSOptions, app);
io = io.listen(httpsServer, {
log: false
});
httpsServer.listen(4001, "0.0.0.0",() =>{
console.log('Listening on Port 4001');
});
добавил их в nginx файл конфигурации
upstream upstream-nodejs {
server 0.0.0.0:4001;
}
}
location /socket.io/ {
proxy_pass http://upstream-nodejs;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Заранее спасибо!