docker 通过没有域的 https 提供内容(仅使用 public IP 地址)

docker serve content over https without domain (only with public IP Address)

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

This request has been blocked; the content must be served over HTTPS

我没有完成通过 HTTPS 提供来自网络服务的内容。首先,我尝试使用 letsencrypt 和 nginx 反向代理进行尝试,但出现无法使用 SSL 验证 IP 地址的错误。然后我在没有 letsencrypt 的情况下尝试了它,但后来我只通过 http 获取了内容。当我只有一个没有域的 public IP 地址时,如何使用 https 和 docker 提供我的内容? 这是我的 docker-compose 文件:

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 配置

中添加你的两台服务器

如果将两台服务器都添加到 swarm,则可以运行通过内部网络进行通信,可以加密。

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

不过,我无法根据你的问题判断这是否适合你。