Puncte:1

Convertiți var NGINX din majuscule în minuscule

drapel co

Am nevoie de puțin ajutor cu configurarea nginx conf. Configurația mea este practic asta...

harta $http_apikey $api_client_name {
    Mod implicit "";

    „CLIENT_ID” „client_one”;
}

Server {
  access_log /dev/stdout principal;

  asculta 443 ssl;
  nume_server gazdă locală;

  # Configurare TLS
  ssl_certificate /etc/nginx/ssl/cert.pem;
  ssl_certificate_key /etc/nginx/ssl/key.pem;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 5m;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_protocols TLSv1.2 TLSv1.3;

  proxy_intercept_errors activat; # Nu trimiteți erori de backend către client
  tip_implicit aplicație/json; # Dacă nu există tip de conținut, presupuneți JSON

  locație ~ ^/index-$http_apikey {
      dacă ($http_apikey = "") {
          întoarce 401; # Neautorizat
      }

      if ($api_client_name = "") {
          întoarce 403; # Interzis
      }

      proxy_pass http://elasticsearch:9200;
  }

....

Ideea este să obțineți http_apikey din informațiile antet de pe POST și folosiți-l ca parte a linkului. Cu toate acestea VAR, http_apikey, are litere mari, precum și litere mici și cifre. Se așteaptă ca URI-ul să fie cu litere mici, deci, în esență:

  locație ~ ^/index-$http_apikey.lower() {
      dacă ($http_apikey = "") {
          întoarce 401; # Neautorizat
      }

      if ($api_client_name = "") {
          întoarce 403; # Interzis
      }

      proxy_pass http://elasticsearch:9200;
  }

locație ~ ^/index-$http_apikey.lower()

Există vreo modalitate de a face acest lucru în nginx? Ca în bash, aș face ${http_apikey,,} ... există un echivalent nginx?

Mulțumiri

Gerard H. Pille avatar
drapel in
Ce este un „VAR”?
Puncte:1
drapel za

Versiune scurtă: nu, asta nu este posibil.

Versiune scurtă, dar optimistă: asta nu este posibil când se folosește numai nginx, dar este posibil când se folosește extensia lua. Sau orice altă extensie nginx pentru limbaj de programare, cum ar fi perl.

Versiune lungă: deci încercați să scrieți un cod în fișierele de configurare nginx. Deși configurația nginx oferă unele instrumente de programare (setarea variabilelor, folosind ramuri condiționate), limbajul de configurare nu este un cod (diferența principală dintre limbajul de programare și config este că instrucțiunile de cod sunt tratate în ordinea în care apar și Efectul declarațiilor de configurare este independent de poziția sa - de aceea există atât de mult zgomot în jurul ramurilor condiționate nginx (Dacă... sunt rele, și similar.) Și probabil că acesta este lucrul pe care Igor Sysoev și echipa sa și-au dat seama cu mult timp în urmă și au început să implementeze extensia de programare cu drepturi depline nginx - lua, în loc să remedieze problemele în embrionul de programare nginx config (aceasta... De aceea este parțial și incomplet - dacă nu au dat altfel, ordinea dacă și a stabilits este implicit și așa mai departe. Deci, de îndată ce doriți să puneți un cod în fișierele de configurare nginx, ar trebui să începeți să utilizați lua (sau altceva). Lua poate fi adăugat folosind openresty Versiunea nginx, care conține lua construită corect cu o mulțime de extensii și exemple, sau doar adăugarea separată a modulului thd lua nginx, aceasta depinde de distribuția pe care o utilizați.

Nick Hatfield avatar
drapel co
Mulțumesc pentru înțelegere. Folosesc cel mai recent container docker nginx care are versiunea 1.14.2. Puteți da un exemplu despre cum să rezolvați problema de mai sus cu perl sau lua? Mulțumiri
drookie avatar
drapel za
Exemplul perl este sub primul link pe care l-am dat.
Nick Hatfield avatar
drapel co
Minunat multumesc!!
Nick Hatfield avatar
drapel co
Hei, din nou... deci exemplul perl pare să arate și să se potrivească doar cu un caz de utilizare în care clientul trimite un URI precum `SoMeThInG` și comanda perl va converti `nginx.var.uri`, într-o literă mică. şir. Îmi este greu să fac ca acest lucru să funcționeze cu scenariul descris mai sus în care utilizatorul trimite un antet HTTP `-H "apikey: SoM3RaNd0m"` și trebuie să captăm acest lucru și să îl facem cu litere mici și apoi să îl trimitem la locație și pune-l să se potrivească cu litere mici acolo. `http_apikey: S0m3RaD0m3` `(perl => http_apikey_minuscule)` `locație ~ ^/hnt-$http_apikey_minuscule { }`

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.