Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 11719|Válasz: 1

[Web] Egy példa szemlélteti a Nginx újraírási szabályát

[Linket másol]
Közzétéve 2014. 12. 05. 22:45:25 | | |
Egy. Regularkifejezés egyezés, ahol:
* ~ kis- és nagybetűérzékeny egyeztetés
* ~* egy eset-érzékeny egyezés
a * !~ és !~* ön-kisítésérzékeny és ön-visszajelzésű eltérések
Kettő. fájl és könyvtár egyeznek, ahol:
* -f és !-f arra használják, hogy megállapítsák, létezik-e fájl
* -d és !-d alapján meghatározzák, létezik-e könyvtár
* -e és !-e jeleket használnak annak meghatározására, hogy létezik-e fájl vagy könyvtár
* -x és !-x alapján meghatározzák, hogy egy fájl végrehajtható-e vagy sem
3. Az újraírási utasítás utolsó paramétere a zászlójelzés, amelyet a következőképpen jelölnek:
Az 1.utolsó az apache [L] jelének felel meg, ami átírást jelent.
2. Megszakítás A szabály egyeztetése után a párosítás megszűnik, és a következő szabályok már nem lesznek összeegyeztetve.
A 3.redirect 302 ideiglenes átirányítást ad vissza, és a böngésző címe az ugrás után megjeleníti az URL-címet.
4.Permanent return 301 állandó átirányítás, a böngésző címe az ugrás után megjeleníti az URL-címet.


Használd az utolsó és a szünet gombot az URI átírások megvalósításához, és a böngésző címsora változatlan marad. És van egy kis különbség a kettő között: az álnév parancs használatával utolsóként kell jelölni; Ha proxy_pass utasításokat használsz, a break címkét kell használnod. Miután az utolsó tag elindult ebben az átírási szabályban, az a szerveren{......} lesz a tag újraindítja a kérést, míg a break tag megszakítja a mérkőzést, miután a szabály egyeztetése befejeződött.
Például: ha egy /photo/123456 URL-t irányítunk át /path/to/photo/12/1234/123456.png
írd át "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;


Négy. NginxRewrite szabály


1.Break parancs
Használati környezet: szerver, helyszín, ha;
Az irányelv kiegészíti a jelenlegi szabálykészletet, és már nem kezeli az újraírási utasítást.


2. Ha utasítás
Használati környezet: szerver, hely
Ezt az utasítást arra használják, hogy ellenőrizzék, teljesül-e egy feltétel, és ha igen, akkor végrehajtsák a kijelentést a göndör fogszabályzókban. Az If parancs nem támogatja a fészkelést, és nem támogatja több feltételt && és || Kezelés.


3. Visszaküld parancsot
szintaxis: returncode ;
Használati környezet: szerver, helyszín, ha;
Ezt az utasítást arra használják, hogy lefejezzük a szabály végrehajtását, és visszaküldjük az ügyfélnek az állapotkódot.
Példa: Ha a meglátogatott URL ".sh" vagy ".bash" jelzéssel végződik, akkor egy 403 státuszkódot adnak vissza
helyszín ~ .*\. (sh|bash)?$
{
vissza 403;
}


4. Írd át a parancsot
Szintaxis: rewriteregex helyettesítő zászló
Használati környezet: szerver, helyszín, ha
Ez az utasítás az URI-t az kifejezés alapján irányítja, vagy módosítja a karakterláncot. Az utasítások a konfigurációs fájl sorrendjében hajtják végre. Fontos megjegyezni, hogy az újraírás csak relatív utakra érvényes. Ha hosztneveket szeretnél párosítani, használj if utasításokat, például az alábbiakban:
ha( $host ~* www\.(. *) )
{
$host_without_www $1;
újraírni ^(.*)$ http://$host_without_www$1permanent;
}


5.Parancs beállítása
Szintaxis: setváltozó érték; Alapértelmezés: nincs; Használati környezet: szerver, helyszín, ha;
Ezt az utasítást használják egy változó definiálására és annak értékek hozzárendelésére. Egy változó értéke lehet szöveg, változó vagy szövegváltozók uniója.
Példa: set$varname "hello world";


