![Nginx:在端口 X 上路由所有 LAN 请求,使其看起来像是来自 127.0.0.1:8000](https://linux22.com/image/779890/Nginx%EF%BC%9A%E5%9C%A8%E7%AB%AF%E5%8F%A3%20X%20%E4%B8%8A%E8%B7%AF%E7%94%B1%E6%89%80%E6%9C%89%20LAN%20%E8%AF%B7%E6%B1%82%EF%BC%8C%E4%BD%BF%E5%85%B6%E7%9C%8B%E8%B5%B7%E6%9D%A5%E5%83%8F%E6%98%AF%E6%9D%A5%E8%87%AA%20127.0.0.1%3A8000.png)
我已经将 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
)。