Bird
Raised Fist0
Flaskframework~20 mins

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

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Nginx Reverse Proxy Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
What is the main role of Nginx when used as a reverse proxy for a Flask app?

Imagine you have a Flask app running on port 5000. You want users to access it via port 80 using Nginx. What does Nginx do in this setup?

ANginx forwards incoming requests on port 80 to the Flask app on port 5000 and sends back the Flask app's response to the client.
BNginx replaces the Flask app and handles all Python code execution.
CNginx runs the Flask app internally and serves static files only.
DNginx blocks all requests except those from localhost.
Attempts:
2 left
💡 Hint

Think about how Nginx acts as a middleman between the user and the Flask app.

❓ component_behavior
intermediate
1:30remaining
What happens if Nginx is not configured to forward the Host header to the Flask app?

You configured Nginx as a reverse proxy but forgot to pass the Host header. How does this affect your Flask app?

AThe Flask app will crash immediately with a server error.
BThe Flask app may receive incorrect Host information, causing URL generation or routing issues.
CNginx will automatically add the Host header, so nothing changes.
DThe Flask app will ignore the Host header and work normally.
Attempts:
2 left
💡 Hint

Consider how Flask uses the Host header for URL building and routing.

📝 Syntax
advanced
2:00remaining
Which Nginx configuration snippet correctly sets up a reverse proxy to a Flask app on localhost:5000?

Choose the Nginx server block that properly proxies requests to a Flask app running on port 5000.

