Nginx:在端口 X 上路由所有 LAN 请求,使其看起来像是来自 127.0.0.1:8000

Nginx:在端口 X 上路由所有 LAN 请求,使其看起来像是来自 127.0.0.1:8000

我已经将 symfony 应用程序移植到我的机器上,可以通过 127.0.0.1:8000 进行访问

它通过 docker compose 运行,其中包含一个nginx容器和一个app像这样的容器

nginx:
    container_name: nginx
    image: "${NGINX_IMAGE}"
    build: build/nginx
    restart: always
    env_file: .env
    ports:
      - "8000:443"
    volumes:
      - "./build/nginx/build/${MODE}.conf:/etc/nginx/conf.d/default.conf:ro"
      - "./build/nginx/build/certs:/etc/nginx/certs"
      - "${APP_HOST_DIR}/public:/var/www/app/public:ro"
    networks:
      - app_network
    depends_on:
      - app

  app:
    container_name: app
    image: "${APP_IMAGE}"
    restart: always
    build: build/app
    env_file: .env
    networks:
      - app_network
    volumes:
      - "${APP_HOST_DIR}:${APP_CONTAINER_DIR}"

nginx conf

server {
        listen 80;
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name localhost;

        ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
        ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
        
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;

        root /usr/share/nginx/html/;

        index index.html index.nginx-debian.html;
}

现在,我想使用单独的 nginx 容器通过自定义端口从我的网络上的任何设备访问我的网站,这样192.168.1.12:8100从应用程序的角度来看,它认为它来自本地机器,并且我不需要修改所有 symfony 设置,如受信任的主机、我的 php 和 js 变量。

目前我得到了untrusted host 192.168.1.12。我不想添加新主机,因为我还必须修改其他文件以启用单个 IP。我希望 nginx 以某种方式进行代理。

以下是我得到的信息:

docker-compose 2

version: "3"
services:

  nginx:
    container_name: nginx_lan_access
    image: "nginx"
    build: build/nginx
    restart: always
    ports: 
      - 8100:8000 
    volumes:
      - "./default.conf:/etc/nginx/conf.d/default.conf:ro"


default.conf 2

server {
    listen 8100 default;
    listen [::]:8100 default;
    server_name 192.168.1.12;

    location / {
        proxy_pass https://127.0.0.1:8000;
    }
}

答案1

您对 nginx 和容器发布端口使用相同的端口。像这样更改

ports: 
  - 8080:8000


server {
    listen 8100 default;
    listen [::]:8100 default;
    server_name 192.168.1.12;

    location / {
        proxy_pass https://127.0.0.1:8080;
    }
}

您连接到 192.168.1.12:8100,nginx 监听 8100,将其代理到 8080->8000。

此外,如果需要,可以使用 iptables 允许进出容器网络的流量(默认桥接 172.16.0.0/12 网络或检查 ip addr)。

相关内容