OpenResty: troi NGINX yn weinydd cymhwysiad llawn

OpenResty: troi NGINX yn weinydd cymhwysiad llawnRydym unwaith eto yn cyhoeddi trawsgrifiad o adroddiad y gynhadledd Llwyth Uchel++ 2016, a gynhaliwyd yn Skolkovo ger Moscow ar Dachwedd 7-8 y llynedd. Vladimir Protasov yn esbonio sut i ymestyn ymarferoldeb NGINX gydag OpenResty a Lua.

Helo bawb, fy enw i yw Vladimir Protasov, rwy'n gweithio yn Parallels. Fe ddywedaf ychydig wrthych amdanaf fy hun. Rwy'n treulio tri chwarter fy mywyd yn ysgrifennu cod. Deuthum yn rhaglennydd i'r craidd yn yr ystyr llythrennol: weithiau rwy'n gweld cod yn fy mreuddwydion. Mae chwarter bywyd yn ddatblygiad diwydiannol, yn ysgrifennu cod sy'n mynd yn syth i gynhyrchu. Cod y mae rhai ohonoch yn ei ddefnyddio ond ddim yn sylweddoli hynny.

Felly rydych chi'n deall pa mor ddrwg ydoedd. Pan oeddwn ychydig yn iau, deuthum a chefais y cronfeydd data dau-terabyte hyn. Mae'n llwyth uchel i bawb yma nawr. Es i gynadleddau a gofyn: “Bois, dywedwch wrthyf, mae gennych chi ddata mawr, a yw popeth yn cŵl? Sawl sylfaen sydd gennych chi yno? Fe wnaethon nhw fy ateb: “Mae gennym ni 100 gigabeit!” Dywedais: “Cŵl, 100 gigabeit!” Ac roeddwn i'n meddwl i mi fy hun sut i gynnal fy wyneb poker yn ofalus. Rydych chi'n meddwl, ydy, mae'r bechgyn yn cŵl, ac yna rydych chi'n mynd yn ôl ac yn twtio gyda'r cronfeydd data aml-terabyte hyn. A hyn - bod yn iau. Allwch chi ddychmygu pa ergyd yw hon?

Rwy'n gwybod mwy nag 20 o ieithoedd rhaglennu. Mae hyn yn rhywbeth roedd yn rhaid i mi ei ddarganfod wrth i mi weithio. Maen nhw'n rhoi cod i chi yn Erlang, C, C ++, Lua, Python, Ruby, rhywbeth arall, ac mae'n rhaid i chi dorri'r cyfan. Yn gyffredinol, roedd yn rhaid i mi. Nid oedd yn bosibl cyfrifo'r union nifer, ond rhywle tua'r 20fed collwyd y nifer.

Gan fod pawb sy'n bresennol yn gwybod beth yw Parallels a beth rydyn ni'n ei wneud, ni fyddaf yn siarad am ba mor cŵl ydyn ni a beth rydyn ni'n ei wneud. Fe ddywedaf wrthych fod gennym 13 o swyddfeydd ledled y byd, mwy na 300 o weithwyr, datblygiad ym Moscow, Tallinn a Malta. Os dymunwch, gallwch fynd ag ef a symud i Malta os yw'n oer yn y gaeaf a bod angen i chi gynhesu'ch cefn.

Yn benodol, mae ein hadran yn ysgrifennu yn Python 2. Rydym mewn busnes ac nid oes gennym amser i weithredu technolegau ffasiynol, felly rydym yn dioddef. Rydyn ni'n defnyddio Django oherwydd mae ganddo bopeth, ac fe wnaethon ni gymryd yr hyn oedd yn ddiangen a'i daflu i ffwrdd. Hefyd MySQL, Redis a NGINX. Mae gennym ni lawer o bethau cŵl eraill hefyd. Mae gennym ni MongoDB, mae gennym ni gwningod yn rhedeg o gwmpas, mae gennym ni bopeth - ond nid fy un i ydyw, ac nid wyf yn ei wneud.

OpenResty

