docker通过https提供无域内容(仅使用公共IP地址)



我有两个不同的服务器。在服务器1上,我有一个域和一个IP地址,而在服务器2上,我只有一个公共IP地址。在服务器1,我托管一个网页,在服务器2,我托管Web服务。当我想从服务器1连接到服务器2时,我得到以下错误:

此请求已被阻止;必须通过HTTPS 提供内容

我无法通过HTTPS提供来自Web服务的内容。首先,我用letsencrypt和nginx反向代理进行了尝试,但在那里我得到了一个错误,即无法用SSL验证IP地址。然后我尝试了不使用letsencrypt,但后来我只通过http获取内容。当我只有一个没有域的公共IP地址时,我如何使用https和docker提供我的内容?这是我的docker撰写文件:

version: "3.3"
services:
proxy:
image: jwilder/nginx-proxy:alpine
container_name: proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
### required for Let's Encrypt certificates
- nginx_certs:/etc/nginx/certs:ro
- nginx_vhosts:/etc/nginx/vhost.d
- nginx_html:/usr/share/nginx/html
restart: always
# letsencrypt:
#   image: jrcs/letsencrypt-nginx-proxy-companion
#   environment:
#   ### ToDo: Change to your e-mail address
#     - DEFAULT_EMAIL=XXX@gmail.com
#     - NGINX_PROXY_CONTAINER=proxy
#   volumes_from:
#     - proxy
#   volumes:
#     - /var/run/docker.sock:/var/run/docker.sock:ro
#     - nginx_certs:/etc/nginx/certs:rw
#   restart: always
whoami:
image: jwilder/whoami
environment:
- VIRTUAL_HOST=IP_ADDRESS
- VIRTUAL_PROTO=https
volumes:
#### NGINX reverse proxy container volumes
nginx_certs:
nginx_vhosts:
nginx_html:

我可以想到两种可能的解决方案:

1.为您的域添加指向后端的DNS条目

如果您的域类似于example.com,则可以使用子域api.example.com作为后端。

在这里阅读更多关于如何使用子域的信息:如何添加子域条目

2.在Docker Swarm配置中添加两台服务器

如果你把这两个服务器都添加到你的群中,你可以通过一个可以加密的内部网络运行通信。

您可以在官方Docker文档中阅读更多信息:https://docs.docker.com/network/overlay/

不过,我不能从你的问题中判断这是否适合你。

最新更新