Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 11719|Svare: 1

[Web] Et eksempel illustrerer omskrivingsregelen i Nginx

[Kopier lenke]
Publisert på 05.12.2014 22:45:25 | | |
Én. Regulært uttrykksmatch, hvor:
* ~ er kasusfølsom matching
* ~* er en case-insensitiv match
* !~ og !~* er henholdsvis små og små bokstav-sensitive mismatcher
To. fil- og katalog matcher, hvor:
* -f og !-f brukes for å avgjøre om en fil eksisterer
* -d og !-d brukes for å avgjøre om en katalog eksisterer
* -e og !-e brukes for å avgjøre om en fil eller katalog eksisterer
* -x og !-x brukes for å avgjøre om en fil er kjørbar eller ikke
3. Den siste parameteren i omskrivingsinstruksjonen er flaggmerket, som er merket med:
1.last tilsvarer [L]-merket i Apache, som betyr omskriving.
2. Pause Etter at denne regelen er fullført, avsluttes matchingen og de påfølgende reglene blir ikke lenger matchet.
3.omdirigering returnerer 302 midlertidig omdirigering, og nettleseradressen vil vise URL-adressen etter hoppet.
4.permanent returner 301 permanent omdirigering, nettleseradressen vil vise URL-adressen etter hoppet.


Bruk siste og break for å implementere URI-omskrivinger, og nettleserens adressefelt forblir uendret. Og det er en liten forskjell mellom de to, bruk av alias-kommandoen må markeres med sist; Når du bruker proxy_pass direktiver, må du bruke break-taggen. Etter at den siste taggen er kjørt i denne omskrivingsregelen, vil den være på server{......} tag starter forespørselen på nytt, mens break tag avslutter kampen etter at regel-matchen er fullført.
For eksempel: hvis vi omdirigerer en URL som /photo/123456 til /path/to/photo/12/1234/123456.png
skriv om "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;


Fire. NginxRewrite-regelen


1. bryt kommandoen
Bruksmiljø: server, lokasjon, hvis;
Direktivet fullfører det nåværende regelsettet og håndterer ikke lenger omskrivingsdirektivet.


2. Hvis direktiv
Bruksmiljø: server, lokasjon
Denne instruksjonen brukes til å sjekke om en betingelse er oppfylt, og hvis ja, utføre setningen inne i krølleparentesene. If-kommandoen støtter ikke nesting, og støtter ikke flere betingelser &&& og || Behandling.


3. returner-kommando
syntaks: returnkode ;
Bruksmiljø: server, lokasjon, hvis;
Denne instruksjonen brukes til å avslutte utførelsen av regelen og returnere en statuskode til klienten.
Eksempel: Hvis den besøkte URL-en ender på ".sh" eller ".bash", returneres en 403-statuskode
Sted ~ .*\. (sh|bash)?$
{
retur 403;
}


4. omskrivingskommando
Syntaks: rewriteregex erstatningsflagg
Bruksmiljø: server, lokasjon, hvis
Dette direktivet omdirigerer URI-en basert på uttrykket, eller endrer strengen. Instruksjoner utføres i den rekkefølgen som i konfigurasjonsfilen. Merk at omskriving av uttrykk kun gjelder for relative stier. Hvis du vil pare vertsnavn, bør du bruke if-setninger, for eksempel nedenfor:
hvis( $host ~* www\.(. *) )
{
sett $host_without_www $1;
omskrive ^(.*)$ http://$host_without_www$1permanent;
}


5. Sett kommando
Syntaks: setvariabelverdi; Standard: ingen; Bruksmiljø: server, lokasjon, hvis;
Dette direktivet brukes til å definere en variabel og tildele en verdi til den. Verdien av en variabel kan være tekst, variabel eller union av tekstvariabler.
Eksempel: set$varname "hello world";


