Bird
Raised Fist0
Djangoframework~20 mins

Nginx as reverse proxy in Django - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Nginx Reverse Proxy Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
What is the main role of Nginx when used as a reverse proxy for a Django app?

Imagine you have a Django app running on a server. You put Nginx in front of it as a reverse proxy. What does Nginx do in this setup?

AIt replaces the Django app and generates HTML pages on its own.
BIt directly runs the Django app code and serves pages to users.
CIt stores the Django app's database and handles data queries.
DIt forwards client requests to the Django app and sends back the app's responses to clients.
Attempts:
2 left
💡 Hint

Think of Nginx as a helpful messenger between users and your Django app.

component_behavior
intermediate
2:00remaining
What happens if Nginx is not configured to forward the correct headers to Django?

You set up Nginx as a reverse proxy but forget to forward the Host header. What problem might occur when Django processes requests?

ADjango will receive the wrong host info and may generate incorrect URLs or fail security checks.
BDjango will crash with a syntax error.
CNginx will stop forwarding requests entirely.
DDjango will ignore the missing header and work normally.
Attempts:
2 left
💡 Hint

Headers tell Django important info about the request origin.

📝 Syntax
advanced
2:30remaining
Which Nginx configuration snippet correctly forwards requests to a Django app running on port 8000?

Choose the Nginx location block that properly proxies requests to Django on localhost:8000.

