Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 11719|Odpověď: 1

[Web] Příklad ilustruje pravidlo přepisu v Nginx

[Kopírovat odkaz]
Zveřejněno 05.12.2014 22:45:25 | | |
Jedna. Regulární výrazová shoda, kde:
* ~ je párování citlivé na velikost písmen
* ~* je shoda bez ohledu na velikost a velikost
* !~ a !~* jsou nesoulady citlivé na velká písmena a necitlivá na velikost
Dva. shoda souboru a adresáře, kde:
* -f a !-f se používají k určení, zda soubor existuje
* -d a !-d se používají k určení, zda adresář existuje
* -e a !-e se používají k určení, zda soubor nebo adresář existuje
* -x a !-x se používají k určení, zda je soubor spustitelný či ne
3. Posledním parametrem instrukce přepisování je značka příznaku, která je označena:
1.last je ekvivalentní značce [L] v apache, což znamená přepsání.
2. Přerušení Po dokončení párování tohoto pravidla bude párování ukončeno a následující pravidla již nebudou párována.
3.redirect vrátí dočasné přesměrování 302 a adresa prohlížeče zobrazí URL adresu po skoku.
4. trvalé přesměrování 301 trvalé přesměrování, adresa prohlížeče zobrazí URL adresu po skoku.


Použijte last and break pro přepisování URI a adresní lišta prohlížeče zůstává beze změny. A mezi nimi je malý rozdíl, použití příkazu alias musí být označeno jako poslední; Při používání proxy_pass direktiv musíte použít tag break. Po provedení posledního tagu v tomto pravidle přepisu bude na serveru{......} Tag znovu iniciuje požadavek, zatímco break tag ukončí zápas po dokončení pravidlového zápasu.
Například: pokud přesměrujeme URL jako /photo/123456 na /path/to/photo/12/1234/123456.png
přepsat "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/cesta/k/foto/$1/$1$2/$1$2$3.png ;


Čtyři. Pravidlo NginxRewrite


1. příkaz break
Prostředí použití: server, lokalita, jestli;
Direktiva doplňuje současný soubor pravidel a již nezpracovává direktivu přepisování.


2. Pokud je direktiva
Prostředí použití: server, lokalita
Tato instrukce slouží ke kontrole, zda je splněna podmínka, a pokud ano, k vykonání příkazu uvnitř závorek. Příkaz If nepodporuje vnořování a nepodporuje více podmínek & a || Léčba.


3. Příkaz k návratu
syntaxe: returncode ;
Prostředí použití: server, lokalita, jestli;
Tato instrukce se používá k ukončení vykonávání pravidla a vrácení stavového kódu klientovi.
Příklad: Pokud navštívená URL končí na ".sh" nebo ".bash", vrátí se stavový kód 403
Poloha ~ .*\. (š|prásk)?$
{
return 403;
}


4. Příkaz přepisovat
Syntaxe: příznak náhrady rewriteegexu
Prostředí použití: server, lokalita, pokud
Tato směrnice přesměruje URI na základě výrazu nebo upravuje řetězec. Instrukce se provádějí v pořadí v konfiguračním souboru. Všimněte si, že přepis výrazů platí pouze pro relativní cesty. Pokud chcete párovat hostitelská jména, měli byste použít if příkazy, například níže:
if( $host ~* www\.(. *) )
{
Set $host_bez_www $1;
přepsat ^(.*)$ http://$host_without_www$1permanent;
}


5. Příkaz Set
Syntaxe: setvariable value; Výchozí: žádné; Prostředí použití: server, lokalita, jestli;
Tato směrnice se používá k definování proměnné a přiřazení její hodnoty. Hodnota proměnné může být text, proměnná nebo sjednocení textových proměnných.
Příklad: set$varname "hello world";


6.Uninitialized_variable_warn instrukce
Syntaxe: uninitialized_variable_warnon|off
Prostředí použití: http, server, lokalita, pokud
Tento příkaz slouží k zapnutí a vypnutí varovné zprávy pro neinicializované proměnné a výchozí hodnota je Zapnuto.




Pět. Příklad psaní pravidel Nginx Rewrite
1. Když přístupný soubor a adresář neexistují, přesměrujte na určitý php soubor
if( !-e $request_filename )
{
přepsat ^/(.*)$ index.php na konec;
}


2. Výměna adresářů /123456/xxxx ====> /xxxx?id=123456
přepsat ^/(\d+)/(.+)/ /$2?id=$1 poslední;


3. Pokud klient používá prohlížeč IE, přesměruje do adresáře /ie
if( $http_user_agent ~ MSIE)
{
přepis ^(.*)$ /ie/$1 přestávka;
}


4. Zakázat přístup k více adresářům
Location ~ ^/(cron|templates)/
{
popírat vše;
pauza;
}


5. Zakázat přístup k souborům začínajícím na /data
Poloha ~ ^/data
{
popírat vše;
}


6. Zákaz přístupu k souborům s příponami .sh, .flv .mp3
Poloha ~ .*\. (sh|flv|mp3)$
{
return 403;
}


7. Nastavte čas cache prohlížeče pro určité typy souborů
Poloha ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
vyprší 30d;
}
Poloha ~ .*\. (js|css)$
{
vyprší 1 hodina;
}


8. Nastavit doby expirace pro favicon.ico a robots.txt;
Zde je favicon.ico 99 dní, robots.txt 7 dní a záznam chyb 404 není zaznamenán
Poloha ~(favicon.ico) {
log_not_found pryč;
Vyprší 99d;
pauza;
}
Poloha ~(robots.txt) {
log_not_found pryč;
vyprší 7d;
pauza;
}


