如何使用Nginx连接到Docker image中的我的应用程序?

如何使用Nginx连接到Docker image中的我的应用程序?,nginx,docker,reverse-proxy,Nginx,Docker,Reverse Proxy,我的Nginx不在docker映像中。我的应用程序在docker图像中。他们都住在同一台服务器上 我不希望Nginx出现在docker映像中,因为它的配置看起来非常复杂。但我的应用程序正在docker容器中运行 如何配置Nginx以使用运行我的应用程序的docker映像 这是我的Nginx配置文件: server { listen 80; server_name my.domain.com; return 301 h

我的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主机中)设置为停靠的Web应用程序前面的反向代理,您只需发布Web应用程序的端口并将流量路由到此端口:

  • 使用参数运行docker容器,以将主机端口与容器的webapp端口绑定,例如使用jenkins容器,我将执行以下操作:

    docker run --publish 127.0.0.1:8080:8080 --name jenkins jenkins
    
  • 这会将容器的端口8080绑定到主机的本地主机
    127.0.0.1
    上的端口80(这避免了在不使用任何防火墙的情况下向任何人打开端口8080)。详细说明了如何在Docker中操作端口

  • 将所有传入的流量作为一个整体转发到您港口的本地集装箱(在我的示例中为8080)

  • 在nginx上设置SSL,并将流量作为HTTP路由到停靠的webapp是一个很好的实践,它将非常有效


    编辑

    为了获得最佳性能,您还可以使用:

    docker run --network=host ...
    

    当使用
    --network=host
    时,docker将指示容器使用主机网络堆栈。您不必在主机上发布端口,因为它是同一个网络堆栈,web应用程序将在其本机端口上可用。

    nginx是服务应用程序的反向代理吗?还是一个经典的web服务器?@Françoisstorel反向代理,而不是经典服务器。谢谢这是很多新知识。非常感谢你!让我先试试!
    docker run --network=host ...