Dywedais amdanaf fy hun. Gadewch i ni ddarganfod beth rydw i'n mynd i siarad amdano heddiw:

  • Beth yw OpenResty a gyda beth mae'n cael ei fwyta?
  • Pam ailddyfeisio olwyn arall pan fydd gennym Python, NodeJS, PHP, Go a phethau cŵl eraill y mae pawb yn hapus â nhw?
  • Ac ychydig o enghreifftiau o fywyd. Roedd yn rhaid i mi dorri llawer ar yr adroddiad oherwydd fe gymerodd 3,5 awr i mi, felly ychydig o enghreifftiau fydd.

NGINX yw OpenResty. Diolch iddo, mae gennym weinydd gwe llawn sydd wedi'i ysgrifennu'n dda ac yn gweithio'n gyflym. Rwy'n credu bod y rhan fwyaf ohonom yn defnyddio NGINX wrth gynhyrchu. Rydych chi i gyd yn gwybod ei fod yn gyflym ac yn cŵl. Fe wnaethon nhw I / O cydamserol cŵl ynddo, felly nid oes angen i ni feicio unrhyw beth, yn union fel y gwnaethant gvent yn Python. Mae Gevent yn cŵl, yn wych, ond os byddwch chi'n ysgrifennu cod C a bod rhywbeth yn mynd o'i le, yna gyda Gevent byddwch chi'n mynd yn wallgof yn ei ddadfygio. Cefais y profiad: cymerodd ddau ddiwrnod cyfan i ddarganfod beth aeth o'i le yno. Pe na bai rhywun wedi cloddio o gwmpas ers sawl wythnos, dod o hyd i'r broblem, ysgrifennu ar y Rhyngrwyd, a Google heb ddod o hyd iddo, yna byddem wedi mynd yn hollol wallgof.

Mae NGINX eisoes wedi gwneud caching a chynnwys statig. Nid oes angen i chi boeni am sut i wneud hyn yn ddynol, fel nad ydych chi'n arafu yn rhywle, fel nad ydych chi'n colli disgrifyddion yn rhywle. Mae Nginx yn gyfleus iawn i'w ddefnyddio, nid oes angen i chi feddwl am beth i'w gymryd - WSGI, PHP-FPM, Gunicorn, Unicorn. Gosodwyd Nginx, a roddwyd i'r gweinyddwyr, maen nhw'n gwybod sut i weithio gydag ef. Mae Nginx yn prosesu ceisiadau mewn modd strwythuredig. Byddaf yn siarad am hyn ychydig yn ddiweddarach. Yn fyr, mae ganddo gyfnod pan oedd newydd dderbyn y cais, pan gafodd ei brosesu, a phryd y cyflwynodd y cynnwys i'r defnyddiwr.

Mae Nginx yn cŵl, ond mae un broblem: nid yw'n ddigon hyblyg, hyd yn oed gyda'r holl nodweddion cŵl y mae'r dynion wedi'u gwasgu i'r ffurfwedd, er gwaethaf y ffaith y gellir ei ffurfweddu. Nid yw'r pŵer hwn yn ddigon. Dyna pam y gwnaeth y bechgyn o Taobao, amser maith yn ôl, mae'n ymddangos fel wyth mlynedd yn ôl, adeiladu Lua i mewn iddo. Beth mae'n ei roi?

  • Maint. Mae'n fach. Mae LuaJIT yn rhoi tua 100-200 kilobytes o gof uwchben ac ychydig iawn o berfformiad uwchben.
  • Cyflymder. Mae dehonglydd LuaJIT yn agos at C mewn llawer o sefyllfaoedd, mewn rhai sefyllfaoedd mae'n colli i Java, mewn eraill mae'n perfformio'n well na hi. Am beth amser fe'i hystyriwyd fel y radd flaenaf, y casglwr JIT mwyaf cŵl. Nawr mae yna rai oerach, ond maen nhw'n drwm iawn, er enghraifft, yr un V8. Mae rhai dehonglwyr JS a Java HotSpot yn gyflymach ar rai adegau, ond mewn rhai mannau maent yn dal i golli.
  • Hawdd i ddysgu. Os oes gennych, dyweder, sylfaen cod Perl, ac nad ydych yn Archebu, ni fyddwch yn dod o hyd i raglenwyr Perl. Gan nad ydyn nhw'n bodoli, cawson nhw i gyd eu cymryd i ffwrdd, ac mae eu haddysgu yn hir ac yn anodd. Os ydych chi eisiau rhaglenwyr ar gyfer rhywbeth arall, efallai y bydd yn rhaid i chi hefyd eu hailhyfforddi neu ddod o hyd iddynt. Yn achos Lua, mae popeth yn syml. Gall unrhyw iau ddysgu Lua mewn tridiau. Cymerodd tua dwy awr i mi ddarganfod y peth. Ddwy awr yn ddiweddarach roeddwn eisoes yn ysgrifennu cod wrth gynhyrchu. Tua wythnos yn ddiweddarach aeth yn syth i gynhyrchu a gadawodd.