6.Uninitialized_variable_warn utasítások
Szintaxis: uninitialized_variable_warnon|off
Használati környezet: http, szerver, helyszín, ha
Ezt a parancsot használják a figyelmeztető üzenet be- és kikapcsolására incializálatlan változók esetén, és az alapértelmezett érték On.




Öt. Nginx Rewrite szabályírás példa
1. Ha a hozzáfért fájl és könyvtár nem létezik, irányítsunk át egy bizonyos php fájlra
if( !-e $request_filename )
{
újraírni ^/(.*)$ index.php utoljára;
}


2. Könyvtárcsere /123456/xxxx ====> /xxxx?id=123456
újraírni ^/(\d+)/(.+)/ /$2?id=$1 utoljára;


3. Ha az ügyfél IE böngészőt használ, az átirányítja a /ie könyvtárra
if( $http_user_agent ~ MSIE)
{
újraírni ^(.*)$ /ie/$1 megszakítás;
}


4. Több könyvtárhoz való hozzáférés letiltása
helyszín ~ ^/(cron|sablonok)/
{
tagadni mindent;
szünet;
}


5. Tiltsd le a /data betűvel kezdődő fájlok hozzáférését
helyszín ~ ^/data
{
tagadni mindent;
}


6. Tiltsa meg a fájl hozzáadását, amelyeknek fájl tagtagnevei .sh, .flv, .mp3
helyszín ~ .*\. (sh|flv|mp3)$
{
vissza 403;
}


7. Állítsd be a böngésző gyorsítótár idejét bizonyos fájltípusokhoz
helyszín ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
30 pennyi lejárat;
}
helyszín ~ .*\. (js|css)$
{
1 óra lejár;
}


8. Határozzuk meg a lejárati időket favicon.ico és robots.txt számára;
Itt a favicon.ico 99 nap, a robots.txt 7 nap, és a 404-es hibanapló nem van rögzítve
hely ~(favicon.ico) {
log_not_found el;
99d lejár;
szünet;
}
helyszín ~(robots.txt) {
log_not_found el;
7d lejárat;
szünet;
}


9. Határozd meg egy adott dokumentum lejárati idejét; Ez 600 másodperc, és a hozzáférési naplók nem kerülnek rögzítésre
hely ^~ /html/scripts/loadhead_1.js {
access_log el;
gyökér /opt/lampp/htdocs/web;
600 lejárati ideje;
szünet;
}


10. Anti-hotlink fájlok és beállított lejárati idők
A Return412 egy egyedi HTTP státuszkód, amely alapértelmezett 403-at használ, ami kényelmes a megfelelő hotlink kérés megtalálásához
"Írd át ^/; "Egy anti-hotlink képét mutatja
"access_log el;" Nem rögzítenek hozzáférési naplókat, ami csökkenti a stresszt
"Lejár a 3D" 3 nap böngészőgyorsítótár minden fájlhoz


helyszín ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers nem blokkolva *.xx.com*.xx.net localhost 208.97.167.194;
if ($invalid_referer) {
Újraírás ^/;
visszatérés 412;
szünet;
}
access_log el;
gyökér /opt/lampp/htdocs/web;
3D-s lejár;
szünet;
}


11. Csak jelszóval engedélyezett fix IP-hozzáférést engedélyez a weboldalra


root /opt/htdocs/www;
engedélyezze a 208.97.167.194;
engedélyezze a 222.33.1.2;
engedélyezze a 231.152.49.4;
tagadni mindent;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Többszintű könyvtárakban lévő fájlokat egy fájlba alakítani a SEO hatások javítása érdekében
/job-123-456-789.html 指向/job/123/456/789.html


rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html utolsó;


13. Átirányítás, ha fájlok és könyvtárak nem léteznek:


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


