当前位置: 首页 > 面试题库 >

Nginx反向代理到主机中的应用

祁兴运
2023-03-14
问题内容

我有一个在Docker外部在端口5000上运行的应用程序。我试图通过Dockercompose在nginx中运行反向代理,但无法与主机的端口5000通信。在我的docker-compose.yml文件中,我具有:

ports:
  - 80:80
  - 443:443
  - 5000:5000

当我尝试运行此命令时,我得到:

ERROR: for nginx  Cannot start service nginx: driver failed programming external connectivity on endpoint nginx (374026a0d34c8b6b789dcd82d6aee6c4684b3201258cfbd3fb18623c4101): Error starting userland proxy: listen tcp 0.0.0.0:5000: bind: address already in use

如果我注释掉,- 5000:5000我得到:

[error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream

如何从Docker Nginx容器连接到主机中已运行的应用程序?

编辑:

我的nginx.conf文件

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
}

http {
    upstream mysite {
        server 0.0.0.0:5000;
    }

    server {
        listen 80;
        server_name localhost;

        location / {
        proxy_pass http://mysite;
        }
    }
}

当我尝试卷曲localhost时,响应为502 Bad Gateway。该应用程序本身和curl 127.0.0.1:5000从主机响应良好。

编辑2:我也尝试过这里找到的解决方案,但得到了nginx: [emerg] hostnot found in upstream "docker"。Docker是我的主机的主机名。

编辑3:我的docker-compose.yml

version: '3'
services:
  simple:
    build: ./simple
    container_name: simple
    ports:
      - 80:80
      - 443:443

我的Dockerfile:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

编辑:

我正在通过Linux中的“主机名”命令来获取计算机主机。


问题答案:

问题在于0.0.0.0:5000。由于Nginx在docker内部运行,因此它尝试在docker机器内查找该地址,但由于在docker内部没有任何运行在0.0.0.0:5000上而失败。

所以为了解决这个

  1. 您需要为其提供一个可以到达的地址。要解决该问题,首先需要在主机上以0.0.0.0:5000运行您的应用程序,即您应该能够从浏览器以0.0.0.0:5000打开您的应用程序。
  2. 查找您的IP地址。 获得IP地址后,您应该可以通过 ip_address:5000 打开应用程序 由于您的泊坞窗和主机共享同一网络,因此也可以从泊坞窗访问此地址
  3. 现在,用此 ip_address:5000* 替换Nginx conf文件中的 0.0.0.0:5000 。您将能够为您的应用服务 *


 类似资料:
  • 主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过

  • Nginx 是一个高性能的 HTTP 和反向代理服务器,代码完全用 C 实现,基于它的高性能以及诸多优点,我们可以把它设置为 hyperf 的前置服务器,实现负载均衡或 HTTPS 前置服务器等。 配置 Http 代理 # 至少需要一个 Hyperf 节点,多个配置多行 upstream hyperf { # Hyperf HTTP Server 的 IP 及 端口 server

  • 我试图使用nginx作为双向SSL/相互SSL的web逻辑的反向代理。 客户端<=双向SSL=>NGINX<=双向SSL=>WebLogic服务器 客户端到NGINX双向SSL工作良好,但在上游连接到web逻辑上出现以下错误。 nginx调试日志: 以下是我对上游的nginx配置: 我尝试了各种选项,包括注释下面的配置。 如果我尝试使用openssl c_client命令行,我能够连接并获得HTT

  • 我之前没有使用过nginx的反向代理, 目前在使用webman框架. https://www.workerman.net/doc/webman/others/nginx-proxy.html 他的这篇文章中给出了一个示例配置, 我在AMH的LNGX虚拟主机中是这样设置的. 后面也添加了SSL, 目前访问是没什么问题的, 但是在上述webman的示例中有一行 root /your/webman/pu

  • 本小节,我们继续学习 Nginx 在 七层反向代理中的其它几种比较常见的情况,比如 web 服务中的 WebSocket 协议的反向代理和 uwsgi 协议的反向代理。 1. WebSocket的反向代理 WebSocket 是目前比较成熟的技术了, WebSocket 协议为创建客户端和服务器端需要实时双向通讯的 webapp 提供了一个选择。服务器可以向浏览器推送相关消息,这样在前端实现的某个

  • Nginx 最强大的地方是在于其 HTTP 请求的反向代理,也即常说的七层反向代理。在这一层代理中,通过 Nginx 框架提供的相关配置,我们能在该层将发送过来的 http 协议转换成各种其他的协议比如 fastcgi 协议、uwsgi协议、grpc、http(高版本协议)、websocket协议等。这样使用 Nginx 框架,我们可以支持多种应用服务(java web、python web等)的