通过docker nginx容器中的IP限制访问



我在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;
}
}

最新更新