我在Docker上工作的时间很短,所以我对这方面还很陌生,有些概念让我无法理解。目前,我已经对接了一个应用程序,并创建了该应用程序的图像。另一方面,该应用程序是几年前创建的,并连接到MYSQL 5.7数据库,因此我们有该数据库的映像。最后,我们有一个Nginx图像,它可以作为反向代理。通过使用我的Docker Compose,整个系统正常工作,能够毫无问题地访问我的应用程序。我们希望这个应用程序可以被某些IP访问,所以通常(在没有Dockerization的情况下(,我们使用带有mod_proxy和mod_proxy_http的apache来拒绝除这些IP之外的所有访问。但在docker中,使用docker compose会创建您的内部网络,并且访问客户端的IP会发生变化,因此它会拒绝所有IP。
由于我发现Nginx的文档比使用docker的apache的文档更多,我正在尝试用它来配置它。但同样的事情一直发生在我身上,当我允许我的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容器日志:
[error]23#23:*3规则禁止访问,客户端:172.24.0.1,服务器localhost,请求:"Get/api/Accso/VersionApp HTTP/1.1"。。。
我设法解决了这个问题。该应用程序正在我的工作计算机上使用,这是一台带有Docker Desktop的Windows。当我试图进入网络时,我是在同一台电脑上完成的。
当将dockerized应用程序投入生产时,我只需配置IPTables,就可以在不允许或拒绝的情况下提出它。当尝试访问应用程序的web时,它工作正常,但当我看到Nginx日志时,我看到我的真实IP出现了,而不是Docker容器的IP。
因此,我理解这个问题与Docker Desktop的操作有关,因为我在激活wsl2选项和不激活选项的情况下都进行了测试。
此外,当第一次在ubuntu中进行测试时,它给了我一个错误,因为default.conf写得很糟糕。Allow必须小写,IP必须置于all之上。
我的最后一个默认conf:
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
proxy_pass http://app:5885/;
allow 192.X.X.X;
allow 192.X.X.X;
deny all;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}