Quantcast
Channel: Serverphorums.com - HAProxy
Viewing all articles
Browse latest Browse all 5112

How to add functionality to server static files for certain url? (1 reply)

$
0
0
Hi,

We have a very special requirements to implement which is to enable haproxy to server static files.
We know that by introducing Nginx or apache as a backend, we can do that with haproxy, but situation is we cannot do that.
We have looked into the source code for a while, but don't have a clear view of how to do it.

Currently we know that,

1, where to get the http request header,


proto_http.c

```
        /*************************************************************
         * OK, that's finished for the headers. We have done what we *
         * could. Let's switch to the DATA state.                    *
         ************************************************************/
        req->analyse_exp = TICK_ETERNITY;
        req->analysers &= ~an_bit;
```

so we are able to get the specific URL here and return static files (we are ok to hardcode the url->static files map in source code)
for example, here we setting a flag
req->staticFile = 1;


2. stream.c:process_session

```

resync_request:
      while (ana_list && max_loops--) {
                                /* Warning! ensure that analysers are always placed in ascending order! */
                                ANALYZE    (s, req, flt_start_analyze,          ana_list, ana_back, AN_REQ_FLT_START_FE);
                                FLT_ANALYZE(s, req, tcp_inspect_request,        ana_list, ana_back, AN_REQ_INSPECT_FE);
                                FLT_ANALYZE(s, req, http_wait_for_request,      ana_list, ana_back, AN_REQ_WAIT_HTTP);
                                FLT_ANALYZE(s, req, http_wait_for_request_body, ana_list, ana_back, AN_REQ_HTTP_BODY);
                                FLT_ANALYZE(s, req, http_process_req_common,    ana_list, ana_back, AN_REQ_HTTP_PROCESS_FE, sess->fe);
                                FLT_ANALYZE(s, req, process_switching_rules,    ana_list, ana_back, AN_REQ_SWITCHING_RULES);
                                ANALYZE    (s, req, flt_start_analyze,          ana_list, ana_back, AN_REQ_FLT_START_BE);
                                FLT_ANALYZE(s, req, tcp_inspect_request,        ana_list, ana_back, AN_REQ_INSPECT_BE);
                                FLT_ANALYZE(s, req, http_process_req_common,    ana_list, ana_back, AN_REQ_HTTP_PROCESS_BE, s->be);
                                FLT_ANALYZE(s, req, http_process_tarpit,        ana_list, ana_back, AN_REQ_HTTP_TARPIT);
                                FLT_ANALYZE(s, req, process_server_rules,       ana_list, ana_back, AN_REQ_SRV_RULES);
                                FLT_ANALYZE(s, req, http_process_request,       ana_list, ana_back, AN_REQ_HTTP_INNER);
                                FLT_ANALYZE(s, req, tcp_persist_rdp_cookie,     ana_list, ana_back, AN_REQ_PRST_RDP_COOKIE);
                                FLT_ANALYZE(s, req, process_sticking_rules,     ana_list, ana_back, AN_REQ_STICKING_RULES);
                                ANALYZE    (s, req, flt_analyze_http_headers,   ana_list, ana_back, AN_REQ_FLT_HTTP_HDRS);
                                ANALYZE    (s, req, http_request_forward_body,  ana_list, ana_back, AN_REQ_HTTP_XFER_BODY);
                                ANALYZE    (s, req, flt_xfer_data,              ana_list, ana_back, AN_REQ_FLT_XFER_DATA);
                                ANALYZE    (s, req, flt_end_analyze,            ana_list, ana_back, AN_REQ_FLT_END);
                                break;
                        }
```
we know that by using these flags, we can control the function to execute.

so question here, how to abort normal process after we get request header(not to connect to a backend and forward response to client), but read files from harddisk and forward to client?

like
```
req.analysers = AN_REQ_FLT_END;
res.analysers = AN_RES_FLT_END;
?
and how to forward the memory data of this static file to output buffer?


Thanks a lot in advance

Viewing all articles
Browse latest Browse all 5112

Trending Articles