6.Uninitialized_variable_warn instruksjoner
Syntaks: uninitialized_variable_warnon|off
Bruksmiljø: http, server, lokasjon, hvis
Denne kommandoen brukes til å slå på og av advarselsmeldingen for uinitialiserte variabler, og standardverdien er På.




Fem. Eksempel på Nginx Rewrite regelskriving
1. Når den aksesserte filen og katalogen ikke eksisterer, omdiriger til en bestemt php-fil
if( !-e $request_filnavn )
{
omskriv ^/(.*)$ index.php sist;
}


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


3. Hvis klienten bruker IE-nettleseren, omdirigerer den til /ie-katalogen
if( $http_user_agent ~ MSIE)
{
omskriving ^(.*)$ /ie/$1 break;
}


4. Deaktiver tilgang til flere kataloger
Sted ~ ^/(Cron|maler)/
{
nekte alt;
pause;
}


5. Deaktiver tilgang til filer som starter med /data
Lokasjon ~ ^/data
{
nekte alt;
}


6. Forby tilgang til filer med filsuffiksnavn .sh, .flv, .mp3
Sted ~ .*\. (sh|flv|mp3)$
{
retur 403;
}


7. Sett nettleserens cache-tid for visse typer filer
Sted ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
utløper 30d;
}
Sted ~ .*\. (js|css)$
{
utløper 1 time;
}


8. Sett utløpstider for favicon.ico og robots.txt;
Her er favicon.ico 99 dager, og robots.txt 7 dager, og 404-feilloggen loggføres ikke
lokasjon ~(favicon.ico) {
log_not_found av;
utløper 99d;
pause;
}
sted ~(robots.txt) {
log_not_found av;
utløper 7d;
pause;
}


9. Fastsette utløpstiden for et bestemt dokument; Dette er 600 sekunder, og tilgangslogger blir ikke registrert
lokasjon ^~ /html/scripts/loadhead_1.js {
access_log av;
root /opt/lampp/htdocs/web;
utløper 600;
pause;
}


10. Anti-hotlink-filer og faste utløpstider
Return412 her er en egendefinert HTTP-statuskode, som som standard er 403, noe som er praktisk for å finne riktig hotlink-forespørsel
"omskriving ^/; "Viser et bilde av en anti-hotlink
"access_log av;" Det føres ingen tilgangslogger, noe som reduserer stresset
"Utløper 3D" 3 dagers nettlesercache for alle filer


Sted ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers ingen blokkerte *.xx.com*.xx.net localhost 208.97.167.194;
hvis ($invalid_referer) {
omskriving ^/;
retur 412;
pause;
}
access_log av;
root /opt/lampp/htdocs/web;
utløper 3D;
pause;
}


11. Kun tillate fast IP-tilgang til nettsiden med passord


rot /opt/htdocs/www;
allow 208.97.167.194;
tillat 222.33.1.2;
allow 231.152.49.4;
nekte alt;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswed;


12Konverter filer i flernivåkataloger til én fil for å forbedre SEO-effektene
/job-123-456-789.html 指向/job/123/456/789.html


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


13. Omdiriger når filer og kataloger ikke eksisterer:


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


