我已经将 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
)。