我正在尝试在生产环境中具有 2 个节点的 docker swarm 中创建具有 2 个副本的 nginx 服务。节点是在数字海洋中创建的。此 nginx 服务将充当 apache 虚拟主机的反向代理 (https<–> http)。要创建我使用的 nginx 服务:
docker service create --replicas 2 -p 80:80 --p 443:443 --name webserver --mount type=bind,source=/environments/ssl-env,destination=/etc/nginx/ssl --mount type =bind,source=/conf/nginx.conf,destination=/etc/nginx/nginx.conf --mount type=bind,source=/middleware,destination=/etc/nginx/conf.d nginx
运行此命令后,服务无法启动,没有任何有用的错误消息。但是,只有在工作节点中,docker 守护进程才会监听端口 443:
netstat -tulpn | grep :443
tcp6 0 0 :::443 :::* LISTEN 5797/dockerd
另外,当我评论 nginx.conf 中监听 443 的 https 部分时,我的 nginx 服务已创建并成功运行,但我当然想使用 https 部分。你有什么主意吗?Docker 版本 17.05.0-ce,构建 89658be。这是 nginx.conf 的一部分:
#http
server {
listen 80 ;
server_name api.hotelgenius.net;
# redirect http to https ##
rewrite ^ https://$server_name$request_uri permanent;
}
#https
#server {
listen 443 ;
server_name api.hotelgenius.net;
error_log /var/log/nginx/api_error.log;
access_log /var/log/nginx/api_access.log;
ssl on;
ssl_certificate /etc/nginx/ssl/api.hotelgenius.crt;
ssl_certificate_key /etc/nginx/ssl/api.hotelgenius.key;
ssl_client_certificate /etc/nginx/ssl/api.hotelgenius.cer;
location / {
proxy_pass http://hotelgenius/;
proxy_set_header Host $host;
proxy_redirect http:// https://;
}