当前位置: 首页 > 知识库问答 >
问题:

如何使ngnix docker容器可以通过代理访问?

笪烨
2023-03-14

假设我有三个带有nginx的docker容器。它们暴露的端口分别映射到8080、8181和8282。我想在8080上配置服务器,将/example01和/example02代理给另外两个应用程序。这是我的配置文件:

server {

    listen 80;
    server_name  localhost;

    location / {
        root    /usr/share/nginx/html/;
        index   index.html index.htm;
    }

    location /example01 {
        proxy_pass http://localhost:8181/;
    }

    location /example02 {
        proxy_pass http://localhost:8282/;
    }
}

因此,如果我运行容器,每个应用程序都是可访问的(http://localhost:8080、http://localhost:8181和http://localhost:8282)。

现在,我真的不明白为什么http://localhost:8080/example01和http://localhost:8080/example02没有正确重定向。相反,我得到了一个502错误网关。这与我的暴露端口和VIRTUAL_PORT有关吗?

提前感谢。

共有1个答案

赫连卓
2023-03-14

这是因为容器网络范围。这些容器的本地主机,分别位于每个容器内-而这不是端口映射到的位置。相反,请执行以下操作:

$ ifconfig

在您的主机上,找到您的本地ip地址,并将流量代理到您的主机(已映射端口)。

形态:

server {

    listen 80;
    server_name  localhost;

    location / {
        root    /usr/share/nginx/html/;
        index   index.html index.htm;
    }

    location /example01 {
        proxy_pass http://192.168.1.2:8181/;
    }

    location /example02 {
        proxy_pass http://192.168.1.2:8282/;
    }
}

其中< code>192.168.1.2是您自己机器的本地ip地址。

另一种方法是链接这些容器,而不是通过localhost代理-而是链接定义中提供的别名。如果你选择这种方法,我可以详细说明。

-用链接方法编辑-

为了链接您的服务,您需要使用 docker 工具 docker-compose。假设你熟悉它是什么(底部的doc refs),你可以写一个这样的撰写文件:

first-nginx:
   build: first-nginx/
   ports:
      - 8080:80
   links:
      - second-nginx
      - third-nginx

second-nginx:
   build: second-nginx/
   ports:
      - 8081:80

third-nginx:
   build: third-nginx/
   ports:
      - 8082:80

放置在项目的根目录中,如下所示:

root
  - first-nginx
    + nginx.conf
    + Dockerfile
    + some-other.files
  - second-nginx
    + some.files
    + another-nginx.conf
    + Dockerfile
  - third-nginx
    + some-nginx.conf
    + Dockerfile
  + docker-compose.yml

您可以配置“主”nginx以利用创建的链接,如下所示:

形态:

server {

    listen 80;

    location / {
        root    /usr/share/nginx/html/;
        index   index.html index.htm;
    }

    location /example01 {
        proxy_pass http://second-nginx/;
    }

    location /example02 {
        proxy_pass http://third-nginx/;
    }
}

如果有什么不清楚的地方,一定要问。

链接参考

撰写参考

 类似资料:
  • 我需要创建一些docker容器,这些容器必须由同一网络上的其他计算机访问。 问题是,当我创建容器时,Docker获得的IP地址仅在主机内有效。

  • 我希望我的UI通过我的节点服务器获取数据,其中每个都是一个独立的容器。如何使用docker-compose文件连接它们? 我有三个运行mongodb、node server和oracle jet for ui容器,我想通过oraclejet ui访问node API,通过node访问mongo db,所以我定义了这个Docker-Compose。mongo和node工作之间的链接。

  • 27.6 通过代理访问MBeans Spring JMX 允许你创建代理,它将重新路由到本地或者远程MBeanServer中注册的MBean。这些代理提供了标准的Java接口来和MBean进行交互。下面的代码展示了如何在本地允许的MBeanServer中配置代理: <bean class="org.springframework.jmx.access.MBeanProxyFactoryBean">

  • 21.6. 通过代理访问MBeans Spring JMX允许你创建代理,这个代理改变到注册到本地或远程 MBeanServer 的MBean的调用。 这些代理提供里一个标准的Java接口,通过它,你可以和MBean相合。 下面的代码展示了如何为一个运行在本地 MBeanServer 的配置一个代理: bean id="proxy"> <property name="objectName"

  • 问题内容: 我有一台具有分配给一个网络接口的多个IP地址的主机。我想配置Docker,以使容器将每个容器“响应”到分配给主机的这些IP地址的单个IP。 可以使用libcontainer完成此操作,还是必须使用LXC驱动程序并使用来运行我的容器? 提前致谢。 更新 我希望每个容器都可以从外面拿到。使用默认Docker配置时,我只能暴露端口并不能通过到达容器。可以以某种方式配置第二个选项吗? 问题答案

  • 问题内容: 如何通过JQuery Post传递Javascript数组,以便可以通过PHP $ _POST数组访问其所有内容? 请显示可以解决问题的代码示例。 谢谢! 问题答案: 如果要传递JavaScript对象/哈希(即PHP中的关联数组),则可以执行以下操作: 如果您想传递实际的数组(即PHP中的索引数组),则可以执行以下操作: 如果要传递JavaScript数组,则可以执行以下操作: