Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 11719|Risposta: 1

[Web] Un esempio illustra la regola di riscrittura in Nginx

[Copiato link]
Pubblicato su 05/12/2014 22:45:25 | | |
Uno. Corrispondenza a espressioni regolari, dove:
* ~ è corrispondenza a maiuscole e minuscole
* ~* è una corrispondenza indistinta alla maiuscola e alla ragione
* !~ e !~* sono rispettivamente discorrispondenze a maiuscole e insensibili a maiuscole
Due. corrispondono file e directory, dove:
* -f e !-f sono usati per determinare se un file esiste
* -d e !-d sono usati per determinare se esiste una directory
* -e e !-e vengono usati per determinare se esiste un file o una directory
* -x e !-x vengono usati per determinare se un file è eseguibile o meno
3. L'ultimo parametro dell'istruzione di riscrittura è il marchio di flag, che viene contrassegnato con:
1.last equivale al marchio [L] in Apache, che significa riscrittura.
2. Pausa Dopo che l'abbinamento di questa regola è completato, il matching verrà terminato e le regole successive non saranno più abbinate.
3.redirect restituisce 302 redirect temporaneo, e l'indirizzo del browser mostrerà l'indirizzo URL dopo il salto.
4.permanent return 301 permanent redirect, l'indirizzo del browser mostrerà l'indirizzo URL dopo il salto.


Usa last and break per implementare le riscritture degli URI, e la barra degli indirizzi del browser rimane invariata. E c'è una leggera differenza tra i due, usando il comando alias bisogna segnare con ultimo; Quando usi proxy_pass direttive, devi usare il tag di rottura. Dopo che l'ultimo tag è stato eseguito in questa regola di riscrittura, sarà sul server{......} Il tag riavvia la richiesta, mentre il break tag termina la partita dopo che la partita di regole è terminata.
Ad esempio: se reindirizziamo un URL come /photo/123456 a /path/to/photo/12/1234/123456.png
riscrivere "/foto/([0-9]{2})([0-9]{2})([0-9]{2})"/percorso/a/foto/$1/$1$2/$1$2$3.png ;


Quattro. Regola NginxRewrite


1. comando di interruzione
Ambiente d'uso: server, posizione, se;
La direttiva completa il regolamento corrente e non gestisce più la direttiva di riscrittura.


2. Se direttiva
Ambiente d'uso: server, posizione
Questa istruzione viene utilizzata per verificare se una condizione è soddisfatta e, in tal caso, per eseguire l'istruzione all'interno delle parentesi a riccio. Il comando If non supporta il nesting e non supporta condizioni multiple && e || Trattamento.


3. Comando di ritorno
sintassi: returncode ;
Ambiente d'uso: server, posizione, se;
Questa istruzione viene utilizzata per terminare l'esecuzione della regola e restituire un codice di stato al client.
Esempio: se l'URL visitato termina in ".sh" o ".bash", viene restituito un codice di stato 403
Posizione ~ .*\. (sh|bash)?$
{
ritorno 403;
}


4. comando di riscrittura
Sintassi: flag di sostituzione rewriteregex
Ambiente di utilizzo: server, posizione, se
Questa direttiva reindirizza l'URI in base all'espressione, o modifica la stringa. Le istruzioni vengono eseguite nell'ordine del file di configurazione. Si noti che riscrivere espressioni è valido solo per i percorsi relativi. Se vuoi abbinare nomi host, dovresti usare istruzioni if, ad esempio qui sotto:
se( $host ~* www\.(. *) )
{
impostato $host_senza_www $1;
riscrittura ^(.*)$ http://$host_without_www$1permanent;
}


5. Comando Set
Sintassi: valore della variabile insetata; Predefinito: nessuno; Ambiente d'uso: server, posizione, se;
Questa direttiva viene utilizzata per definire una variabile e assegnarle un valore. Il valore di una variabile può essere testo, variabile o unione di variabili di testo.
Esempio: set$varname "ciao mondo";


6.Uninitialized_variable_warn istruzioni
Sintassi: uninitialized_variable_warnon|off
Ambiente di utilizzo: http, server, posizione, se
Questo comando serve ad attivare e disattivare il messaggio di avviso per le variabili non inizializzate, e il valore predefinito è On.




Cinque. Esempio di scrittura di regole Nginx Rewrite
1. Quando il file e la directory a cui si accede non esistono, reindirizzare a un certo file php
if( !-e $request_filename )
{
riscrittura ^/(.*)$ index.php ultima;
}


2. Scambio di directory /123456/xxxx ====> /xxxx?id=123456
riscrivere ^/(\d+)/(.+)/ /$2?id=$1 ultimo;


3. Se il client utilizza il browser IE, reindirizza alla directory /ie
if( $http_user_agent ~ MSIE)
{
riscrittura ^(.*)$ /ie/$1 interruzione;
}


4. Disabilita l'accesso a più directory
Posizione ~ ^/(cron|template)/
{
negare tutto;
pausa;
}


5. Disabilita l'accesso ai file che iniziano con /data
Posizione ~ ^/dati
{
negare tutto;
}


6. Vietare l'accesso a file con nomi di suffisso .sh, .flv, .mp3
Posizione ~ .*\. (sh|flv|mp3)$
{
ritorno 403;
}


7. Impostare il tempo di cache del browser per certi tipi di file
Posizione ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
scadenza 30d;
}
Posizione ~ .*\. (js|css)$
{
scade 1h;
}


8. Stabilire i tempi di scadenza per favicon.ico e robots.txt;
Qui, il favicon.ico è di 99 giorni, il robots.txt di 7 giorni e il registro errore 404 non viene registrato
Posizione ~(favicon.ico) {
log_not_found off;
scade nel 99d;
pausa;
}
Luogo ~(robots.txt) {
log_not_found off;
scade 7d;
pausa;
}


