Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 11719|Odpoveď: 1

[Web] Príklad ilustruje pravidlo prepísania v Nginx

[Kopírovať odkaz]
Zverejnené 5. 12. 2014 22:45:25 | | |
Jeden. Regulárna výrazová zhoda, kde:
* ~ je párovanie citlivé na veľkosť písmen
* ~* je zhoda bez ohľadu na veľkosť a veľkosť
* !~ a !~* sú nesúlady citlivé na veľkosť písmen a necitlivé na veľkosť písmen
Dva. Súbor a adresár sa zhodujú, kde:
* -f a !-f sa používajú na určenie, či súbor existuje
* -d a !-d sa používajú na určenie, či adresár existuje
* -e a !-e sa používajú na určenie, či súbor alebo adresár existuje
* -x a !-x sa používajú na určenie, či je súbor spustiteľný alebo nie
3. Posledným parametrom inštrukcie prepísania je značka vlajky, ktorá je označená:
1.last je ekvivalentný znaku [L] v apache, čo znamená prepísanie.
2. Prestávka Po dokončení párovania tohto pravidla sa párovanie ukončí a nasledujúce pravidlá už nebudú párované.
3.redirect vráti dočasné presmerovanie 302 a adresa prehliadača zobrazí URL adresu po skoku.
4. trvalý návrat 301 trvalé presmerovanie, adresa prehliadača zobrazí URL adresu po skoku.


Použite last and break na implementáciu prepisovania URI a adresný riadok prehliadača zostáva nezmenený. A medzi nimi je malý rozdiel, používanie príkazu alias musí byť označené ako posledné; Pri používaní proxy_pass direktív musíte použiť značku break. Po vykonaní posledného tagu v tomto pravidle prepisu bude na serveri{......} Tag znovu iniciuje požiadavku, zatiaľ čo break tag ukončí zápas po dokončení pravidlového zápasu.
Napríklad: ak presmerujeme URL ako /photo/123456 na /path/to/photo/12/1234/123456.png
prepísať "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;


Štyri. Pravidlo NginxRewrite


1. príkaz break
Prostredie používania: server, lokalita, ak;
Smernica dopĺňa aktuálnu sadu pravidiel a už nerieši direktívu prepísania.


2. Ak je direktívna
Prostredie používania: server, lokalita
Táto inštrukcia sa používa na overenie, či je podmienka splnená, a ak áno, na vykonanie príkazu vo vnútri zátvoriek. Príkaz If nepodporuje vnorovanie a nepodporuje viacero podmienok && a || Liečba.


3. Príkaz na návrat
syntax: returncode ;
Prostredie používania: server, lokalita, ak;
Táto inštrukcia sa používa na ukončenie vykonávania pravidla a vrátenie stavového kódu klientovi.
Príklad: Ak navštívená URL končí na ".sh" alebo ".bash", vráti sa stavový kód 403
Poloha ~ .*\. (š|buch)?$
{
return 403;
}


4. Príkaz na prepísanie
Syntax: vlajka náhrady rewriteregexu
Prostredie používania: server, lokalita, ak
Táto smernica presmeruje URI na základe výrazu alebo upravuje reťazec. Inštrukcie sa vykonávajú v poradí v konfiguračnom súbore. Upozorňujeme, že prepísanie výrazov platí iba pre relatívne cesty. Ak chcete párovať hostname, mali by ste použiť if príkazy, napríklad nižšie:
if( $host ~* www\.(. *) )
{
Set $host_without_www $1;
prepis ^(.*)$ http://$host_without_www$1permanent;
}


5. Príkaz Set
Syntax: setvariable value; Predvolené: žiadne; Prostredie používania: server, lokalita, ak;
Táto smernica sa používa na definovanie premennej a priradenie jej hodnoty. Hodnota premennej môže byť text, premenná alebo zjednotenie textových premenných.
Príklad: set$varname "hello world";