14. Pek en mappe i rotkatalogen til nivå 2-katalogen
For eksempel peker /shanghaijob/ til /area/shanghai/
Hvis du endrer last til permanent, vil nettleserens adressefelt være /location/shanghai/
omskrive ^/([0-9A-Z]+)jobb/(.*)$ /område/$1/$2last;
Problemet med eksempelet ovenfor er at det ikke vil matche når man får tilgang til /shanghai
skriv om ^/([0-9A-Z]+)jobb$ /område/$1/ sist;
omskrive ^/([0-9A-Z]+)jobb/(.*)$ /område/$1/$2last;
Denne veien/Shanghai er også tilgjengelig, men de tilhørende lenkene på siden er ikke tilgjengelige,
Hvis ./list_1.html ekte adresse er /area/shanghia/list_1.html blir den til /list_1.html, noe som gjør den utilgjengelig.
Da kan jeg ikke legge til automatisk hopping
(-d $request_filename) har en betingelse om at det må være en ekte katalog, og min omskriving er det ikke, så det har ingen effekt
hvis (-d $request_filnavn){
omskriv ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
Det er lett å gjøre når du vet grunnen, la meg hoppe manuelt
omskriv ^/([0-9A-Z]+)Job$ /$1Job/permanent;
omskrive ^/([0-9A-Z]+)jobb/(.*)$ /område/$1/$2last;


15. Hopping av domenenavn
Server
{
Hør 80;
server_name jump.linuxidc.com;
indeks index.html index.htm index.php;
root /opt/lampp/htdocs/www;
omskriving ^/ http://www.xx.com/;
access_log av;
}


16. Multidomene-dreiing
server_name www.xx.comwww.xx.com;
indeks index.html index.htm index.php;
root /opt/lampp/htdocs;
hvis ($host ~ "linuxidc\.net") {
omskriv ^(.*) http://www.xx.com$1permanent;
}


6. nginx globale variabler
arg_PARAMETER #这个变量包含GET请求中, hvis det finnes en variabel PARAMETER.
args #这个变量等于请求行中 (GET-forespørsel) parametere, f.eks. foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Disse dataene er nøyaktige selv om forbindelsen blir brutt.
content_length #请求头中的Content-lengde felt.
content_type #请求头中的Content-type felt.
cookie_COOKIE #cookie verdien av COOKIE-variabelen
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
vert #请求主机头字段, ellers servernavnet.
Vertsnavn #Set til maskinens vertsnavn returnert av gethostname
http_HEADER
is_args #如果有args参数 er denne variabelen lik "?", ellers lik "", nullverdi.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, vanligvis FÅ eller POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth brukernavn validert av Basic-modulen.
request_completion #如果请求结束, sett det til OK. Tom når forespørselen ikke er ferdig eller hvis forespørselen ikke er den siste i forespørselskjeden.
request_method #GET或POST
request_filename #当前请求的文件路径, generert av rot- eller alias-direktiver og URI-forespørsler.
request_uri #包含请求参数的原始URI inneholder den ikke vertsnavnet, f.eks. "/foo/bar.php?arg=baz". kan ikke endres.
skjema #HTTP方法 (f.eks. http, https).
server_protocol #请求使用的协议, vanligvis HTTP/1.0 eller HTTP/1.1.
server_addr #服务器地址 kan denne verdien bestemmes etter at et systemkall er fullført.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Sytten. Samsvar mellom Apache- og Nginx-reglene
Apaches omskrivingsCond tilsvarer Nginx sin hvis
Apaches RewriteRule tilsvarer Nginx sin omskriving
Apaches [R] tilsvarer Nginx sin omdirigering
[P] i Apache tilsvarer siste i Nginx
Apaches [R,L] tilsvarer Nginx sin omdirigering
Apaches [P,L] tilsvarer Nginx sin siste
Apaches [PT,L] tilsvarer Nginx sin siste


For eksempel, la et spesifisert domenenavn få tilgang til dette nettstedet, og vend deg alltid til www.xx.com andre domenenavn
  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:
hvis( $host ~* ^(.*)\.aaa\.com$ )
{
satt $allowHost '1';
}
Hvis( $host ~* ^localhost )
{
satt $allowHost '1';
}
Hvis( $host ~* ^192\.168\.1\.(. *?) $ )
{
satt $allowHost '1';
}
hvis( $allowHost !~ '1' )
{
omskriv ^/(.*)$ http://www.xx.comredirect ;
}





Foregående:Sina Weibo skanner koden for å betale 1 cent for å motta årssluttbonusen opp til 2015 yuan
Neste:CMD5 knekker passordet til Windows systemadministrator
Publisert på 07.12.2014 17:25:05 |
Å lese og poste tilbake er en dyd
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com