O ganlyniad, mae'n edrych fel hyn:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Mae llawer yma. Mae OpenResty wedi casglu criw o fodiwlau, rhai cyflym a rhai injan. Ac mae gennych chi bopeth yn barod - wedi'i leoli ac yn gweithio.

Примеры

Digon o'r geiriau, gadewch i ni symud ymlaen at y cod. Dyma ychydig o Helo Fyd:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Beth sydd yna? Mae hwn yn lleoliad Engins. Nid ydym yn poeni, nid ydym yn ysgrifennu ein llwybr ein hunain, nid ydym yn cymryd rhywfaint o un parod - mae gennym ni eisoes yn NGINX, rydym yn byw bywyd da a diog.

content_by_lua_block yn bloc sy'n dweud ein bod yn gwasanaethu cynnwys gan ddefnyddio sgript Lua. Rydym yn cymryd y newidyn Engins remote_addr a dodi i mewn string.format. Mae hyn yr un fath â sprintf, dim ond yn Lua, dim ond yn gywir. Ac rydym yn ei roi i'r cleient.

O ganlyniad, bydd yn edrych fel hyn:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Ond gadewch i ni ddychwelyd i'r byd go iawn. Nid oes neb yn defnyddio Hello World i gynhyrchu. Mae ein cais fel arfer yn mynd i'r gronfa ddata neu rywle arall ac mae'r rhan fwyaf o'r amser yn aros am ymateb.

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Mae'n eistedd ac yn aros. Nid yw'n dda iawn. Pan ddaw 100.000 o ddefnyddwyr, mae'n anodd iawn i ni. Felly gadewch i ni ddefnyddio cymhwysiad syml fel enghraifft. Byddwn yn edrych am luniau, er enghraifft, o gathod. Ond ni fyddwn yn chwilio yn unig, byddwn yn ehangu'r geiriau allweddol ac, os bydd y defnyddiwr yn chwilio am “gathod bach,” byddwn yn dod o hyd i gathod, cathod blewog, ac ati. Yn gyntaf, mae angen i ni gael y data cais ar y backend. Mae'n edrych fel hyn:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Mae dwy linell yn caniatáu ichi godi paramedrau GET, dim cymhlethdodau. Nesaf, gadewch i ni ddweud, o gronfa ddata gydag arwydd ar gyfer allweddair ac estyniad, rydym yn cael y wybodaeth hon gan ddefnyddio ymholiad SQL rheolaidd. Mae'n syml. Mae'n edrych fel hyn:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Cysylltu'r llyfrgell resty.mysql, sydd gennym eisoes yn y pecyn. Nid oes angen i ni osod unrhyw beth, mae popeth yn barod. Rydym yn nodi sut i gysylltu a gwneud ymholiad SQL:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Mae ychydig yn frawychus yma, ond mae popeth yn gweithio. Dyma 10 yw'r terfyn. Rydyn ni'n tynnu 10 cais allan, rydyn ni'n ddiog, dydyn ni ddim eisiau dangos mwy. Anghofiais am y terfyn yn SQL.

Nesaf rydym yn dod o hyd i luniau ar gyfer pob ymholiad. Rydyn ni'n casglu criw o geisiadau ac yn llenwi tabl Lua o'r enw reqs, a gwnawn ngx.location.capture_multi.

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Anfonir yr holl geisiadau hyn yn gyfochrog, a dychwelir atebion atom. Mae'r amser gweithredu yn hafal i amser ymateb yr un arafaf. Os byddwn i gyd yn saethu mewn 50 milieiliad, ac yn anfon cant o geisiadau, yna byddwn yn derbyn ateb mewn 50 milieiliad.

