fix(nginx): Add Docker DNS resolver for Swarm/dynamic service discovery (v2.2.3)
Fixes 502 Bad Gateway on root path in Docker Swarm by adding DNS resolver configuration (127.0.0.11) and dynamic DNS resolution for all proxy_pass directives. This ensures nginx resolves backend service IPs on each request rather than caching them at startup.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "picpeak-backend",
|
"name": "picpeak-backend",
|
||||||
"version": "2.2.2",
|
"version": "2.2.3",
|
||||||
"description": "Backend for PicPeak event photo sharing platform",
|
"description": "Backend for PicPeak event photo sharing platform",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
+16
-5
@@ -4,6 +4,10 @@ server {
|
|||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
index index.html;
|
index index.html;
|
||||||
|
|
||||||
|
# Docker DNS resolver for dynamic service discovery (required for Swarm/Compose)
|
||||||
|
resolver 127.0.0.11 valid=10s ipv6=off;
|
||||||
|
resolver_timeout 5s;
|
||||||
|
|
||||||
# Allow larger file uploads (up to 100MB)
|
# Allow larger file uploads (up to 100MB)
|
||||||
client_max_body_size 100M;
|
client_max_body_size 100M;
|
||||||
client_body_timeout 300s;
|
client_body_timeout 300s;
|
||||||
@@ -43,7 +47,9 @@ server {
|
|||||||
|
|
||||||
# API proxy
|
# API proxy
|
||||||
location /api {
|
location /api {
|
||||||
proxy_pass http://backend:3000;
|
# Use variable to force DNS resolution per request (required for Docker Swarm)
|
||||||
|
set $backend_upstream backend;
|
||||||
|
proxy_pass http://$backend_upstream:3000;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
proxy_set_header Connection 'upgrade';
|
proxy_set_header Connection 'upgrade';
|
||||||
@@ -61,7 +67,8 @@ server {
|
|||||||
|
|
||||||
# Photo serving proxy
|
# Photo serving proxy
|
||||||
location /photos {
|
location /photos {
|
||||||
proxy_pass http://backend:3000;
|
set $backend_upstream backend;
|
||||||
|
proxy_pass http://$backend_upstream:3000;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -75,7 +82,8 @@ server {
|
|||||||
|
|
||||||
# Thumbnail serving proxy
|
# Thumbnail serving proxy
|
||||||
location /thumbnails {
|
location /thumbnails {
|
||||||
proxy_pass http://backend:3000;
|
set $backend_upstream backend;
|
||||||
|
proxy_pass http://$backend_upstream:3000;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -90,7 +98,8 @@ server {
|
|||||||
# Uploads serving proxy (logos, favicons, watermarks)
|
# Uploads serving proxy (logos, favicons, watermarks)
|
||||||
# ^~ modifier stops regex matching, ensuring uploads are proxied not served locally
|
# ^~ modifier stops regex matching, ensuring uploads are proxied not served locally
|
||||||
location ^~ /uploads {
|
location ^~ /uploads {
|
||||||
proxy_pass http://backend:3000;
|
set $backend_upstream backend;
|
||||||
|
proxy_pass http://$backend_upstream:3000;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -104,7 +113,9 @@ server {
|
|||||||
|
|
||||||
# Delegate root requests to backend for public landing page handling
|
# Delegate root requests to backend for public landing page handling
|
||||||
location = / {
|
location = / {
|
||||||
proxy_pass http://backend:3000/;
|
# Use variable to force DNS resolution per request (required for Docker Swarm)
|
||||||
|
set $backend_upstream backend;
|
||||||
|
proxy_pass http://$backend_upstream:3000/;
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
proxy_set_header Connection 'upgrade';
|
proxy_set_header Connection 'upgrade';
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "picpeak-frontend",
|
"name": "picpeak-frontend",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "2.2.2",
|
"version": "2.2.3",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
Reference in New Issue
Block a user