Flask
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:5000;
        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-Proto $scheme;
    }
}
A
location / {
    proxy_pass http://localhost:5000;
    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-Proto $scheme;
}
B
location / {
    proxy_pass http://localhost:5000/
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
C
location / {
    proxy_pass http://localhost:5000
    proxy_set_header Host $host
}
D
location / {
    proxy_pass http://localhost:5000;
    proxy_set_header Host;
    proxy_set_header X-Real-IP;
}
Attempts:
2 left
💡 Hint

Look for correct syntax including semicolons and proper proxy headers.

❓ state_output
advanced
1:30remaining
What is the visible effect if Nginx reverse proxy is misconfigured with an incorrect upstream address?

You set proxy_pass to http://localhost:6000 but your Flask app runs on port 5000. What will a user see when accessing your site?

ANginx serves a default welcome page instead of the Flask app.
BThe Flask app loads normally without any issues.
CThe browser shows a 502 Bad Gateway error because Nginx cannot connect to the Flask app.
DThe browser shows a 404 Not Found error from Flask.
Attempts:
2 left
💡 Hint

Think about what happens when Nginx tries to forward requests to a non-listening port.

🔧 Debug
expert
2:00remaining
Why does your Flask app behind Nginx reverse proxy always see the client IP as 127.0.0.1?

After setting up Nginx as a reverse proxy, your Flask app logs show all client IPs as 127.0.0.1. What is the cause?

ANginx is blocking the client IP and replacing it with 127.0.0.1 for security.
BFlask is ignoring all headers and always uses 127.0.0.1 by default.
CThe client is actually connecting from localhost, so IP is correct.
DNginx is not forwarding the original client IP in the X-Real-IP or X-Forwarded-For headers, so Flask sees the proxy's IP.
Attempts:
2 left
💡 Hint

Check how Nginx passes client IP information to backend apps.

Practice

(1/5)
1. What is the main role of Nginx when used as a reverse proxy for a Flask application?
easy
A. Compile Flask Python code into machine code
B. Run the Flask application code directly
C. Forward client requests to the Flask app server
D. Store the Flask app's database

Solution

  1. Step 1: Understand Nginx's role

    Nginx acts as a middleman that receives client requests first.
  2. Step 2: Forward requests to Flask app

    Nginx sends these requests to the Flask app running on a backend server or port.
  3. Final Answer:

    Forward client requests to the Flask app server -> Option C
  4. Quick Check:

    Nginx forwards requests = D [OK]
Hint: Nginx passes requests, it does not run Flask code [OK]
Common Mistakes:
  • Thinking Nginx runs Flask code
  • Confusing Nginx with database storage
  • Believing Nginx compiles Python code
2. Which Nginx directive is used to specify the Flask app server URL in the reverse proxy configuration?
easy
A. proxy_pass
B. server_name
C. listen
D. root

Solution

  1. Step 1: Identify directive for backend URL

    The directive that tells Nginx where to send requests is proxy_pass.
  2. Step 2: Confirm other directives' roles

    server_name sets domain, listen sets port, root sets file path.
  3. Final Answer:

    proxy_pass -> Option A
  4. Quick Check:

    Backend URL = proxy_pass [OK]
Hint: proxy_pass points to Flask app URL in Nginx config [OK]
Common Mistakes:
  • Using server_name instead of proxy_pass for backend URL
  • Confusing listen with proxy_pass
  • Setting root for proxy backend
3. Given this Nginx snippet, what happens when a client requests http://example.com/api/data?
location /api/ {
    proxy_pass http://127.0.0.1:5000/;
}
medium
A. Request is served from Nginx's local files
B. Request is forwarded to http://127.0.0.1:5000/data
C. Request results in 404 error
D. Request is forwarded to http://127.0.0.1:5000/api/data

Solution

  1. Step 1: Understand proxy_pass with trailing slash

    Since proxy_pass ends with a slash, Nginx appends the full request URI after the location prefix.
  2. Step 2: Combine location and proxy_pass

    Request /api/data is forwarded as http://127.0.0.1:5000/api/data.
  3. Final Answer:

    Request is forwarded to http://127.0.0.1:5000/api/data -> Option D
  4. Quick Check:

    Trailing slash keeps full path = C [OK]
Hint: Trailing slash in proxy_pass keeps full path [OK]
Common Mistakes:
  • Removing /api/ from forwarded URL incorrectly
  • Assuming Nginx serves files locally
  • Expecting 404 without backend
4. You configured Nginx as below but get a 502 Bad Gateway error. What is the likely cause?
location / {
    proxy_pass http://127.0.0.1:8000;
}
Your Flask app runs on port 5000.
medium
A. Nginx is forwarding to wrong port 8000 instead of 5000
B. proxy_pass missing trailing slash causes error
C. Flask app must run on port 8000 for Nginx
D. Nginx cannot proxy to localhost

Solution

  1. Step 1: Check proxy_pass target port

    proxy_pass points to port 8000, but Flask runs on 5000, so no backend listens on 8000.
  2. Step 2: Understand 502 Bad Gateway cause

    502 means Nginx can't connect to backend server at specified address and port.
  3. Final Answer:

    Nginx is forwarding to wrong port 8000 instead of 5000 -> Option A
  4. Quick Check:

    Port mismatch causes 502 error = A [OK]
Hint: Match proxy_pass port to Flask app port exactly [OK]
Common Mistakes:
  • Blaming missing trailing slash for 502
  • Thinking Flask must run on 8000
  • Assuming Nginx can't proxy localhost
5. You want Nginx to forward requests from /app/ to your Flask app at http://127.0.0.1:5000/, but remove the /app prefix before forwarding. Which configuration achieves this?
hard
A.
location /app/ {
    proxy_pass http://127.0.0.1:5000/app/;
}
B.
location /app/ {
    proxy_pass http://127.0.0.1:5000;
}
C.
location /app/ {
    proxy_pass http://127.0.0.1:5000/;
}
D.
location /app {
    proxy_pass http://127.0.0.1:5000/;
}

Solution

  1. Step 1: Understand proxy_pass without trailing slash

    When proxy_pass URL has no trailing slash, Nginx replaces the matching location prefix with the proxy_pass path.
  2. Step 2: Apply to /app/ location

    With location /app/ and proxy_pass http://127.0.0.1:5000, the /app/ prefix is removed before forwarding.
  3. Step 3: Check other options

    The configuration with proxy_pass http://127.0.0.1:5000/; keeps /app/ prefix, the one with proxy_pass http://127.0.0.1:5000/app/; adds /app/ twice, and location without trailing slash causes mismatch.
  4. Final Answer:

    location /app/ { proxy_pass http://127.0.0.1:5000; } -> Option B
  5. Quick Check:

    proxy_pass without slash removes location prefix = A [OK]
Hint: No trailing slash on proxy_pass removes location prefix [OK]
Common Mistakes:
  • Adding trailing slash keeps prefix in forwarded URL
  • Using location without trailing slash causes mismatch
  • Duplicating /app/ in proxy_pass URL
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard