Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 11719|Svar: 1

[Web] Ett exempel illustrerar omskrivningsregeln i Nginx

[Kopiera länk]
Publicerad på 2014-12-05 22:45:25 | | |
Ett. Reguljär uttrycksmatchning, där:
* ~ är kasuskänslig matchning
* ~* är en enkelfallskänslig matchning
* !~ och !~* är mellanlägeskänsliga respektive kasus-känsliga mismatcher
Två. fil- och katalogmatchar, där:
* -f och !-f används för att avgöra om en fil finns
* -d och !-d används för att avgöra om en katalog existerar
* -e och !-e används för att avgöra om en fil eller katalog existerar
* -x och !-x används för att avgöra om en fil är körbar eller inte
3. Den sista parametern i omskrivningsinstruktionen är flaggmarkeringen, som är markerad med:
1.last är ekvivalent med [L]-märket i Apache, vilket betyder omskrivning.
2. Brytning Efter att matchningen av denna regel är klar avslutas matchningen och de efterföljande reglerna kommer inte längre att matchas.
3.redirect returnerar 302 temporär omdirigering, och webbläsaradressen visar URL-adressen efter hoppet.
4.permanent return 301 permanent omdirigering, webbläsaradressen visar URL-adressen efter hoppet.


Använd last och break för att implementera URI-omskrivningar, och webbläsarens adressfält förblir oförändrat. Och det finns en liten skillnad mellan de två, att använda aliaskommandot måste markeras med sist; När du använder proxy_pass direktiv måste du använda breaktaggen. Efter att den sista taggen har körts i denna omskrivningsregel kommer den att finnas på server{......} taggen initierar förfrågan igen, medan break-taggen avslutar matchen efter att regelmatchen är klar.
Till exempel: om vi omdirigerar en URL som /photo/123456 till /path/to/photo/12/1234/123456.png
skriv om "/foto/([0-9]{2})([0-9]{2})([0-9]{2})"/väg/till/foto/$1/$1$2/$1$2$3.png ;


Fyra. NginxOmskrivningsregel


1. bryt kommandot
Användningsmiljö: server, plats, om;
Direktivet fullbordar det aktuella regelverket och hanterar inte längre omskrivningsdirektivet.


2. Om direktiv
Användningsmiljö: server, plats
Denna instruktion används för att kontrollera om ett villkor är uppfyllt, och i så fall exekvere satsen inuti de krumliga klamrarna. If-kommandot stöder inte nesting, och stöder inte flera villkor && och || Behandling.


3. återvänd kommando
syntax: returncode ;
Användningsmiljö: server, plats, om;
Denna instruktion används för att avsluta exekveringen av regeln och returnera en statuskod till klienten.
Exempel: Om den besökta URL:en slutar på ".sh" eller ".bash" returneras en 403-statuskod
plats ~ .*\. (sh|bash)?$
{
retur 403;
}


4. omskriv kommandot
Syntax: rewriteregex ersättningsflagga
Användningsmiljö: server, plats, om
Denna direktiv omdirigerar URI:n baserat på uttrycket, eller modifierar strängen. Instruktionerna körs i den ordning som finns i konfigurationsfilen. Observera att omskrivning av uttryck endast gäller för relativa vägar. Om du vill para värdnamn bör du använda if-satser, till exempel nedan:
om( $host ~* www\.(. *) )
{
Sätt $host_without_www $1;
omskriv ^(.*)$ http://$host_without_www$1permanent;
}


5. Sätt kommando
Syntax: mängdvariabelvärde; Standard: inga; Användningsmiljö: server, plats, om;
Denna direktiv används för att definiera en variabel och tilldela ett värde till den. Värdet på en variabel kan vara text, variabel eller union av textvariabler.
Exempel: set$varname "hello world";


6.Uninitialized_variable_warn instruktioner
Syntax: uninitialized_variable_warnon|off
Användningsmiljö: http, server, plats, om
Detta kommando används för att slå på och av varningsmeddelandet för oinitierade variabler, och standardvärdet är På.




Fem. Nginx Rewrite regelskrivningsexempel
1. När den åtkomstfilen och katalogen inte finns, omdirigera till en viss php-fil
if( !-e $request_filnamn )
{
omskriv ^/(.*)$ index.php sist;
}


2. Katalogbyte /123456/xxxx ====> /xxxx?id=123456
omskriv ^/(\d+)/(.+)/ /$2?id=$1 sist;


3. Om klienten använder IE-webbläsaren omdirigerar den till /ie-katalogen
if( $http_user_agent ~ MSIE)
{
omskrivning ^(.*)$ /ie/$1 break;
}


4. Inaktivera åtkomst till flera kataloger
plats ~ ^/(cron|mallar)/
{
förneka allt;
paus;
}


5. Inaktivera åtkomst till filer som börjar med /data
Plats ~ ^/data
{
förneka allt;
}


6. Förbjud åtkomst till filer med filsuffixnamn .sh, .flv, .mp3
plats ~ .*\. (sh|flv|mp3)$
{
retur 403;
}


7. Ställ in webbläsarens cachetid för vissa typer av filer
plats ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
går ut med 30 pence;
}
plats ~ .*\. (js|css)$
{
går ut 1 timme;
}


8. Sätt utgångstider för favicon.ico och robots.txt;
Här är favicon.ico 99 dagar, och robots.txt 7 dagar, och 404-felloggen loggas inte
plats ~(favicon.ico) {
log_not_found av;
går ut 99d;
paus;
}
plats ~(robots.txt) {
log_not_found av;
går ut 7d;
paus;
}


9. Fastställ utgångstiden för ett visst dokument; Detta är 600 sekunder, och åtkomstloggar registreras inte
plats ^~ /html/scripts/loadhead_1.js {
access_log av;
root /opt/lampp/htdocs/web;
går ut 600;
paus;
}


10. Anti-hotlink-filer och inställda utgångstider
Return412 här är en anpassad HTTP-statuskod, som som standard är 403, vilket är bekvämt för att hitta rätt hotlink-förfrågan
"omskrivning ^/; "Visar en bild på en anti-hotlink
"access_log av;" Inga åtkomstloggar registreras, vilket minskar stressen
"Expiry 3D" 3 dagars webbläsarcache för alla filer


plats ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers ingen blockerade *.xx.com*.xx.net localhost 208.97.167.194;
om ($invalid_referer) {
Omskriv ^/;
Tillbakagång 412;
paus;
}
access_log av;
root /opt/lampp/htdocs/web;
går ut 3D;
paus;
}


11. Tillåt endast fast IP-åtkomst till webbplatsen med ett lösenord


root /opt/htdocs/www;
allow 208.97.167.194;
allow 222.33.1.2;
tillåt 231.152.49.4;
förneka allt;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Konvertera filer i flernivåkataloger till en fil för att förbättra SEO-effekter
/job-123-456-789.html 指向/job/123/456/789.html


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


13. Omdirigera när filer och kataloger inte finns:


om (!-e $request_filnamn) {
proxy_pass http://127.0.0.1;
}


14. Peka en mapp i rotkatalogen till nivå 2-katalogen
Till exempel pekar /shanghaijob/ på /area/shanghai/
Om du ändrar last till permanent kommer webbläsarens adressfält att vara /location/shanghai/
omskriv ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;
Problemet med exemplet ovan är att det inte kommer att stämma när man går åt /shanghai
skriv om ^/([0-9A-Z]+)jobb$/område/$1/ sist;
omskriv ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;
På detta sätt är Shanghai också tillgängligt, men de relaterade länkarna på sidan är inte tillgängliga,
Om ./list_1.html riktiga adress är /area/shanghia/list_1.html blir det /list_1.html, vilket gör det otillgängligt.
Då kan jag inte lägga till automatiskt hoppande
(-d $request_filnamn) har villkoret att det måste vara en riktig katalog, och min omskrivning är det inte, så det har ingen effekt
om (-d $request_filnamn){
omskriv ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
Det är lätt att göra efter att ha fått veta orsaken, låt mig hoppa manuellt
omskriv ^/([0-9A-Z]+)Job$ /$1Job/permanent;
omskriv ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;


15. Domännamnshopp
server
{
lyssna 80;
server_name jump.linuxidc.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs/www;
omskrivning ^/ http://www.xx.com/;
access_log av;
}


16. Multidomän-växling
server_name www.xx.comwww.xx.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs;
If ($host ~ "linuxidc\.net") {
omskriv ^(.*) http://www.xx.com$1permanent;
}


6. nginx globala variabler
arg_PARAMETER #这个变量包含GET请求中, om det finns en variabel PARAMETER.
args #这个变量等于请求行中 (GET-förfrågan) parametrar, t.ex. foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Denna data är korrekt även om anslutningen avbryts.
content_length #请求头中的Content längds fält.
content_type #请求头中的Content-typ fält.
cookie_COOKIE #cookie värdet på COOKIE-variabeln
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
värd #请求主机头字段, annars servernamnet.
Värdnamn #Set till maskinens värdnamn som returneras av gethostname
http_HEADER
is_args #如果有args参数 är denna variabel lika med "?", annars lika med "", nollvärde.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, oftast FÅ eller POSTA.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Användarnamn validerat av Basic Module.
request_completion #如果请求结束, ställ in den på OK. Töm när förfrågan inte är klar eller om förfrågan inte är den sista i förfrågningskedjan.
request_method #GET或POST
request_filename #当前请求的文件路径, genererat av root- eller aliasdirektiv och URI-förfrågningar.
request_uri #包含请求参数的原始URI innehåller den inte värdnamnet, t.ex. "/foo/bar.php?arg=baz". Kan inte ändras.
schema #HTTP方法 (t.ex. http, https).
server_protocol #请求使用的协议, vanligtvis HTTP/1.0 eller HTTP/1.1.
server_addr #服务器地址 kan detta värde bestämmas efter att ett systemanrop har slutförts.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Sju. Korrespondens mellan Apache- och Nginx-regler
Apaches omskrivningsCond motsvarar Nginx om
Apaches omskrivningsregel motsvarar Nginx omskrivning
Apaches [R] motsvarar Nginx omdirigering
[P] i Apache motsvarar det sista i Nginx
Apaches [R,L] motsvarar Nginx omdirigering
Apaches [P,L] motsvarar Nginx sista
Apaches [PT,L] motsvarar Nginx sista


Till exempel, låt ett angivet domännamn komma åt denna sida och vänd dig alltid till www.xx.com andra domännamn
  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:
om( $host ~* ^(.*)\.aaa\.com$ )
{
satte $allowHost '1';
}
if( $host ~* ^localhost )
{
satte $allowHost '1';
}
om( $host ~* ^192\.168\.1\.(. *?) $ )
{
satte $allowHost '1';
}
om( $allowHost !~ '1' )
{
omskriv ^/(.*)$ http://www.xx.comredirect ;
}





Föregående:Sina Weibo skanna koden för att betala 1 cent för att få årsslutsbonusen upp till 2015 yuan
Nästa:CMD5 knäcker Windows systemadministratörslösenord
Publicerad på 2014-12-07 17:25:05 |
Att läsa och posta tillbaka är en dygd
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com