heraldww 2025-04-06 13:23 采纳率: 29.2%
浏览 5

ngnix 如何代理容器内的app

Nginx Proxy 的问题

我现在是这样的网络环境:一个树莓派放在局域网里面,他的IP是192.168.1.174(我自己设置的域名htp.com指向它),可以正常连接
在docker里面安装了一个blog程序typecho,可以看见它已经运行了

root@WalnutPi:~# docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED        STATUS          PORTS                                                                  NAMES
a46381a5aa8a   jc21/nginx-proxy-manager:2.11.3     "/init"                  2 hours ago    Up 2 hours      0.0.0.0:24180->80/tcp, 0.0.0.0:24181->81/tcp, 0.0.0.0:24443->443/tcp   nginx_proxy_manager_xtae-nginx_proxy_manager_xTaE-1
5f11b1caf0b5   nextcloud:29.0.4                    "/entrypoint.sh apac…"   3 hours ago    Up 3 hours      127.0.0.1:15381->80/tcp                                                nextcloud_mhch-nextcloud_mhCH-1
2c3e7e3b3889   mariadb:11.4.2                      "docker-entrypoint.s…"   3 hours ago    Up 3 hours      127.0.0.1:23036->3306/tcp                                              mariadb_r7rw-mariadb_R7rw-1
c8a06952c5d9   wordpress:6.7.2                     "docker-entrypoint.s…"   15 hours ago   Up 3 hours      0.0.0.0:21080->80/tcp                                                  wordpress_tsxn-wordpress_TSXn-1
5238d65e492d   joyqi/typecho:1.2.1-php8.0-apache   "docker-php-entrypoi…"   15 hours ago   Up 57 minutes   127.0.0.1:22381->80/tcp                                                typecho_zj63-typecho_zJ63-1
a975d226c4cc   mysql:9.0.1                         "docker-entrypoint.s…"   15 hours ago   Up 3 hours      33060/tcp, 0.0.0.0:13306->3306/tcp                                     mysql_bjbf-mysql_bjbF-1


其中joyqi/typecho:1.2.1-php8.0-apache就是我在运行的image,但是他占据的ip是127.0.0.1:22381,导致外部无法访问
所我用ngnix做反向代理。这样设置:

img

但是在浏览器里面输入typecho.htp.com却无法访问
我在cmd 里面ping这个地址是这样的

img

我哪里做错了?

  • 写回答

2条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-04-06 15:20
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析
      - 要实现Nginx代理容器内的应用,需要确定容器内应用的端口映射情况,以及Nginx在树莓派上的配置方式,确保能正确将请求从树莓派转发到容器内的应用。
    2. 解决方案
      - 假设容器内的应用监听在容器内部端口8080,并且已经正确运行。
      - 首先,需要在树莓派上安装Nginx。如果是基于Debian或Ubuntu系统,可以使用以下命令安装:
      bash sudo apt-get update sudo apt-get install nginx
      - 然后编辑Nginx的配置文件,一般位于/etc/nginx/sites-available/default(不同系统可能略有不同)。在server块中添加如下内容:
      ```nginx
      server {
      listen 80;
      server_name htp.com;
       location / {
           proxy_pass http://192.168.1.174:8080;  # 假设容器的IP为192.168.1.174,应用监听8080端口
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
       }
      

      }
      - 保存配置文件后,测试配置文件的语法是否正确:bash
      sudo nginx -t
      - 如果语法正确,重新加载Nginx使配置生效:bash
      sudo systemctl reload nginx
      ```
      3. 多种解决方案的优缺点
      - 优点
      - 上述基于配置文件的方式比较直观,易于理解和修改。适合大多数简单场景。
      - 缺点
      - 如果需要代理多个应用,配置文件可能会变得比较复杂,维护起来有一定难度。
      - 对于动态更新配置不太方便,需要重新加载Nginx服务。
      - 另一种动态配置的方式可以使用一些配置管理工具,如Ansible、Chef等。
      - 优点
      - 可以实现自动化部署和配置管理,方便批量部署多个代理配置。
      - 可以通过变量等方式灵活配置不同的代理规则,更易于维护和扩展。
      - 缺点
      - 需要额外学习配置管理工具的使用,增加了一定的学习成本。
      - 工具本身的安装和配置也需要一定的时间和精力。
      4. 总结
      - 实现Nginx代理容器内的应用,关键在于正确配置Nginx的转发规则,确保请求能从外部域名准确转发到容器内应用的端口。通过编辑Nginx配置文件可以快速实现基本的代理功能,对于复杂场景可以考虑使用配置管理工具来更灵活地管理代理配置。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月6日