Discover why splitting web and application servers can save your website from chaos and crashes!
Web server vs application server in Nginx - When to Use Which
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you have a website where users upload photos and also interact with a shopping cart. You try to handle everything manually by writing code that serves files and runs your app logic all in one place.
This manual way gets messy fast. Serving static files like images and running complex app code together slows things down. It's hard to fix bugs or add features because everything is tangled.
Using a web server and an application server separately makes life easier. The web server quickly handles static files and forwards requests needing logic to the application server. This clear split keeps things fast and organized.
Serve static files and run app logic in one script
nginx serves static files; forwards dynamic requests to app server app server runs business logic
This separation lets your website handle many users smoothly and makes updates safer and faster.
A popular online store uses nginx as a web server to deliver images and CSS quickly, while a separate application server runs the shopping cart and payment logic.
Manual all-in-one handling slows performance and complicates updates.
Web servers efficiently serve static content and route requests.
Application servers focus on running business logic and dynamic content.
Practice
Solution
Step 1: Understand the role of a web server
A web server mainly serves static content such as images, HTML, CSS, and JavaScript files directly to users.Step 2: Differentiate from application server
An application server runs backend code to create dynamic content, which is different from a web server's role.Final Answer:
To deliver static files like images and HTML directly to users -> Option AQuick Check:
Web server = static file delivery [OK]
- Confusing web server with application server
- Thinking web server runs backend logic
- Assuming web server manages databases
Solution
Step 1: Identify correct directive for forwarding
Theproxy_passdirective is used in nginx to forward requests to an application server.Step 2: Check other options for correctness
rootserves static files,fastcgi_passis for FastCGI servers, andredirectsends HTTP redirects, not proxying.Final Answer:
location / { proxy_pass http://localhost:3000; } -> Option CQuick Check:
Use proxy_pass to forward requests [OK]
- Using root instead of proxy_pass for forwarding
- Confusing fastcgi_pass with proxy_pass
- Using redirect which changes URL instead of proxying
/app?
location /app {
proxy_pass http://127.0.0.1:8080;
}Solution
Step 1: Analyze the proxy_pass directive
Theproxy_passdirective tells nginx to forward matching requests to the specified backend server.Step 2: Understand request handling
Requests to/appare sent to the application server at 127.0.0.1:8080, not served as static files or redirected.Final Answer:
nginx forwards the request to the application server at 127.0.0.1:8080 -> Option BQuick Check:
proxy_pass forwards requests to backend [OK]
- Thinking nginx serves static files here
- Confusing proxy_pass with redirect
- Assuming 404 error without backend
location /api {
proxy_pass http://localhost:5000/api;
}
But requests to /api/users fail. What is the likely problem?Solution
Step 1: Understand proxy_pass URI behavior
When proxy_pass includes a URI (like /api), nginx replaces the matching part of the request URI with that URI, causing duplication.Step 2: Correct proxy_pass to avoid URI duplication
Removing /api from proxy_pass (usinghttp://localhost:5000/) forwards the full original URI correctly.Final Answer:
proxy_pass should be http://localhost:5000/ without /api -> Option DQuick Check:
proxy_pass URI affects request path [OK]
- Including URI in proxy_pass causing double paths
- Thinking HTTPS is required for localhost
- Believing nginx can't proxy localhost
/var/www/html and forward API requests to an application server on port 4000. Which configuration correctly achieves this?Solution
Step 1: Assign root for static files
The root directive inlocation /serves static files from/var/www/html.Step 2: Forward API requests correctly
Thelocation /api/block usesproxy_passto forward API calls to the application server on port 4000.Step 3: Verify order and correctness
Static files served at root, API forwarded properly. Other options mix these roles incorrectly.Final Answer:
location / { root /var/www/html; } location /api/ { proxy_pass http://localhost:4000/; } -> Option AQuick Check:
Static files root + API proxy_pass = correct setup [OK]
- Swapping root and proxy_pass locations
- Adding URI in proxy_pass causing path issues
- Not using trailing slash in location /api/