Django
location / {
    proxy_pass http://localhost:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
A
location / {
    proxy_pass http://localhost:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
B
location / {
    proxy_pass http://localhost:8000;
    proxy_set_header Host $remote_addr;
}
C
location / {
    proxy_pass http://localhost:8000/;
    proxy_set_header Host $host;
}
D
location / {
    proxy_pass http://localhost:8000;
    proxy_set_header Host $host;
}
Attempts:
2 left
💡 Hint

Check for missing semicolons and correct header forwarding.

🔧 Debug
advanced
2:00remaining
Why does Django show a 400 Bad Request error behind Nginx reverse proxy?

You set up Nginx as a reverse proxy for Django. When accessing the site, Django returns a 400 Bad Request error. What is the most likely cause?

ANginx is forwarding requests without the <code>X-Forwarded-For</code> header.
BDjango's ALLOWED_HOSTS setting does not include the domain used in the request.
CThe Django app is not listening on the correct port.
DNginx is not running on the server.
Attempts:
2 left
💡 Hint

Check Django's security settings for allowed domains.

state_output
expert
2:30remaining
What is the value of request.META['REMOTE_ADDR'] in Django when behind Nginx reverse proxy?

Assuming Nginx is configured as a reverse proxy forwarding requests to Django, what IP address will request.META['REMOTE_ADDR'] contain inside Django?

AAlways 127.0.0.1 regardless of client IP.
BThe IP address of the original client making the request.
CThe IP address of the Nginx server acting as reverse proxy.
DAn empty string because Nginx hides the IP.
Attempts:
2 left
💡 Hint

Think about which server actually connects directly to Django.

Practice

(1/5)
1. What is the main role of Nginx when used as a reverse proxy for a Django application?
easy
A. Replace the Django application with a static website
B. Directly execute Django Python code
C. Forward client requests to the Django application server
D. Store the Django database backups

Solution

  1. Step 1: Understand Nginx reverse proxy function

    Nginx acts as a middleman that receives client requests and forwards them to the Django app server.
  2. Step 2: Identify what Nginx does not do

    Nginx does not replace Django, execute Python code, or store backups; it only forwards requests and can serve static files.
  3. Final Answer:

    Forward client requests to the Django application server -> Option C
  4. Quick Check:

    Nginx forwards requests [OK]
Hint: Nginx forwards requests to Django, it doesn't run Django code [OK]
Common Mistakes:
  • Thinking Nginx runs Django code
  • Confusing Nginx with a database
  • Assuming Nginx replaces Django app
2. Which Nginx configuration snippet correctly sets it as a reverse proxy forwarding requests to a Django app running on port 8000?
easy
A. location / { proxy_pass http://127.0.0.1:8000; }
B. location / { root /var/www/html; }
C. location / { fastcgi_pass 127.0.0.1:8000; }
D. location / { proxy_redirect off; }

Solution

  1. Step 1: Identify correct proxy directive

    To forward requests, Nginx uses proxy_pass with the Django app address and port.
  2. Step 2: Check other options for correctness

    root serves static files, fastcgi_pass is for FastCGI apps, and proxy_redirect controls redirects but doesn't forward requests.
  3. Final Answer:

    location / { proxy_pass http://127.0.0.1:8000; } -> Option A
  4. Quick Check:

    Use proxy_pass for reverse proxy [OK]
Hint: proxy_pass forwards requests to backend server [OK]
Common Mistakes:
  • Using root instead of proxy_pass for proxying
  • Confusing fastcgi_pass with proxy_pass
  • Omitting the backend address in proxy_pass
3. Given this Nginx config snippet, what happens when a client requests /static/css/style.css?
location /static/ {
    alias /home/user/myproject/static/;
}
location / {
    proxy_pass http://127.0.0.1:8000;
}
medium
A. Nginx serves the static file directly from /home/user/myproject/static/css/style.css
B. Nginx forwards the request to Django app on port 8000
C. Nginx returns a 404 error because alias is incorrect
D. Nginx redirects the request to /static/css/style.css on Django

Solution

  1. Step 1: Understand alias directive for static files

    The location /static/ block uses alias to serve files directly from the filesystem path.
  2. Step 2: Analyze request routing

    Requests to /static/ are served by Nginx from the alias path; other requests go to Django via proxy_pass.
  3. Final Answer:

    Nginx serves the static file directly from /home/user/myproject/static/css/style.css -> Option A
  4. Quick Check:

    Static files served by alias [OK]
Hint: alias serves static files directly, proxy_pass forwards others [OK]
Common Mistakes:
  • Thinking all requests go to Django
  • Confusing alias with root directive
  • Assuming Nginx redirects instead of serving static files
4. You configured Nginx as a reverse proxy for Django but get a 502 Bad Gateway error. Which fix is most likely correct?
medium
A. Change Nginx config to use root instead of proxy_pass
B. Start the Django app server on the port Nginx proxies to
C. Remove the location block for static files
D. Disable firewall on the client machine

Solution

  1. Step 1: Understand 502 Bad Gateway cause

    502 means Nginx cannot connect to the backend server, often because it is not running or listening on the expected port.
  2. Step 2: Identify the correct fix

    Starting the Django app server on the port Nginx expects resolves the connection issue.
  3. Final Answer:

    Start the Django app server on the port Nginx proxies to -> Option B
  4. Quick Check:

    502 error means backend not reachable [OK]
Hint: 502 means backend server not running or unreachable [OK]
Common Mistakes:
  • Changing root instead of fixing backend server
  • Removing static files block unrelated to 502
  • Disabling client firewall won't fix server connection
5. You want Nginx to serve static files directly and forward all other requests to Django on port 8000. Which combined Nginx config snippet achieves this correctly?
hard
A. location /static/ { proxy_pass http://127.0.0.1:8000; } location / { alias /var/www/myproject/static/; }
B. location / { alias /var/www/myproject/static/; } location /static/ { proxy_pass http://127.0.0.1:8000; }
C. location /static/ { root /var/www/myproject/static/; } location / { proxy_redirect http://127.0.0.1:8000; }
D. location /static/ { alias /var/www/myproject/static/; } location / { proxy_pass http://127.0.0.1:8000; }

Solution

  1. Step 1: Serve static files with alias

    The location /static/ block uses alias to serve static files from the filesystem path.
  2. Step 2: Forward other requests with proxy_pass

    The location / block forwards all other requests to Django running on port 8000 using proxy_pass.
  3. Final Answer:

    location /static/ { alias /var/www/myproject/static/; } location / { proxy_pass http://127.0.0.1:8000; } -> Option D
  4. Quick Check:

    Static files alias + proxy_pass for others [OK]
Hint: Use alias for static, proxy_pass for app requests [OK]
Common Mistakes:
  • Swapping alias and proxy_pass locations
  • Using proxy_redirect instead of proxy_pass
  • Using root instead of alias causing path issues