2017-07-03 18 views
1

我的Nginx不在docker镜像中。我的应用程序处于docker映像中。他们都住在同一台服务器上。如何使用Nginx连接到Docker镜像中的应用程序?

我不希望Nginx处于Docker镜像,因为它对我来说配置看起来非常复杂。但我的应用程序正在码头集装箱中运行。

如何配置Nginx使用我的应用程序正在运行的泊坞窗图像?

这里是我的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; 
     [....] 
} 
+0

nginx是否是服务应用程序的反向代理?或者一个经典的Web服务器? –

+0

@FrançoisMaturel反向代理,而不是经典服务器。谢谢! –

回答

2

要轻松设置nginx的(在泊坞窗主机)作为一个dockerized Web应用程序的前反向代理,你可以在你的Web应用程序和路线TRAFIC只是--publish港到此端口:

  1. --publish参数运行的泊坞窗容器主机端口绑定容器的Web应用程序的端口,例如与詹金斯容器我会做:

    docker run --publish 127.0.0.1:8080:8080 --name jenkins jenkins 
    

这对绑定的主机的本地主机的127.0.0.1容器的端口8080到端口80(这避免了8080端口开放给任何人,如果你不使用任何的防火墙)。 Docker User Guide详细解释了如何操作Docker中的端口。

  • 转发所有传入TRAFIC作为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是一种很好的做法,并且会像魅力一样工作。


    编辑

    为了获得最大的性能,你也可以使用:

    当使用--network=host,搬运工将指示使用的主机网络栈的容器。您不需要在主机上安装--publish端口,因为它是相同的网络堆栈,Web应用程序将在其本地端口上可用。

    +0

    这是很多新的知识。非常感谢你!让我先尝试一下! –

    相关问题