9. Stanovit dobu platnosti určitého dokumentu; Je to 600 sekund a přístupové záznamy nejsou zaznamenávány
Poloha ^~ /html/scripts/loadhead_1.js {
access_log pryč;
root /opt/lampp/htdocs/web;
vyprší 600;
pauza;
}


10. Anti-hotlink soubory a nastavení časů expirace
Return412 zde je vlastní HTTP stavový kód, který je výchozí na 403, což je pohodlné pro nalezení správného požadavku na hotlink
"přepsat ^/; "Zobrazuje obraz anti-hotlinku
"access_log pryč;" Nejsou zaznamenávány žádné přístupové záznamy, což snižuje stres
"Expiruje 3D" 3 dny cache prohlížeče pro všechny soubory


Poloha ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers žádný blokovaný *.xx.com*.xx.net localhost 208.97.167.194;
if ($invalid_referer) {
přepis ^/;
return 412;
pauza;
}
access_log pryč;
root /opt/lampp/htdocs/web;
vyprší 3d;
pauza;
}


11. Povolit pevný IP přístup pouze na web s heslem


root /opt/htdocs/www;
povolit 208.97.167.194;
povolit 222.33.1.2;
povolit 231.152.49.4;
popírat vše;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Převod souborů z víceúrovňových adresářů do jednoho souboru pro zvýšení SEO efektů
/job-123-456-789.html 指向/job/123/456/789.html


přepisovat ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html na konci;


13. Přesměrování, když soubory a adresáře neexistují:


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


14. Nasměrujte složku v kořenovém adresáři na adresář úrovně 2
Například /shanghaijob/ ukazuje na /area/shanghai/
Pokud změníte last na permanent, pak adresní lišta prohlížeče bude /location/shanghai/
přepsat ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;
Problém s výše uvedeným příkladem je, že se neshoduje při přístupu k /shanghai
přepsat ^/([0-9A-Z]+)job$ /area/$1/ na poslední;
přepsat ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;
Tímto způsobem/Shanghai je také přístupný, ale související odkazy na stránce nejsou dostupné,
Pokud je ./list_1.html skutečná adresa /area/shanghia/list_1.html se změní na /list_1.html, což ji znemožní.
Pak nemůžu přidat automatické skákání
(-d $request_filename) má podmínku, že to musí být skutečný adresář, a moje přepis není, takže nemá žádný efekt
if (-d $request_filename){
přepsat ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
Je to snadné udělat, když znáte důvod, nechte mě skočit ručně
přepsat ^/([0-9A-Z]+)job$ /$1job/permanent;
přepsat ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;


15. Přeskakování doménových jmen
Server
{
Listen 80;
server_name jump.linuxidc.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs/www;
přepis ^/ http://www.xx.com/;
access_log pryč;
}


16. Vícedoménové otáčení
server_name www.xx.comwww.xx.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ "linuxIDC\.net") {
přepis ^(.*) http://www.xx.com$1permanent;
}


6. Nginx globální proměnné
arg_PARAMETER #这个变量包含GET请求中, pokud existuje proměnná PARAMETR.
args #这个变量等于请求行中 parametrů (GET request), např. foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Tato data jsou přesná i v případě, že je spojení přerušeno.
content_length #请求头中的Content délky pole.
content_type #请求头中的Content-typ pole.
cookie_COOKIE #cookie hodnotu proměnné COOKIE
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
hostitelský #请求主机头字段, jinak název serveru.
Hostitelské jméno #Set na název hostitele stroje, jak je vráceno pomocí gethostname
http_HEADER
is_args #如果有args参数 tato proměnná je rovna "?", jinak rovna "", nulová hodnota.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, obvykle GET nebo POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Uživatelské jméno ověřeno modulem Basic.
request_completion #如果请求结束, nastavte to na OK. Vyprázdnit, když požadavek není dokončen nebo pokud požadavek není poslední v řetězci požadavků.
request_method #GET或POST
request_filename #当前请求的文件路径, generované pomocí root nebo alias direktiv a požadavků na URI.
request_uri #包含请求参数的原始URI neobsahuje název hostitele, např. "/foo/bar.php?arg=baz". nelze ji upravit.
Schéma #HTTP方法 (např. HTTP, https).
server_protocol #请求使用的协议, obvykle HTTP/1.0 nebo HTTP/1.1.
server_addr #服务器地址 lze tuto hodnotu určit po dokončení systémového volání.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Sedm. Korespondence mezi pravidly Apache a Nginx
Apacheův RewriteCond odpovídá Nginxovu pokud
Apacheovo RewriteRule odpovídá přepisu Nginxu
Apacheova [R] odpovídá přesměrování Nginxu
[P] v apačštině odpovídá poslednímu v Nginx
Apacheova [R,L] odpovídá Nginxovu přesměrování
Apacheova [P,L] odpovídá Nginxově poslední
Apacheova [PT,L] odpovídá Nginxově poslední


Například povolit přístup k tomuto webu určitému doménovému jménu a vždy se obrátit na www.xx.com další 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$ )
{
nastaveno $allowHost '1';
}
if( $host ~* ^localhost )
{
nastaveno $allowHost '1';
}
if( $host ~* ^192\.168\.1\.(. *?) $ )
{
nastaveno $allowHost '1';
}
if( $allowHost !~ '1' )
{
přepsat ^/(.*)$ http://www.xx.comredirect ;
}





Předchozí:Sina Weibo naskenovat kód a zaplatit 1 cent za získání ročního bonusu až do roku 2015 jüanů
Další:CMD5 prolomuje heslo systémového administrátora Windows
Zveřejněno 07.12.2014 17:25:05 |
Čtení a zpětné přispívání je ctnost
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com