如何阻止来自http请求的端口服务器

How to block port server from http request

我让 Nginx 有一个反向代理来将客户端请求连接到 docker 运行 容器。 问题 是您可以通过键入 serverhost.fr:port_number 来访问容器。我希望客户端只能通过特定主机名访问 运行 容器。 这是我的 docker-compose.yml 文件:

version: '3'
services:
    api:
        image: username/backendimgage:latest
        ports:
            - "8081:8000"
        restart: always
    front:
        depends_on:
            - api
        image: username/frontendimage:latest
        ports:
            - "8080:36073"
        restart: always

我试过用 ufw 阻止,它破坏了一切。 我尝试使用像

这样的 if 语句在 Nginx 上发送 401 代码
if ( $host = serverhost.fr:port_number ){ return 401; } 

if ( $host ~* portnumber ){ return 401; }

但是没用。我没有丰富的操作背景,所以我有点迷路了。

如果您是 运行 Docker 之外的 nginx 代理,则必须从您的容器连接到已发布的 ports:

默认情况下,当您发布时 ports: 它们会发布到主机系统的所有界面上。但是,您可以指定备用绑定地址。如果您将后端服务设置为仅在 127.0.0.1 本地主机接口上发布,则无法从主机外访问它。

version: '3'
services:
    api:
        image: username/backendimgage:latest
        ports:
            - "127.0.0.1:8081:8000"
            #  ^^^^^^^^^

(如果你试图通过使用它的主机端口从一个容器连接到另一个容器——类似于 MacOS/Windows 平台上的 http://host.docker.internal:8081——这会干扰它,但你应该能够在那里使用 Docker- 本地容器间通信。)