6.Uninitialized_variable_warn pokyny
Syntax: uninitialized_variable_warnon|off
Prostredie používania: http, server, lokalita, ak
Tento príkaz sa používa na zapnutie a vypnutie varovnej správy pre neinicializované premenné a predvolená hodnota je Zapnuté.




Päť. Príklad písania pravidiel Nginx Rewrite
1. Keď pristupovaný súbor a adresár neexistujú, presmerujte na určitý php súbor
if( !-e $request_filename )
{
prepísať ^/(.*)$ index.php na konci;
}


2. Výmena adresárov /123456/xxxx ====> /xxxx?id=123456
prepísať ^/(\d+)/(.+)/ /$2?id=$1 posledný;


3. Ak klient používa prehliadač IE, presmeruje ho do adresára /ie
if( $http_user_agent ~ MSIE)
{
prepis ^(.*)$ /ie/$1 prestávka;
}


4. Zakázať prístup k viacerým adresárom
Lokalita ~ ^/(cron|templates)/
{
popierať všetko;
prestávka;
}


5. Zakázať prístup k súborom začínajúcim na /data
Poloha ~ ^/Data
{
popierať všetko;
}


6. Zakázať prístup k súborom s príponami .sh, .flv .mp3
Poloha ~ .*\. (sh|flv|mp3)$
{
return 403;
}


7. Nastavte čas cache prehliadača pre určité typy súborov
Poloha ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
vyprší 30d;
}
Poloha ~ .*\. (js|css)$
{
vyprší 1 hodina;
}


8. Nastaviť časy expirácie pre favicon.ico a robots.txt;
Tu je favicon.ico 99 dní, robots.txt 7 dní a záznam chýb 404 nie je zaznamenaný
Lokalita ~(favicon.ico) {
log_not_found odíď;
expiruje 99d;
prestávka;
}
Poloha ~(robots.txt) {
log_not_found odíď;
vyprší 7d;
prestávka;
}


9. Stanoviť dobu platnosti určitého dokumentu; Je to 600 sekúnd a prístupové záznamy sa nezaznamenávajú
location ^~ /html/scripts/loadhead_1.js {
access_log preč;
root /opt/lampp/htdocs/web;
expiruje 600;
prestávka;
}


10. Anti-hotlink súbory a nastavenie časov expirácie
Return412 tu je vlastný HTTP stavový kód, ktorý je predvolene nastavený na 403, čo je pohodlné na nájdenie správneho hotlink požiadavky
"prepis ^/; "Zobrazuje obrázok anti-hotlinku
"access_log choď;" Nie sú zaznamenávané žiadne prístupové záznamy, čo znižuje stres
"Expiruje 3D" 3 dni cache prehliadača pre všetky súbory


Poloha ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers žiadne zablokované *.xx.com*.xx.net localhost 208.97.167.194;
ak ($invalid_referer) {
Prepis ^/;
return 412;
prestávka;
}
access_log preč;
root /opt/lampp/htdocs/web;
vyprší 3d;
prestávka;
}


11. Povoľte pevný IP prístup na webovú stránku len s heslom


root /opt/htdocs/www;
povoliť 208.97.167.194;
povoliť 222.33.1.2;
povoliť 231.152.49.4;
popierať všetko;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Konvertujte súbory z viacúrovňových adresárov do jedného súboru na zvýšenie SEO efektov
/job-123-456-789.html 指向/job/123/456/789.html


prepísať^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html posledný;


13. Presmerovanie, keď súbory a adresáre neexistujú:


if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}


