gpt4 book ai didi

Docker 为任何 LAN 设备伪造本地主机访问权限

转载 作者:行者123 更新时间:2023-12-05 05:32:56 24 4
gpt4 key购买 nike

在多次尝试失败后,我在这里问。每个人都不是编程问题,但我认为与社区相关。

我一直在尝试通过局域网上的手机访问我的 docker-compose 开发网站,就像这样 https://lan_server_ip:8000 (用于 CSS 检查)但是我我遇到了各种各样的问题,想知道是否有一种简单的代理类型解决方案可以让我从 LAN 访问我的开发服务器。

主要问题是我的 symfony 应用程序只能识别在应用程序本身内设置的单个受信任的 ip 127.0.0.1。我需要一个无需修改 symfony 应用程序的解决方案,因为为设备添加 ips 是不切实际的;尤其是动态 ip。

想法是有一个接口(interface)来连接而不是主 nginx,这将使网站相信所有请求都来自主机 127.0.0.1。或者用新的服务器或位置修改我的 nginx 配置?我尝试重写 header ,但到目前为止没有成功。

目前在浏览器上使用响应式设计,但它远非准确和最新。我唯一真正的解决方案是从生产网站上查找问题。

我相信添加一个新容器来解决这个问题,但是如何呢?

我的 docker-compose.yaml

version: "3"
services:

nginx:
container_name: nginx
image: "${NGINX_IMAGE}"
build: build/nginx
restart: always
env_file: .env
ports:
- "8000:443"
volumes:
- "${APP_HOST_NGINX_CONF}:${APP_CONTAINER_NGINX_CONF}:ro"
- "${APP_HOST_CERTS}:${APP_CONTAINER_CERTS}"
- "${APP_HOST_DIR}/public:${APP_CONTAINER_DIR}/public:ro"
- "/etc/localtime:/etc/localtime: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:
- type: bind
source: ${APP_HOST_DIR}
target: ${APP_CONTAINER_DIR}
- type: bind
source: ${PHP_INI}
target: /usr/local/etc/php/php.ini
- type: bind
source: /etc/localtime
target: /etc/localtime:ro
depends_on:
- database

database:
container_name: mariadb
image: "mariadb:${MARIADB_VERSION}"
restart: always
env_file: .env
volumes:
- "${SQL_INIT}:/docker-entrypoint-initdb.d"
- type: bind
source: ${MARIADB_DATA_DIR}
target: /var/lib/mysql
- type: bind
source: ${MARIADB_LOG_DIR}
target: /var/logs/mysql
- type: bind
source: ${MARIADB_CERTS_DIR}
target: /etc/certs/
- type: bind
source: /etc/localtime
target: /etc/localtime:ro
ports:
- "3306:3306"
networks:
app_network:
command: [
"mysqld",
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_general_ci",
"--require_secure_transport=OFF",
"--bind-address=0.0.0.0",
"--ssl-key=/etc/certs/server-key.pem",
"--ssl-cert=/etc/certs/server-cert.pem",
"--ssl-ca=/etc/certs/ca-cert.pem",
]

networks:
app_network:

nginx.conf

#./images/nginx/build/default.conf
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name 127.0.0.1;
ssl_certificate /etc/nginx/certs/dev.crt;
ssl_certificate_key /etc/nginx/certs/dev.key;
index index.php index.html;
root /var/www/app/public;

client_max_body_size 128M;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}

error_log /var/log/nginx/app.error.log;
access_log /var/log/nginx/app.access.log;
}

最佳答案

我不是 Symphony 和您描述的可信主机机制方面的专家在您的问题评论中,但是,如果实际问题是模拟您的请求来自 127.0.0.1,您可以尝试配置 nginx 以在 中提供该值代理您的应用程序时的 Host header 。

使用 FastCGI,您可以在 nginx 配置的 location ~\.php$ block 中获得所需的结果,包括以下行:

fastcgi_param HTTP_HOST 127.0.0.1;

例如:

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTP_HOST 127.0.0.1;
}

请谨慎对待我的话:正如我所说,我并不完全理解 Symphony,我不想给您带来任何问题。

关于Docker 为任何 LAN 设备伪造本地主机访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73946901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com