postgresql - docker 和 nginx:如何反向代理多个 postgresql 数据库
问题描述
我有一个带有多个 postgresql 数据库的 docker 容器:
version: "3.7"
services:
nginx:
image: nginx:1.18.0-alpine
ports:
- 8028:80
volumes:
- ./nginx/localhost/conf.d:/etc/nginx/conf.d
depends_on:
- webapp
networks:
- postgresql_network
postgresql:
image: "postgres:13-alpine"
restart: always
volumes:
- type: bind
source: ../DO_NOT_DELETE_POSTGRESQL_DATA
target: /var/lib/postgresql/data
environment:
POSTGRES_DB: db1
POSTGRES_USER: simha
POSTGRES_PASSWORD: krishna
PGDATA: "/var/lib/postgresql/data/pgdata"
networks:
- postgresql_network
postgresql2:
image: "postgres:13-alpine"
restart: always
volumes:
- type: bind
source: ../DO_NOT_DELETE_POSTGRESQL_DATA2
target: /var/lib/postgresql/data
environment:
POSTGRES_DB: db2
POSTGRES_USER: simha
POSTGRES_PASSWORD: krishna
PGDATA: "/var/lib/postgresql/data/pgdata"
networks:
- postgresql_network
networks:
postgresql_network:
driver: bridge
现在我可以为每个 postgresq 实例公开两个不同的端口,并从主机以不同的方式访问它们(如 localhost 5432 和 localhost 5445)
但不是那样,我想使用不同的域名来处理它们。
比如pg1.docker.db
,port 8028
(nginx 端口)和pg.docker.db
,port 8028
(nginx 端口),并使用 nginx 在内部将它们反向代理到不同的 docker 容器,使用postgresql
和postgresql2
在主机中,/etc/hosts
我将拥有
127.0.0.1 pg1.docker.db
127.0.0.1 pg2.docker.db
我不确定,但类似的东西。有人能说我做得对吗
## WEBSERVER
upstream webapp {
server webapp:8000;
}
server {
listen 80;
location / {
proxy_pass http://webapp;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
}
## POSTGRESQL DBS
upstream postgres {
server postgresql:5432;
}
upstream postgres2 {
server postgresql2:5432;
}
server {
listen 80 so_keepalive=on;
server_name db1.domain.my;
proxy_pass postgres;
}
server {
listen 80 so_keepalive=on;
server_name db2.domain.my;
proxy_pass postgres2;
}
我发现人们使用stream
and http
。以上是否也有效。或者我应该做点什么
解决方案
根据域名重定向 http 请求非常简单。你可以使用这样的东西:
http {
server {
listen 80;
server_name pg1.docker.db
location / {
...
}
}
server {
listen 80;
server_name pg2.docker.db;
location / {
...
}
}
}
但是这里的问题是 nginx 只将 http 请求转发到服务器,所以除非你的容器后面有一个基于 Web 的接口,否则它不会正常工作。
推荐阅读
- javascript - 如何在cookie数组中添加数据而不推入数组jquery
- excel - 如何在另一个不活动的工作簿中添加工作表
- java - 当我创建一个新项目时,总是会发生这种情况
- c++ - C++:将派生类的实例指针存储在容器的 STL 容器中
- select - tidyverse 错误中的 select() 和 group_by()
- python - 随机数据的“有偏差”SVM 分类结果?
- python - 读取 .zip URL 中的两个文件:删除 PDF,保留 CSV
- r - R:从现有数据框创建新数据框以研究一个变量(列)的变化
- android - 尽管启用了 UserManager.DISALLOW_INSTALL_APPS,但仍安装特定的应用程序
- c - SCHED_RR 未将时间片返回到正确的线程