Web Server
Features of Web Server
- Static file serving.
- SSL/TLS support.
- Virtual hosts.
- Reverse proxying.
- Load balancing.
- Compression.
- Access controls.
- URL rewriting.
- Custom logging.
- Server-side includes.
- Limited WebDAV.
- FLV streaming.
- FastCGI.
Event-based vs Process-based
The main advantage of the asynchronous approach is scalability. In a process-based server, each simultaneous connection requires a thread which incurs significant overhead. An asynchronous server, on the other hand, is event-driven and handles requests in a single (or at least, very few) threads.
Nginx vs Apache Http Server
- Nginx: event-based
- Apache: process-based
Nginx is faster at serving static files and consumes much less memory for concurrent requests. Because Nginx is event-based, it doesn't need to spawn new processes or threads for each request, so its memory usage is very low.
499 CLIENT CLOSED REQUEST
499 is a non-standard status code used by nginx: if a client closes the connection while nginx is processing the request.
E.g. if nginx is used as reverse proxy, it will wait for the backend server(e.g. uWSGI) for X seconds, after that it will respond to the client with a 504 Gateway Timeout error. If the backend server is dead or dies while nginx is waiting, nginx sees that right away and returns 499 error
Nginx Restart
$ sudo nginx -s reload
Links
https://en.wikipedia.org/wiki/Comparison_of_web_server_software
WSGI, Java Servlet
On one side: full web server like Apache or Nginx; on the other side: application. WSGI is the middleware that implements both API.
Java's servlet API makes it possible for applications written with any Java web application framework to run in any web server that supports the servlet API.
HTTP Server
Java
Introduced in Java 18 (JEP 408: Simple Web Server).
$ jwebserver
# Specify port 9000
$ jwebserver -p 9000
Python
Start HTTP server
# Python 3.x:
$ python -m http.server
Serving HTTP on 0.0.0.0 port 8000 ...
# Python 2.x:
$ python -mSimpleHTTPServer 8080