gpt4 book ai didi

nginx - 如何在 Docker 镜像中使用 Nginx 连接到我的应用程序?

转载 作者:行者123 更新时间:2023-12-02 19:08:36 25 4
gpt4 key购买 nike

我的 Nginx 不在 docker 镜像中。我的应用程序位于 docker 镜像中。他们都住在同一台服务器上。

我不希望 Nginx 出现在 docker 镜像中,因为它看起来对我来说配置起来非常复杂。但是我的应用程序在 docker 容器中运行。

如何配置 Nginx 以使用运行我的应用程序的 docker 镜像?

这是我的 Nginx 配置文件:

server {
listen 80;
server_name my.domain.com;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
server_name www.nicolasxu.space nicolasxu.space;
# add Strict-Transport-Security to prevent man in the middle attacks
add_header Strict-Transport-Security "max-age=31536000";


ssl_certificate /root/.ssh/nicolasxu.space.cert;
ssl_certificate_key /root/nicolasxu.space.key;
[....]
}

最佳答案

要轻松地将 nginx(在 docker 主机中)设置为 dockerized webapp 前的反向代理,您只需 --publish您的 webapp 的端口并将流量路由到此端口:

  • 使用 --publish 运行您的 docker 容器将主机端口与容器的 webapp 端口绑定(bind)的参数,例如我会使用 jenkins 容器:
    docker run --publish 127.0.0.1:8080:8080 --name jenkins jenkins

  • 这会将容器的 8080 端口绑定(bind)到本地主机的 127.0.0.1 上的端口 80。主机(如果您不使用任何防火墙,这可以避免端口 8080 向任何人开放)。 Docker User Guide详细解释了如何在 Docker 中操作端口。
  • 将所有传入流量转发为 reverse proxy到本地容器您的端口(在我的示例中为 8080)
    server {
    ...

    listen 443 ssl;
    server_name www.nicolasxu.space nicolasxu.space;
    ...

    ssl_certificate ...

    location / {
    # forward all the trafic to docker container's published port
    proxy_pass http://localhost:8080;
    }
    }

  • 在 nginx 上设置 SSL 并将流量作为 HTTP 路由到 dockerized webapp 是一种很好的做法,并且会像魅力一样工作。

    编辑

    为了获得最佳性能,您还可以使用:
    docker run --network=host ...

    使用 --network=host 时, docker 将指示容器使用主机网络堆栈。您不必 --publish主机上的端口,因为它是相同的网络堆栈,并且 Web 应用程序将在其 native 端口上可用。

    关于nginx - 如何在 Docker 镜像中使用 Nginx 连接到我的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44887866/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com