docker和nginx:如何反向代理多个postgresql数据库



我有一个docker容器与多个postgresql数据库:

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,端口8028(nginx端口)和pg.docker.db,端口8028(nginx端口),并使用nginx内部反向代理它们到不同的docker容器使用postgresqlpostgresql2

,在主机/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;
}

我发现人们使用streamhttp。以上也会工作吗?或者我应该做些什么

基于域名重定向http请求非常容易。你可以这样写:

http {
server {
listen 80;
server_name pg1.docker.db
location / {
...
}
}
server {
listen 80;
server_name pg2.docker.db;
location / {
...
}
}
} 

但是这里的问题是nginx只转发http请求到服务器,所以除非你的容器后面有一个基于web的接口,否则它不会正常工作。

最新更新