# upstream sent invalid status line while reading response header from upstream, client: 10.0.0.1, server: example.com

- **ID:** `nginx/upstream-sent-invalid-status-line-empty`
- **Domain:** nginx
- **Category:** protocol_error
- **Verification:** ai_generated
- **Fix Rate:** 76%

## Root Cause

Upstream server sends a malformed HTTP status line (e.g., empty or missing HTTP version), causing nginx to fail parsing the response.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| nginx 1.18.0 | active | — | — |
| nginx 1.20.1 | active | — | — |
| nginx 1.22.0 | active | — | — |
| nginx 1.24.0 | active | — | — |

## Workarounds

1. **Fix the upstream application to return a valid HTTP status line. For example, in a Python WSGI app, ensure the application returns a proper start line:
def application(environ, start_response):
    status = '200 OK'
    headers = [('Content-Type', 'text/plain')]
    start_response(status, headers)
    return [b'Hello World']
Check for missing or empty status strings in custom servers.** (85% success)
   ```
   Fix the upstream application to return a valid HTTP status line. For example, in a Python WSGI app, ensure the application returns a proper start line:
def application(environ, start_response):
    status = '200 OK'
    headers = [('Content-Type', 'text/plain')]
    start_response(status, headers)
    return [b'Hello World']
Check for missing or empty status strings in custom servers.
   ```
2. **Use nginx's proxy_pass with a rewrite to a different upstream that sanitizes responses, or place a reverse proxy like Varnish in front of the misbehaving upstream to normalize responses.** (70% success)
   ```
   Use nginx's proxy_pass with a rewrite to a different upstream that sanitizes responses, or place a reverse proxy like Varnish in front of the misbehaving upstream to normalize responses.
   ```

## Dead Ends

- **Set proxy_http_version 1.1;** — The error is about a malformed status line, not the HTTP version. Changing proxy version does not fix upstream's invalid output. (90% fail)
- **Increase proxy_read_timeout** — Timeout does not affect the format of the response; the upstream is responding, but with invalid data. (95% fail)
- **Add proxy_buffering off;** — Buffering affects how nginx reads the response body, not the status line parsing in the header. (92% fail)
