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 ;
}
|