Gan ein bod ni'n ddiog ac nad ydyn ni eisiau ysgrifennu HTTP a thrin caching, byddwn ni'n gwneud i NGINX wneud popeth i ni. Fel y gwelsoch, roedd cais am url/fetch, dyma fe:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Rydym yn ei gwneud yn syml proxy_pass, rydym yn nodi ble i storio, sut i wneud hynny, ac mae popeth yn gweithio i ni.

Ond nid yw hyn yn ddigon, mae angen inni roi'r data i'r defnyddiwr o hyd. Y syniad symlaf yw cyfresoli popeth yn JSON, yn hawdd, mewn dwy linell. Rydyn ni'n rhoi Math o Gynnwys, rydyn ni'n rhoi JSON.

Ond mae un anhawster: nid yw'r defnyddiwr eisiau darllen JSON. Mae angen inni ddenu datblygwyr pen blaen. Weithiau nid ydym am wneud hyn i ddechrau. A bydd arbenigwyr SEO yn dweud, os ydym yn chwilio am luniau, yna nid oes ots ganddyn nhw. Ac os byddwn yn rhoi rhywfaint o gynnwys iddynt, byddant yn dweud nad yw ein peiriannau chwilio yn mynegeio unrhyw beth.

Beth i'w wneud amdano? Wrth gwrs, byddwn yn rhoi HTML i'r defnyddiwr. Nid yw cynhyrchu â llaw yn comme il faut, felly rydym am ddefnyddio templedi. Mae llyfrgell ar gyfer hyn lua-resty-template.

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Mae'n debyg eich bod wedi gweld y tair llythyren frawychus OPM. Daw OpenResty gyda'i reolwr pecyn ei hun, lle gallwch chi osod criw o wahanol fodiwlau, yn benodol, lua-resty-template. Peiriant templed syml yw hwn, yn debyg i dempledi Django. Yno gallwch ysgrifennu cod a pherfformio amnewid newidiol.

O ganlyniad, bydd popeth yn edrych yn rhywbeth fel hyn:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Cymerasom y data a rendro'r templed, eto mewn dwy linell. Mae'r defnyddiwr yn hapus, derbyniodd cathod. Ers i ni ehangu'r cais, cafodd sêl ffwr ar gyfer cathod bach hefyd. Wyddoch chi byth, efallai ei fod yn chwilio am hyn yn union, ond ni allai lunio ei gais yn gywir.

Mae popeth yn cŵl, ond rydym wrthi'n datblygu ac nid ydym am ei ddangos i ddefnyddwyr eto. Gadewch i ni wneud yr awdurdodiad. I wneud hyn, gadewch i ni edrych ar sut mae NGINX yn trin y cais yn nhermau OpenResty:

  • Cam cyntaf - mynediad, pan fydd y defnyddiwr newydd gyrraedd, ac fe wnaethom edrych arno gan benawdau, yn ôl cyfeiriad IP, a data arall. Gallwn ei dorri i ffwrdd ar unwaith os nad ydym yn ei hoffi. Gellir defnyddio hwn ar gyfer awdurdodiad, neu os byddwn yn derbyn llawer o geisiadau, gallwn yn hawdd eu torri i ffwrdd ar y cam hwn.
  • ailysgrifennu. Rydym yn ailysgrifennu rhywfaint o ddata ceisiadau.
  • cynnwys. Rydym yn cyflwyno'r cynnwys i'r defnyddiwr.
  • hidlydd penawdau. Rydym yn disodli'r penawdau ymateb. Pe baem yn defnyddio proxy_pass, gallwn ailysgrifennu rhai penawdau cyn ei roi i'r defnyddiwr.
  • hidlydd corff. Gallwn newid y corff.
  • mewngofnodi - logio. Gallwch ysgrifennu logiau yn elasticsearch heb haen ychwanegol.

