Reverse Proxy with Nginx Trouble

08/01/20191 Min Read — In DevTools

I'm trying to set up Nginx with my Docker containers. I want to route the standard listening port 80 to the port where my Docker runs my Django app.

server {
listen 80;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}

docker-compose proxies my app from port 5001 to 5000:

version: '3.7'
services:
app:
build:
context: ./app
dockerfile: Dockerfile
volumes:
- './app:/usr/src/app'
ports:
- 5001:5000
environment:
...
depends_on:
- db
...
nginx:
build:
context: ./app/nginx
dockerfile: Dockerfile
restart: always
ports:
- 80:80
depends_on:
- app

I'm not sure what I'm doing wrong.

If you navigate to localhost:5001, the app works (it runs on port 5000).

But if you try localhost without specifying a port, you hit a 502 error on Nginx.

Here is a guide to Nginx, but I haven't found the solution to my problem yet.

Edit: I figured it out.
You need to give NGinx the name of your service.

server {
listen 80;
location / {
proxy_pass http://app:5000; // change this line
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}