2

我正在尝试在生产环境中具有 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://;
}
4

1 回答 1

0

将 nginx.conf 中的容器名称替换为 docker 堆栈中相应的服务名称后,Nginx 服务部署成功。例如在修复之前我在 nginx.conf

location / {
       proxy_pass http://hotelgenius/;
       proxy_set_header Host $host;
       proxy_redirect http:// https://;
}

其中“hotelgenius”是容器的名称。我不得不将“hotelgenius”替换为服务名称,因为在 docker-compose.yml 版本 3 中不再支持容器名称。

于 2017-08-30T10:28:07.990 回答