9. Impostare il tempo di scadenza di un determinato documento; Sono 600 secondi e i log di accesso non vengono registrati
Location ^~ /html/scripts/loadhead_1.js {
access_log off;
root /opt/lampp/htdocs/web;
scade 600;
pausa;
}


10. File anti-hotlink e tempi di scadenza impostati
Return412 qui è un codice di stato HTTP personalizzato, che di default è 403, comodo per trovare la richiesta di hotlink corretta
"riscrittura ^/; "Mostra un'immagine di un anti-hotlink
"access_log via;" Non vengono registrati i log di accesso, riducendo lo stress
"Scadenza 3D" 3 giorni di cache del browser per tutti i file


Posizione ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers nessuno bloccato *.xx.com*.xx.net localhost 208.97.167.194;
if ($invalid_referer) {
riscrittura ^/;
ritorno 412;
pausa;
}
access_log off;
root /opt/lampp/htdocs/web;
scade 3d;
pausa;
}


11. Consentire l'accesso a IP fisso al sito web solo con una password


root /opt/htdocs/www;
permettere 208.97.167.194;
permettere 222.33.1.2;
permettere 231.152.49.4;
negare tutto;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Converti file in directory multilivello in un unico file per migliorare gli effetti SEO
/job-123-456-789.html 指向/job/123/456/789.html


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


13. Reindirizza quando file e directory non esistono:


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


14. Puntare una cartella nella directory radice verso la directory di livello 2
Ad esempio, /shanghaijob/ indica /area/shanghai/
Se cambi last in permanente, allora la barra degli indirizzi del browser sarà /location/shanghai/
riscrivere ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Il problema dell'esempio sopra è che non corrisponde quando si accede a /shanghai
riscrittura ^/([0-9a-z]+)job$ /area/$1/ last (ultimo);
riscrivere ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Anche questo modo è accessibile/shanghai, ma i link relativi nella pagina non sono disponibili,
Se ./list_1.html indirizzo reale è /area/shanghia/list_1.html diventerà /list_1.html, rendendolo inaccessibile.
Allora non posso aggiungere il salto automatico
(-d $request_filename) ha la condizione che deve essere una directory reale, e la mia riscrittura non lo è, quindi non ha effetto
se (-d $request_filename){
riscrittura ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
È facile farlo dopo aver conosciuto il motivo, lasciami saltare manualmente
riscrittura ^/([0-9a-z]+)job$ /$1job/permanent;
riscrivere ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. Salto di nome di dominio
Server
{
ascolta 80;
server_name jump.linuxidc.com;
indice index.html index.htm index.php;
root /opt/lampp/htdocs/www;
riscrittura ^/ http://www.xx.com/;
access_log off;
}


16. Tornazione multidominio
server_name www.xx.comwww.xx.com;
indice index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ "linuxidc\.net") {
riscrittura ^(.*) http://www.xx.com$1permanent;
}


6. Variabili globali di Nginx
arg_PARAMETER #这个变量包含GET请求中, se esiste un PARAMETRO variabile.
args #这个变量等于请求行中 parametri (richiesta GET), ad esempio, foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Questi dati sono accurati anche se la connessione viene interrotta.
Campo di content_length #请求头中的Content lunghezze.
Campo di tipo content_type #请求头中的Content.
cookie_COOKIE #cookie il valore della variabile COOKIE
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
host #请求主机头字段, altrimenti il nome del server.
Hostname #Set al nome host di TheMachine come restituito da gethostname
http_HEADER
is_args #如果有args参数, questa variabile è uguale a "?", altrimenti uguale a "", valore nullo.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, di solito PRENDI o POSTA.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Nome utente convalidato dal Modulo Base.
request_completion #如果请求结束, impostalo su OK. Vuoto quando la richiesta non è completata o se la richiesta non è l'ultima nella catena di richieste.
request_method #GET或POST
request_filename #当前请求的文件路径, generati da direttive root o alias e richieste URI.
request_uri #包含请求参数的原始URI, non contiene il nome host, ad esempio "/foo/bar.php?arg=baz". Non può essere modificato.
Schema #HTTP方法 (ad esempio http, https).
server_protocol #请求使用的协议, solitamente HTTP/1.0 o HTTP/1.1.
server_addr #服务器地址, questo valore può essere determinato dopo il completamento di una chiamata di sistema.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Sette. Corrispondenza tra le regole Apache e Nginx
Il RewriteCond di Apache corrisponde a quello di Nginx se
La Regola RewriteRule di Apache corrisponde alla riscrittura di Nginx
La [R] di Apache corrisponde al reindirizzamento di Nginx
[P] in Apache corrisponde all'ultimo in Nginx
Il [R,L] di Apache corrisponde al reindirizzamento di Nginx
Il [P,L] di Apache corrisponde all'ultimo di Nginx
Il [PT,L] di Apache corrisponde all'ultimo di Nginx


Ad esempio, permettere a un nome di dominio specificato di accedere a questo sito e rivolgetevi sempre www.xx.com altri nomi di dominio
  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$ )
{
ambientato $allowHost '1';
}
if( $host ~* ^localhost )
{
ambientato $allowHost '1';
}
se( $host ~* ^192\.168\.1\.(. *?) $ )
{
ambientato $allowHost '1';
}
se( $allowHost !~ '1' )
{
riscrittura ^/(.*)$ http://www.xx.comredirect ;
}





Precedente:Sina Weibo scansiona il codice per pagare 1 centesimo e ricevere il bonus di fine anno fino a 2015 yuan
Prossimo:CMD5 scifra la password dell'amministratore di sistema Windows
Pubblicato su 07/12/2014 17:25:05 |
Leggere e rispondere è una virtù
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com