Bydd ein hawdurdodiad yn edrych rhywbeth fel hyn:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Byddwn yn ychwanegu hyn at yr un hwnnw location, a ddisgrifiwyd gennym o'r blaen, a rhowch y cod canlynol yno:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Edrychwn i weld a oes gennym docyn cwci. Os na, yna gofynnwn am awdurdodiad. Mae defnyddwyr yn gyfrwys a gallant ddyfalu bod angen iddynt osod tocyn cwci. Felly, byddwn hefyd yn ei roi yn Redis:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Mae'r cod ar gyfer gweithio gyda Redis yn syml iawn ac nid yw'n wahanol i ieithoedd eraill. Ar yr un pryd, nid yw'r holl fewnbwn / allbwn, yma ac acw, yn rhwystro. Os ydych chi'n ysgrifennu cod cydamserol, mae'n gweithio'n asyncronig. Bron fel gevent, ond wedi'i wneud yn dda.

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Gadewch i ni wneud yr awdurdodiad ei hun:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Rydym yn dweud bod angen inni ddarllen corff y cais. Rydym yn derbyn dadleuon POST ac yn gwirio bod y mewngofnodi a'r cyfrinair yn gywir. Os ydynt yn anghywir, yna rydym yn eich herio am awdurdodiad. Ac os yw'n gywir, ysgrifennwch y tocyn yn Redis:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Peidiwch ag anghofio gosod y cwci, gwneir hyn hefyd mewn dwy linell:

OpenResty: troi NGINX yn weinydd cymhwysiad llawn

