Proxy /photos and /uploads through main-site to gallery backend

NPMplus routes beachpartyballoons.com directly to main-site Express,
bypassing Docker nginx. Adding proxy routes here ensures same-origin
image URLs, eliminating OpaqueResponseBlocking in the browser.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
chris 2026-06-16 07:55:56 -04:00
parent cdeb2f5406
commit ca4e52336a

View File

@ -250,6 +250,29 @@ apiRouter.post('/contact', upload.array('photos', 3), async (req, res) => {
// Mount the API router under the /api path // Mount the API router under the /api path
app.use('/api', apiRouter); app.use('/api', apiRouter);
// --- Gallery backend proxy (/photos and /uploads → gallery-backend container) ---
const http = require('http');
const GALLERY_HOST = process.env.GALLERY_BACKEND_HOST || 'gallery-backend';
const GALLERY_PORT = parseInt(process.env.GALLERY_BACKEND_PORT || '5000');
function proxyToGallery(req, res) {
const proxy = http.request({
hostname: GALLERY_HOST,
port: GALLERY_PORT,
path: req.originalUrl,
method: req.method,
headers: { ...req.headers, host: GALLERY_HOST },
}, (proxyRes) => {
res.writeHead(proxyRes.statusCode, proxyRes.headers);
proxyRes.pipe(res);
});
proxy.on('error', () => { if (!res.headersSent) res.status(502).end(); });
req.pipe(proxy);
}
app.use('/photos', proxyToGallery);
app.use('/uploads', proxyToGallery);
// --- Static Files --- // --- Static Files ---
const staticCacheOptions = { const staticCacheOptions = {
maxAge: process.env.NODE_ENV === 'production' ? '30d' : 0, maxAge: process.env.NODE_ENV === 'production' ? '30d' : 0,