【发布时间】:2022-11-02 22:07:29
【问题描述】:
我只在 Docker 上工作了很短的时间,所以我是新手,有些概念让我无法理解。 目前,我已经对一个应用程序进行了 dockerized 并创建了该应用程序的映像。 另一方面,该应用程序是几年前制作的,并连接到一个 MYSQL 5.7 数据库,所以我们有这个数据库的图像。 最后,我们有一个 Nginx 镜像作为反向代理。 通过使用我的 Docker-Compose,整个系统可以正常工作,能够毫无问题地访问我的应用程序。 我们希望这个应用程序可以被某些 IP 访问,所以通常(没有 dockerizing),我们使用 apache 和 mod_proxy 和 mod_proxy_http 来拒绝除这些 IP 之外的所有访问。 但是在 docker 中,使用 docker-compose 会创建您的内部网络,并且访问客户端的 IP 会发生变化,因此它会拒绝所有 IP。
由于我发现 Nginx 的文档比 apache 与 docker 的文档更多,因此我正在尝试使用它来配置它。 但是当我允许我的 IP 或另一台计算机的 IP 时,同样的事情不断发生在我身上,它不起作用,给我服务器拒绝访问的错误。 有没有办法添加允许我某些真实 IP 的配置? 我知道它可以通过 IPtables 规则在服务器本身上完成,但我们希望它全部通过 docker 映像完成。
我不在乎它是用 Nginx 还是 Apache 完成的,我已经看到它们都使用 realIP mod,但最重要的是记录访问,我不知道如何在允许或拒绝访问部分使用它。
我的码头工人撰写:
version: '3.0'
services:
db:
restart: always
container_name: bd
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: app
volumes:
- dbdata:/var/lib/mysql
- ./_MySQL_Init_Script:/docker-entrypoint-initdb.d
ports:
- "33306:3306"
app:
depends_on:
- db
restart: always
container_name: app
image: app:v1
proxy:
container_name: proxy
restart: always
image: nginx
depends_on:
- db
- app
ports:
- "80:80"
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf:ro
volumes:
dbdata:
我的默认.conf:
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
proxy_pass http://app:5885/;
deny all;
Allow 192.X.X.X;
Allow 192.X.X.X;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Nginx 容器日志:
[错误]23#23: *3 访问被规则禁止,客户端:172.24.0.1,服务器本地主机,请求:"Get /api/Acceso/VersionApp HTTP/1.1" ...
【问题讨论】: