通过 LAN 访问 Web 服务器

通过 LAN 访问 Web 服务器

我有一台运行应用程序的 macOS 笔记本电脑。UI 使用端口 8081,API 使用 3031。我可以使用 localhost:8081 在 mac 系统上访问它,并且所有 API 调用都通过端口 localhost:3031 进行。

Mac 已连接到我的 VPN,我可以使用 10.0.0.25 从另一台机器 ssh 进入它,也可以使用 10.0.0.25:8080 在浏览器中访问该应用程序。问题是应用程序的代码中硬编码了 API 的“localhost:3031”,因此,尽管我可以在第二个机器上看到 UI,但所有 API 调用都不起作用,因为第二个机器上的应用程序正在将请求发送到“localhost:3031”。显然,这不起作用,因为第二个机器没有在本地运行 API。

我无法真正编辑代码来更改它,以便“localhost:3031”不再是应用程序 API 端的硬编码值。我想知道我有什么选项可以让它工作,以便第二台机器可以成功运行应用程序,并且 API 调用可以成功发送并收到响应。

我想也许如果我在 Mac 上设置一个 nginx 反向代理,然后在第二台机器上通过浏览器访问 10.0.0.25:8081,在 Mac 系统上它会监听端口 8081 并将该流量代理到 localhost:8081,然后监听端口 3031 并将其代理到 localhost:3031,但我收到此消息:

错误:对于 nginx,无法启动服务 nginx:端口不可用:公开端口 TCP 0.0.0.0:3031 -> 0.0.0.0:0:监听 tcp 0.0.0.0:3031:绑定:地址已在使用中

这是我的 nginx default.conf:

server {
    listen 8080;

  location / {
    proxy_pass http://localhost:8081;
  }

  access_log /var/log/nginx/8081-access.log;
    error_log /var/log/nginx/8081-error.log error;
}

server {
  listen 3031;

  location / {
    proxy_pass http://localhost:3031;
  }

  access_log /var/log/nginx/3031-access.log;
  error_log /var/log/nginx/3031-error.log error;
}

以及设置 nginx 反向代理容器的 nginx docker-compose.yml 文件:

version: '2'
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    # volumes:
      # - ./default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:8081"
      - "3031:3031"

关于如何在现有限制下实现此连接,您有什么想法吗?如果反向代理不起作用,还有其他方法吗?

答案1

就您而言,您的端口80813031已被使用docker,无法绑定到这些端口。因此,nginx如果您想使用反向代理,则应更改和的配置以nginx侦听docker特定 IP 地址上的端口,docker等等。127.0.0.1nginx10.0.0.25

docker-compose.yml 应该看起来像:

version: '2'
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    # volumes:
      # - ./default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "127.0.0.1:8080:8081"
      - "127.0.0.1:3031:3031"

nginx default.conf 应该如下所示:

server {
    listen 10.0.0.25:8080;

  location / {
    proxy_pass http://localhost:8081;
  }

  access_log /var/log/nginx/8081-access.log;
    error_log /var/log/nginx/8081-error.log error;
}

server {
  listen 10.0.0.25:3031;

  location / {
    proxy_pass http://localhost:3031;
  }

  access_log /var/log/nginx/3031-access.log;
  error_log /var/log/nginx/3031-error.log error;
}

答案2

查找使用端口“3031”的进程:

lsof -ti:3031

然后找到该进程的 pid 并将其终止:

kill -9 [pid]

相关内容