Mae'r enghraifft yn syml ac yn ddamcaniaethol. Wrth gwrs, ni fyddwn yn gwneud gwasanaeth sy'n dangos cathod i bobl. Ond pwy a wyr ni. Felly gadewch i ni fynd dros yr hyn y gellir ei wneud ym maes cynhyrchu.

  • Backend minimalaidd. Weithiau mae angen i ni allbynnu ychydig yn unig o ddata i'r backend: rhywle mae angen i ni fewnosod dyddiad, rhywle mae angen i ni arddangos rhestr, dweud faint o ddefnyddwyr sydd ar y wefan nawr, atodi cownter neu ystadegau. Rhywbeth mor fach. Gellir gwneud rhai darnau bach yn hawdd iawn. Bydd hyn yn ei gwneud yn gyflym, yn hawdd ac yn wych.
  • Rhagbrosesu data. Weithiau rydyn ni eisiau ymgorffori hysbysebu yn ein tudalen, ac rydyn ni'n derbyn yr hysbyseb hwn gan ddefnyddio ceisiadau API. Mae hyn yn hawdd iawn i'w wneud yma. Nid ydym yn llwytho ein backend, sydd eisoes yn eistedd ac yn gweithio'n galed. Gallwch ei godi a'i gasglu yma. Gallwn goblau rhywfaint o JS neu, i'r gwrthwyneb, ei ddatgysylltu a rhagbrosesu rhywbeth cyn ei roi i'r defnyddiwr.
  • Ffasâd ar gyfer microwasanaeth. Mae hwn hefyd yn achos da iawn, fe'i gweithredais. Cyn hynny, roeddwn i'n gweithio yn Tenzor, cwmni sy'n delio ag adrodd yn electronig ac yn darparu adroddiadau i tua hanner yr endidau cyfreithiol yn y wlad. Fe wnaethon ni greu gwasanaeth, gwnaed llawer o bethau yno gan ddefnyddio'r un mecanwaith: llwybro, awdurdodi a mwy.
    Gellir defnyddio OpenResty fel glud ar gyfer eich microwasanaethau, gan ddarparu un mynediad i bopeth ac un rhyngwyneb. Gan y gellir ysgrifennu microservices yn y fath fodd fel bod gennych Node.js yma, PHP yma, Python yma, peth Erlang yma, rydym yn deall nad ydym am ailysgrifennu'r un cod ym mhobman. Felly, gellir plygio OpenResty i'r blaen.

  • Ystadegau a dadansoddeg. Fel arfer mae NGINX wrth y fynedfa, ac mae pob cais yn mynd drwyddo. Yn y lle hwn y mae yn gyfleus iawn i gasglu. Gallwch chi gyfrifo rhywbeth ar unwaith a'i uwchlwytho yn rhywle, er enghraifft, Elasticsearch, Logstash, neu ei ysgrifennu i'r log ac yna ei anfon i rywle.
  • Systemau aml-ddefnyddiwr. Er enghraifft, mae gemau ar-lein hefyd yn dda iawn i'w gwneud. Heddiw yn Cape Town, bydd Alexander Gladysh yn siarad am sut i brototeipio gêm aml-chwaraewr yn gyflym gan ddefnyddio OpenResty.
  • Hidlo Cais (WAF). Y dyddiau hyn mae'n ffasiynol gwneud pob math o waliau tân cymwysiadau gwe; mae yna lawer o wasanaethau sy'n eu darparu. Gan ddefnyddio OpenResty, gallwch wneud wal dân cymhwysiad gwe i chi'ch hun a fydd yn hidlo ceisiadau yn syml ac yn hawdd yn unol â'ch gofynion. Os oes gennych Python, yna rydych chi'n deall na fydd PHP yn bendant yn cael ei chwistrellu i chi, oni bai, wrth gwrs, eich bod chi'n ei silio yn unrhyw le o'r consol. Rydych chi'n gwybod bod gennych chi MySQL a Python. Yn ôl pob tebyg, efallai y byddant yn ceisio gwneud rhyw fath o groesi cyfeiriadur a chwistrellu rhywbeth i'r gronfa ddata. Felly, gallwch hidlo ymholiadau rhyfedd yn gyflym ac yn rhad ar y blaen.
  • Cymuned. Gan fod OpenResty wedi'i adeiladu ar NGINX, mae ganddo fonws - hyn cymuned NGINX. Mae'n fawr iawn, ac mae cyfran weddus o'r cwestiynau a fydd gennych ar y dechrau eisoes wedi'u datrys gan gymuned NGINX.

    Datblygwyr Lua. Ddoe siaradais â'r bechgyn a ddaeth i ddiwrnod hyfforddi HighLoad ++ a chlywed mai dim ond Tarantool a ysgrifennwyd yn Lua. Nid yw hyn yn wir, mae llawer o bethau wedi'u hysgrifennu yn Lua. Enghreifftiau: OpenResty, gweinydd Prosody XMPP, injan gêm Love2D, Lua wedi'i sgriptio yn Warcraft ac mewn mannau eraill. Mae yna lawer o ddatblygwyr Lua, mae ganddyn nhw gymuned fawr ac ymatebol. Cafodd fy holl gwestiynau Lua eu datrys o fewn ychydig oriau. Pan fyddwch chi'n ysgrifennu at y rhestr bostio, yn llythrennol o fewn ychydig funudau mae yna griw o ymatebion eisoes, yn disgrifio beth a sut, beth yw beth. Mae'n grêt. Yn anffodus, nid yw cymuned mor garedig, ysbrydol ym mhobman.
    Mae yna GitHub ar gyfer OpenResty, lle gallwch chi agor mater os yw rhywbeth wedi torri. Mae rhestr bostio ar Grwpiau Google, lle gallwch chi drafod materion cyffredinol, mae rhestr bostio yn Tsieinëeg - dydych chi byth yn gwybod, efallai nad ydych chi'n siarad Saesneg, ond rydych chi'n gwybod Tsieinëeg.

Canlyniadau

  • Rwy'n gobeithio fy mod wedi gallu cyfleu bod OpenResty yn fframwaith cyfleus iawn wedi'i deilwra ar gyfer y we.
  • Mae ganddi rwystr isel i fynediad, gan fod y cod yn debyg i'r hyn yr ydym yn ysgrifennu ynddo, mae'r iaith yn eithaf syml a minimalistaidd.
  • Mae'n darparu I/O asyncronaidd heb alwadau yn ôl, ni fydd gennym unrhyw nwdls fel y gallwn weithiau ysgrifennu yn NodeJS.
  • Mae'n hawdd ei ddefnyddio, gan mai dim ond NGINX sydd ei angen arnom gyda'r modiwl angenrheidiol a'n cod, ac mae popeth yn gweithio ar unwaith.
  • Cymuned fawr ac ymatebol.

Ni ddywedais yn fanwl sut mae llwybro yn cael ei wneud, trodd yn stori hir iawn.

Diolch am eich sylw!


Vladimir Protasov - OpenResty: troi NGINX yn weinydd cais llawn

Ffynhonnell: hab.com

Ychwanegu sylw