Skip to content

Commit 022d0bd

Browse files
committed
Backport pull FRiCKLE#24; Socket support
1 parent 2a98570 commit 022d0bd

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

Diff for: README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ Configuration directives
4343
========================
4444
postgres_server
4545
---------------
46-
* **syntax**: `postgres_server ip[:port] dbname=dbname user=user password=pass`
46+
* **syntax**: `postgres_server {ip[:portnum]|unix:/socket/dir} [port=portnum] [dbname=dbname] [user=user] [password=pass]`
4747
* **default**: `none`
4848
* **context**: `upstream`
4949

50-
Set details about the database server.
50+
Set details about the database server. Additional port parameter is offered to connect to unix socket with alternative port numbers.
5151

5252

5353
postgres_keepalive

Diff for: src/ngx_postgres_module.c

+9-1
Original file line numberDiff line numberDiff line change
@@ -446,11 +446,19 @@ ngx_postgres_conf_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
446446

447447
pgs->addrs = u.addrs;
448448
pgs->naddrs = u.naddrs;
449-
pgs->port = u.port;
449+
pgs->port = u.family == AF_UNIX ? u.default_port : u.port;
450+
pgs->family = u.family;
450451

451452
/* parse various options */
452453
for (i = 2; i < cf->args->nelts; i++) {
453454

455+
if (ngx_strncmp(value[i].data, "port=", sizeof("port=") - 1)
456+
== 0)
457+
{
458+
pgs->port = (in_port_t) ngx_atoi(&value[i].data[sizeof("port=") - 1], value[i].len - (sizeof("port=") - 1));
459+
continue;
460+
}
461+
454462
if (ngx_strncmp(value[i].data, "dbname=", sizeof("dbname=") - 1)
455463
== 0)
456464
{

Diff for: src/ngx_postgres_module.h

+2
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ typedef struct {
112112
#endif
113113
ngx_uint_t naddrs;
114114
in_port_t port;
115+
int family;
115116
ngx_str_t dbname;
116117
ngx_str_t user;
117118
ngx_str_t password;
@@ -123,6 +124,7 @@ typedef struct {
123124
ngx_str_t name;
124125
ngx_str_t host;
125126
in_port_t port;
127+
int family;
126128
ngx_str_t dbname;
127129
ngx_str_t user;
128130
ngx_str_t password;

Diff for: src/ngx_postgres_upstream.c

+16-6
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ ngx_postgres_upstream_init(ngx_conf_t *cf, ngx_http_upstream_srv_conf_t *uscf)
9191
peers->peer[n].socklen = server[i].addrs[j].socklen;
9292
peers->peer[n].name = server[i].addrs[j].name;
9393
peers->peer[n].port = server[i].port;
94+
peers->peer[n].family = server[i].family;
9495
peers->peer[n].dbname = server[i].dbname;
9596
peers->peer[n].user = server[i].user;
9697
peers->peer[n].password = server[i].password;
@@ -330,7 +331,10 @@ ngx_postgres_upstream_get_peer(ngx_peer_connection_t *pc, void *data)
330331
}
331332

332333
/* sizeof("...") - 1 + 1 (for spaces and '\0' omitted */
334+
/* we hope that unix sockets connection string will be always shorter than tcp/ip one (because 'host' is shorter than 'hostaddr') */
333335
len = sizeof("hostaddr=") + peer->host.len
336+
+ sizeof("port=") + sizeof("65535") - 1
337+
+ sizeof("dbname=") + peer->dbname.len
334338
+ sizeof("port=") + sizeof("65535") - 1
335339
+ sizeof("dbname=") + peer->dbname.len
336340
+ sizeof("user=") + peer->user.len
@@ -347,12 +351,18 @@ ngx_postgres_upstream_get_peer(ngx_peer_connection_t *pc, void *data)
347351
#endif
348352
}
349353

350-
/* TODO add unix sockets */
351-
last = ngx_snprintf(connstring, len - 1,
352-
"hostaddr=%V port=%d dbname=%V user=%V password=%V"
353-
" sslmode=disable",
354-
&peer->host, peer->port, &peer->dbname, &peer->user,
355-
&peer->password);
354+
if(peer->family != AF_UNIX)
355+
last = ngx_snprintf(connstring, len - 1,
356+
"hostaddr=%V port=%d dbname=%V user=%V password=%V"
357+
" sslmode=disable",
358+
&peer->host, peer->port, &peer->dbname, &peer->user,
359+
&peer->password);
360+
else
361+
last = ngx_snprintf(connstring, len - 1,
362+
"host=%s port=%d dbname=%V user=%V password=%V"
363+
" sslmode=disable",
364+
&peer->host.data[5], peer->port, &peer->dbname, &peer->user,
365+
&peer->password);
356366
*last = '\0';
357367

358368
dd("PostgreSQL connection string: %s", connstring);

0 commit comments

Comments
 (0)