14. Irányíts egy mappát a gyökérkönyvtárban a 2. szintű könyvtárra
Például a /shanghaijob/ a /area/shanghai/ jelzésre mutat
Ha utoljára állandóra váltasz, akkor a böngésző címsora /location/shanghai/ lesz
újraírni ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
A fenti példával az a probléma, hogy nem egyezik meg /shanghai hozzáféréskor
újraírni ^/([0-9a-z]+)job$ /area/$1/ utoljára;
újraírni ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Ez a mód/Sanghaj is elérhető, de az oldalon lévő relatív linkek nem elérhetők,
Ha ./list_1.html valódi cím /area/shanghia/list_1.html lesz /list_1.html, így elérhetetlenné válik.
Akkor nem tudok automatikus ugrást hozzáadni
(-d $request_filename) feltétele van, hogy valós könyvtárnak kell lennie, és az én átírásom nem az, így nincs hatása
if (-d $request_filename){
újraírni ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
Egyszerű, ha tudod az okot, hadd ugorjak kézzel
újraírni ^/([0-9a-z]+)job$ /$1job/permanent;
újraírni ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. Domain névugrás
szerver
{
Hallgasd 80;
server_name jump.linuxidc.com;
index index.html index.htm index.php;
gyökér /opt/lampp/htdocs/www;
újraírni ^/ http://www.xx.com/;
access_log el;
}


16. Többtartományos forgatás
server_name www.xx.comwww.xx.com;
index index.html index.htm index.php;
gyökér /opt/lampp/htdocs;
if ($host ~ "linuxidc\.net") {
újraírás ^(.*) http://www.xx.com$1permanent;
}


6. nginx globális változók
arg_PARAMETER #这个变量包含GET请求中, ha van változó PARAMÉTER.
args #这个变量等于请求行中 (GET kérés) paraméterek, pl. foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Ez az adat akkor is pontos, ha a kapcsolat megszakad.
content_length #请求头中的Content hosszúságú mező.
content_type #请求头中的Content típusú mező.
cookie_COOKIE #cookie a COOKIE változó értékét
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
A #请求主机头字段 a szerver neve.
a hostname #Set a gép hostneve, amelyet gethostname adott vissza
http_HEADER
is_args #如果有args参数 ez a változó egyenlő a "?"-vel, egyébként ""-vel, ami nullérték.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, általában GET vagy POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Felhasználónevet az Alap modul validálja.
request_completion #如果请求结束, állítsd OK-ra. Üres, ha a kérés nincs befejezve, vagy ha nem az utolsó a kérésláncban.
request_method #GET或POST
request_filename #当前请求的文件路径, amelyeket root vagy alias utasítások, valamint URI kérések generálnak.
request_uri #包含请求参数的原始URI nem tartalmazza a hosztnevet, például "/foo/bar.php?arg=baz". nem módosítható.
séma #HTTP方法 (pl. http, https).
server_protocol #请求使用的协议, általában HTTP/1.0 vagy HTTP/1.1.
server_addr #服务器地址 ez az érték a rendszerhívás befejezése után meghatározható.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Hét. Az Apache és a Nginx szabályok közötti levelezés
Apache RewriteCondja megfelel Nginx ha
Az Apache RewriteRule megfelel Nginx átírásának
Apache [R] a Nginx átirányításának felel meg
[P] apacsban a Nginx utolsó részének felel meg
Apache [R,L] a Nginx átirányításának felel meg
Apache [P,L] a Nginx utolsó példányának felel meg
Apache [PT,L] a Nginx utolsó testének felel meg


Például engedélyezzük egy meghatározott domainnév hozzáférését erre az oldalra, és mindig www.xx.com más domainnevekhez forduljunk
  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$ )
{
$allowHost '1';
}
if( $host ~* ^localhost )
{
$allowHost '1';
}
if( $host ~* ^192\.168\.1\.(. *?) $ )
{
$allowHost '1';
}
ha( $allowHost !~ '1' )
{
újraírni ^/(.*)$ http://www.xx.comredirect ;
}





Előző:A Sina Weibo szkennelje a kódot, hogy 1 centet fizessen az év végi bónuszért 2015 jüánig
Következő:A CMD5 feltöri a Windows rendszergazda jelszavát
Közzétéve 2014. 12. 07. 17:25:05 |
Az olvasás és visszaposztolás erény
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com