14. Nasmerujte priečinok v koreňovom adresári na adresár úrovne 2
Napríklad /shanghaijob/ ukazuje na /area/shanghai/
Ak zmeníte posledné na trvalé, adresný riadok prehliadača bude /location/shanghai/
prepísať ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Problém s vyššie uvedeným príkladom je, že sa nezhoduje pri prístupe k /shanghai
prepísať ^/([0-9A-Z]+)job$ /area/$1/ na posledný;
prepísať ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Týmto spôsobom/Shanghai je tiež prístupný, ale relevantné odkazy na stránke nie sú dostupné,
Ak je ./list_1.html skutočná adresa /area/shanghia/list_1.html sa zmení na /list_1.html, čím sa stane neprístupnou.
Potom nemôžem pridať automatické skákanie
(-d $request_filename) má podmienku, že to musí byť skutočný adresár, a moje prepísanie nie je, takže to nemá žiadny vplyv
if (-d $request_filename){
prepísať ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
Je to jednoduché, keď už poznáš dôvod, nechaj ma skočiť manuálne
prepísať ^/([0-9a-z]+)job$ /$1job/permanent;
prepísať ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. Preskakovanie doménových mien
Server
{
počúvať 80;
server_name jump.linuxidc.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs/www;
prepis ^/ http://www.xx.com/;
access_log preč;
}


16. Viacdoménové otáčanie
server_name www.xx.comwww.xx.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ "linuxidc\.net") {
prepísať ^(.*) http://www.xx.com$1permanent;
}


6. Nginx globálne premenné
arg_PARAMETER #这个变量包含GET请求中, ak existuje premenná PARAMETER.
args #这个变量等于请求行中 parametre (GET request), napr. foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Tieto údaje sú presné aj v prípade prerušenia spojenia.
content_length #请求头中的Content-dĺžkové ihrisko.
content_type #请求头中的Content-typ odboru.
cookie_COOKIE #cookie hodnotu premennej COOKIE
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
hostiteľ #请求主机头字段, inak názov servera.
Hostname #Set na hostiteľské meno stroja, ako ho vráti gethostname
http_HEADER
is_args #如果有args参数 táto premenná je rovná "?", inak je rovná "", nulová hodnota.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, zvyčajne GET alebo POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Používateľské meno overené modulom Basic.
request_completion #如果请求结束, nastav to na OK. Vyprázdniť, keď požiadavka nie je dokončená alebo ak požiadavka nie je posledná v reťazci požiadaviek.
request_method #GET或POST
request_filename #当前请求的文件路径, generované koreňovými alebo aliasovými smernicami a URI požiadavkami.
request_uri #包含请求参数的原始URI neobsahuje názov hostiteľa, napríklad "/foo/bar.php?arg=baz". Nedá sa upraviť.
Schéma #HTTP方法 (napr. HTTP, https).
server_protocol #请求使用的协议, zvyčajne HTTP/1.0 alebo HTTP/1.1.
server_addr #服务器地址 túto hodnotu možno určiť po dokončení systémového volania.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Sedem. Korešpondencia medzi pravidlami Apache a Nginx
Apacheov RewriteCond zodpovedá Nginxovmu, ak
Apache's RewriteRule zodpovedá Nginxovmu prepísaniu
Apacheho [R] zodpovedá Nginxovmu presmerovaniu
[P] v jazyku Apache zodpovedá poslednému v jazyku Nginx
Apacheho [R,L] zodpovedá Nginxovmu presmerovaniu
Apacheho [P,L] zodpovedá poslednému Nginxu
Apacheho [PT,L] zodpovedá poslednému Nginxu


Napríklad povoliť prístup k tejto stránke špecifikovanej doméne a vždy sa obrátiť na www.xx.com iné domény
  Apache:
RewriteCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC]
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $
RewriteRule ^/(.*)$ http://www.xx.com[R,L]


  Nginx:
if( $host ~* ^(.*)\.aaa\.com$ )
{
nastavený $allowHost '1';
}
if( $host ~* ^localhost )
{
nastavený $allowHost '1';
}
if( $host ~* ^192\.168\.1\.(. *?) $ )
{
nastavený $allowHost '1';
}
if( $allowHost !~ '1' )
{
prepísať ^/(.*)$ http://www.xx.comredirect ;
}





Predchádzajúci:Sina Weibo naskenuje kód a zaplatí 1 cent za získanie ročnej prémie až do roku 2015 jüanov
Budúci:CMD5 prelamuje heslo systémového administrátora Windows
Zverejnené 7. 12. 2014 17:25:05 |
Čítať a prispievať späť je cnosť
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com