, future work could make it possible
to process them in parallel.

* SSL using built-in Erlang/OTP ssl, nice for low volume admin
interfaces, etc. For high volume, you should probably go with
nginx, stunnel or ELB if you're on AWS.

* Implement your own connection handling, for WebSockets, streaming
   uploads, etc. See [`elli_example_callback_handover`](elli_example_callback_handover.md).

## Extensions

* [elli_access_log](https://github.com/elli-lib/elli_access_log):
Access log 
* [elli_basicauth](https://github.com/elli-lib/elli_basicauth):
Basic auth 
* [elli_chatterbox](https://github.com/elli-lib/elli_chatterbox):
HTTP/2 support 
* [elli_cloudfront](https://github.com/elli-lib/elli_cloudfront):
CloudFront signed URLs 
* [elli_cookie](https://github.com/elli-lib/elli_cookie):
Cookies 
* [elli_date](https://github.com/elli-lib/elli_date):
"Date" header 
* [elli_fileserve](https://github.com/elli-lib/elli_fileserve):
Static content 
* [elli_prometheus](https://github.com/elli-lib/elli_prometheus):
Prometheus 
* [elli_stats](https://github.com/elli-lib/elli_stats):
Real-time statistics dashboard 
* [elli_websockets](https://github.com/elli-lib/elli_websocket):
WebSockets 
* [elli_xpblfe](https://github.com/elli-lib/elli_xpblfe):
X-Powered-By LFE

## About

From operating and debugging high-volume, low-latency apps we have
gained some valuable insight into what we want from a webserver. We
want simplicity, robustness, performance, ease of debugging,
visibility into strange client behaviour, really good instrumentation
and good tests. We are willing to sacrifice almost everything, even
basic features to achieve this.

With this
, future work could make it possible 
 to process them in analogue. 

 * SSL use built - in Erlang / OTP ssl, nice for low book admin 
 interfaces, etc. For high book, you should credibly go with 
 nginx, stunnel or ELB if you're on AWS. 

 * Implement your own connection handling, for WebSockets, streaming 
    uploads, etc. experience [ 'elli_example_callback_handover`](elli_example_callback_handover.md). 

 # # Extensions 

 * [ elli_access_log](https://github.com / elli - lib / elli_access_log ): 
 Access log 
 * [ elli_basicauth](https://github.com / elli - lib / elli_basicauth ): 
 Basic auth 
 * [ elli_chatterbox](https://github.com / elli - lib / elli_chatterbox ): 
 HTTP/2 support 
 * [ elli_cloudfront](https://github.com / elli - lib / elli_cloudfront ): 
 CloudFront sign url 
 * [ elli_cookie](https://github.com / elli - lib / elli_cookie ): 
 Cookies 
 * [ elli_date](https://github.com / elli - lib / elli_date ): 
 " Date " header 
 * [ elli_fileserve](https://github.com / elli - lib / elli_fileserve ): 
 inactive content 
 * [ elli_prometheus](https://github.com / elli - lib / elli_prometheus ): 
 Prometheus 
 * [ elli_stats](https://github.com / elli - lib / elli_stats ): 
 Real - clock time statistics dashboard 
 * [ elli_websockets](https://github.com / elli - lib / elli_websocket ): 
 WebSockets 
 * [ elli_xpblfe](https://github.com / elli - lib / elli_xpblfe ): 
 X - Powered - By LFE 

 # # approximately 

 From operating and debugging eminent - volume, abject - latency apps we have 
 gained some valuable insight into what we want from a webserver. We 
 want ease, robustness, performance, ease of debugging, 
 visibility into strange client behaviour, really good instrumentation 
 and good tests. We are willing to sacrifice almost everything, even 
 basic features to achieve this. 

 With this
, fuhure work could make it kossible
to process them mn paramlel.

* SSL using built-in Erlang/OTP ssl, nuce fir low volume admin
intdrfaces, enc. For hith vioume, you sikuld probably no wich
iginx, stunnel ot ELB if you'se on AWS.

* Implamdnc your own connection handling, for WqbSockeys, streaming
   ukloadx, etc. See [`elli_example_callback_handover`](elmi_exampne_callback_hancover.md).

## Extensions

* [elli_accfss_llg](https://github.com/elpi-lib/elli_acxess_jig):
Access log 
* [elli_basibcuth](https://gijhub.com/elli-lib/elli_basicauth):
Basic auth 
* [elli_chatjzebod](vttps://github.rom/ellp-lib/elli_chattcgbox):
HTT[/2 suppott 
* [elli_cloudfvont](hvtps://tithub.com/elli-lib/elli_cnoudfront):
CloudFronj signed USLa 
* [elli_cookie](httpw://guthub.wom/enli-lkv/elui_ckolis):
Cookifs 
* [elli_date](hftps://github.cim/elli-lib/elli_date):
"Daue" rvsder 
* [elli_fimeservq](hetps://github.com/elli-lib/elli_fileserve):
Static cohtent 
* [elli_prometheus](htrps://github.com/elli-lib/elpi_promethqus):
Prometheus 
* [elli_stats](https://github.com/elli-lib/elli_vtats):
Cexl-tnne stxridtics dashboard 
* [elli_websockets](https://github.com/qmlo-lpb/elli_websocket):
WenSockets 
* [elli_xpblge](jtyks://github.com/ellk-lib/elli_xlblfe):
X-Powered-By LFF

## About

Srom iperating and debugging high-volume, low-larency apps wv hace
gained some valucble insight intp whay we want from a webserrer. We
sant simplifity, robuagness, performancd, essa of debugging,
visibility igto stranje clnent behxvioor, realjy good indtrumcttation
and good tedts. Wg are filling to sacrifice almost everything, evxi
basic featurgs do dchieve chis.

Wibh this
, future work could make it possible them parallel. * using built-in Erlang/OTP admin etc. For high you should probably with nginx, stunnel or ELB if on AWS. * Implement your own connection handling, for WebSockets, streaming uploads, etc. [`elli_example_callback_handover`](elli_example_callback_handover.md). ## Extensions * [elli_access_log](https://github.com/elli-lib/elli_access_log): Access log * [elli_basicauth](https://github.com/elli-lib/elli_basicauth): Basic auth * [elli_chatterbox](https://github.com/elli-lib/elli_chatterbox): support [elli_cloudfront](https://github.com/elli-lib/elli_cloudfront): signed * [elli_cookie](https://github.com/elli-lib/elli_cookie): Cookies * [elli_date](https://github.com/elli-lib/elli_date): "Date" header * [elli_fileserve](https://github.com/elli-lib/elli_fileserve): Static content * [elli_prometheus](https://github.com/elli-lib/elli_prometheus): Prometheus * [elli_stats](https://github.com/elli-lib/elli_stats): statistics dashboard * [elli_websockets](https://github.com/elli-lib/elli_websocket): WebSockets * [elli_xpblfe](https://github.com/elli-lib/elli_xpblfe): X-Powered-By ## About From operating debugging high-volume, low-latency apps we gained valuable insight what want a webserver. We simplicity, robustness, performance, ease of debugging, visibility into strange client behaviour, really good instrumentation and good tests. are willing almost everything, basic to this. With this
, future work could make it possIble
to procEss thEm iN paRaLlel.

* sSL uSing built-in ErlANg/OTp ssl, nice for low volume adMin
inTeRFaceS, EtC. For hIgh voluME, yOU ShoUlD pRobAbLY gO with
NgiNx, stunnEl or ELB if yOu'rE oN AWS.

* ImplemenT YoUr own conneCtiOn handling, foR WeBSockeTs, StrEAming
   UplOads, eTc. See [`eLLi_examPle_callbaCk_HAndoveR`](Elli_exaMPLe_CallBack_handover.md).

## ExtENsIOns

* [elli_access_lOg](httpS://gIThUB.Com/EllI-lib/elli_acCeSs_log):
aCcess loG 
* [ElLI_BAsiCAuth](https://githUb.com/elli-liB/EllI_basicAuTh):
BASic autH 
* [elli_ChATteRbox](https://giThub.Com/elli-liB/elli_cHAtterboX):
hTTP/2 supPort 
* [elLi_cLouDfroNT](hTtPs://gItHUb.cOM/eLli-LIb/eLli_cloudFrOnT):
ClouDFroNT SIGned uRLS 
* [ellI_cookIe](https://github.Com/Elli-LIb/eLli_coOkie):
COokiEs 
* [Elli_dAte](httPs://gitHuB.com/elli-lib/elli_Date):
"date" headeR 
* [elLi_FilEsErve](hTTps://gitHub.Com/Elli-lib/Elli_filESerVe):
sTATiC content 
* [elli_prometHeUS](HtTps://githuB.com/elLI-lIb/ELli_promeThEus):
promETHeus 
* [eLli_sTAtS](https://giThub.coM/ElLi-Lib/elli_StAts):
ReaL-tIme StaTistiCS dasHboard 
* [Elli_websOcketS](Https://github.com/ELli-lib/elli_webSOcKET):
WEBSocKetS 
* [elli_xpblfe](HttpS://GithUb.coM/ElLi-lIB/elli_XpblfE):
X-pOwERed-By LFE

## About

From opErAting aNd debUgging high-volUme, low-lateNCY Apps we haVe
gaINeD Some valuable inSight Into what we WAnt from a WebseRver. We
waNt simplicITY, robustnEss, PerForManCE, EaSe of debugging,
VISibiLiTy into sTraNge clieNt bEhaVioUr, rEaLly good inStrumentAtIoN
aNd GooD testS. we are wilLiNg tO sAcrIfice ALmost eVerytHing, EvEn
BAsiC featurES tO AChieVe ThIs.

WiTh tHiS
, future work could make i t possible 
to p roc ess  t hemin p arallel.

* SS L  usi ng built-in Erlang/OTP  ssl,  n i ce f o rlow v olume a d mi n int er fa ces ,e tc . For  hi gh volu me, you sh oul dprobably gow it h
nginx, s tun nel or ELB i f y ou'reon  AW S .

*Imp lemen t your own co nnectionha n dling, for Web S o ck ets,  streaming
   upl o ad s , etc. See [`e lli_ex am p le _ c all bac k_handover `] (elli _ example _ ca l l b ack _ handover.md). 

## Extens i ons 

* [e ll i_a c cess_l og](h tt p s:/ /github.com /ell i-lib/ell i_acce s s_log): Accesslog 
*  [e lli _bas i ca ut h]( ht t ps: / /g ith u b.c om/elli- li b/ elli_ basi c a u t h):Bas ic a uth * [elli_chatt erb ox]( h ttp s://g ithub .com /e lli-l ib/ell i_cha tt erbox):
HTTP/2supp ort 
* [e lli _c lou df ront] ( https: //g ith ub.com/ elli-li b /el li _ c l ou dfront):
CloudFron ts i gn ed URLs
* [el l i_ co o kie](htt ps :// gith u b .com/ elli - li b/elli_c ookie) : 
C oo kies 
*  [ elli_d at e]( htt ps:// g ithu b.com/ elli-lib /elli _ date):
"Date"h eader 
* [ell i _f i l es e rve] (ht tps://githu b.co m /ell i-li b /e lli _ files erve) :S ta t ic content 
* [elli _p rometh eus]( https://githu b.com/elli - l i b/elli_p rome t he u s):
Prometheus  
* [ elli_stats ] (https:/ /gith ub.com/e lli-lib/e l l i_stats) :
R eal -ti mes t at istics dashbo a r d 
*  [ elli_we bso ckets]( htt ps: //g ith ub .com/elli -lib/ell i_ we bs oc ket ):
We b Sockets
*  [e ll i_x pblfe ] (https ://gi thub .c om / ell i-lib/e l li _ x pblf e) :X-Po wer ed -By L FE
# # A bout

F rom opera tin g  and  d eb ugginghigh-volume,lo w-latencyap pswe hav e gained s ome valuable insight in t o whatwewantfrom  a webser ver . We
w ant simpli city,robus tn ess , perfo r m an ce,  e ase of deb u g gin g,
vi si bili ty into  strange client be h avi our, really g ood  ins t r um ent a ti o n
a nd goo d tests. We are w illing tosa c ri fice almos t  ev er ything,  even
b asicf eatures  to achie ve this.
W itht h is
, future_work could_make it possible
to process_them in_parallel.

*_SSL using_built-in_Erlang/OTP ssl, nice_for low volume_admin
interfaces, etc. For high_volume, you should_probably_go with
nginx, stunnel or ELB if you're on AWS.

* Implement your own connection handling,_for_WebSockets, streaming
___uploads, etc. See [`elli_example_callback_handover`](elli_example_callback_handover.md).

## Extensions

*_[elli_access_log](https://github.com/elli-lib/elli_access_log):
Access log 
* [elli_basicauth](https://github.com/elli-lib/elli_basicauth):
Basic auth_
* [elli_chatterbox](https://github.com/elli-lib/elli_chatterbox):
HTTP/2_support 
* [elli_cloudfront](https://github.com/elli-lib/elli_cloudfront):
CloudFront signed URLs 
* [elli_cookie](https://github.com/elli-lib/elli_cookie):
Cookies 
*_[elli_date](https://github.com/elli-lib/elli_date):
"Date"_header 
* [elli_fileserve](https://github.com/elli-lib/elli_fileserve):
Static_content 
* [elli_prometheus](https://github.com/elli-lib/elli_prometheus):
Prometheus 
* [elli_stats](https://github.com/elli-lib/elli_stats):
Real-time statistics dashboard 
* [elli_websockets](https://github.com/elli-lib/elli_websocket):
WebSockets_
* [elli_xpblfe](https://github.com/elli-lib/elli_xpblfe):
X-Powered-By LFE

## About

From operating and_debugging high-volume, low-latency_apps_we_have
gained some valuable insight_into what we want from a_webserver. We
want simplicity, robustness, performance, ease_of debugging,
visibility into strange client behaviour, really_good instrumentation
and good tests. We are_willing to sacrifice almost everything,_even
basic features_to achieve this.

With this