Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 11719|Répondre: 1

[Web] Un exemple illustre la règle de réécriture dans Nginx

[Copié le lien]
Publié sur 05/12/2014 22:45:25 | | |
Un. Correspondance en expression régulière, où :
* ~ est une correspondance sensible à la majuscule
* ~* est une correspondance insensible à la cass.
* !~ et !~* sont respectivement des incompatibilités sensibles à la casse et insensibles à la cascule
Deux. correspondance de fichiers et de répertoire, où :
* -f et !-f sont utilisés pour déterminer si un fichier existe
* -d et !-d sont utilisés pour déterminer si un répertoire existe
* -e et !-e sont utilisés pour déterminer si un fichier ou un répertoire existe
* -x et !-x sont utilisés pour déterminer si un fichier est exécutable ou non
3. Le dernier paramètre de l’instruction de réécriture est la marque de drapeau, qui est marquée par :
1.last équivaut à la marque [L] dans Apache, ce qui signifie réécriture.
2. Interruption Après que la correspondance de cette règle soit complétée, la correspondance sera terminée et les règles suivantes ne seront plus correspondantes.
3.redirection retourne 302 redirection temporaire, et l’adresse du navigateur affichera l’adresse URL après le saut.
4.Permanent return 301 permanent redirection permanente, l’adresse du navigateur affichera l’adresse URL après le saut.


Utilisez last and break pour réaliser des réécritures d’URI, et la barre d’adresses du navigateur reste inchangée. Et il y a une légère différence entre les deux, l’utilisation de la commande alias doit être marquée par last ; Lorsque vous utilisez proxy_pass directives, vous devez utiliser le tag de rupture. Après que la dernière balise a été exécutée dans cette règle de réécriture, elle sera sur le serveur{......} Le tag réactive la demande, tandis que le break tag met fin au match une fois le match par règles terminé.
Par exemple : si nous redirigeons une URL comme /photo/123456 vers /path/to/photo/12/1234/123456.png
réécrire « /photo/([0-9]{2})([0-9]{2})([0-9]{2})"/chemin/vers/photo/$1/$1$2/$1$2$3.png ;


Quatre. Règle NginxRewrite


1. Commande de rupture
Environnement d’utilisation : serveur, emplacement, si ;
La directive complète le système de règles actuel et ne gère plus la directive de réécriture.


2. Si une directive
Environnement d’utilisation : serveur, emplacement
Cette instruction sert à vérifier si une condition est remplie, et si oui, à exécuter l’instruction à l’intérieur des crochets curly. La commande If ne supporte pas l’imbriquement, et ne supporte pas les conditions multiples && et || Traitement.


3. Commande de retour
syntaxe : returncode ;
Environnement d’utilisation : serveur, emplacement, si ;
Cette instruction sert à mettre fin à l’exécution de la règle et à renvoyer un code d’état au client.
Exemple : si l’URL visitée se termine par « .sh » ou « .bash », un code de statut 403 est renvoyé
Emplacement ~ .*\. (sh|bash) ?$
{
retour 403 ;
}


4. Commande de réécriture
Syntaxe : drapeau de remplacement de rewriteegex
Environnement d’utilisation : serveur, emplacement, si
Cette directive redirige l’URI en fonction de l’expression, ou modifie la chaîne. Les instructions sont exécutées dans l’ordre indiqué dans le fichier de configuration. Notez que la réécriture d’expressions n’est valable que pour les chemins relatifs. Si vous souhaitez associer des noms d’hôte, vous devriez utiliser les instructions if, par exemple ci-dessous :
if( $host ~* www\.(. *) )
{
réglé $host_sans_www 1 $ ;
réécriture ^(.*)$ http ://$host_without_www$1permanent ;
}


5. Commande Set
Syntaxe : valeur de la variable d’ensemble ; Par défaut : aucun ; Environnement d’utilisation : serveur, emplacement, si ;
Cette directive sert à définir une variable et à lui attribuer une valeur. La valeur d’une variable peut être texte, variable ou union de variables de texte.
Exemple : set$varname « hello world » ;


6.Uninitialized_variable_warn instructions
Syntaxe : uninitialized_variable_warnon|off
Environnement d’utilisation : http, serveur, emplacement, si
Cette commande sert à activer ou désactiver le message d’avertissement pour les variables non initialisées, et la valeur par défaut est Activée.




Cinq. Exemple de rédaction de règles Nginx Rewrite
1. Lorsque le fichier et le répertoire consultés n’existent pas, redirigez vers un certain fichier php
if( !-e $request_nom de fichier )
{
réécriture ^/(.*)$ index.php last ;
}


2. Échange de répertoire /123456/xxxx ====> /xxxx ?id=123456
réécrire ^/(\d+)/(.+)/ /$2 ?id=$1 last ;


3. Si le client utilise le navigateur IE, il redirige vers le répertoire /ie
if( $http_user_agent ~ MSIE)
{
réécriture ^(.*)$ /ie/$1 pause ;
}


4. Désactiver l’accès à plusieurs répertoires
Emplacement ~ ^/(cron|templates)/
{
nier tout ;
pause ;
}


5. Désactiver l’accès aux fichiers commençant par /data
Emplacement ~ ^/Data
{
nier tout ;
}


6. Interdire l’accès aux fichiers portant des noms de suffixes .sh, .flv, .mp3
Emplacement ~ .*\. (sh|flv|mp3)$
{
retour 403 ;
}


7. Définir le temps de cache du navigateur pour certains types de fichiers
Emplacement ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
expire à 30 jours ;
}
Emplacement ~ .*\. (js|css)$
{
expire 1h ;
}


8. Fixer les délais d’expiration pour favicon.ico et robots.txt ;
Ici, le favicon.ico est de 99 jours, le robots.txt de 7 jours, et le journal d’erreur 404 n’est pas enregistré
Emplacement ~(favicon.ico) {
log_not_found off ;
expire en 99e jour ;
pause ;
}
Emplacement ~(robots.txt) {
log_not_found off ;
expire 7d ;
pause ;
}


9. Fixer la date d’expiration d’un certain document ; Cela dure 600 secondes, et les journaux d’accès ne sont pas enregistrés
Emplacement ^~ /html/scripts/loadhead_1.js {
access_log off ;
root /opt/lampp/htdocs/web ;
expire 600 ;
pause ;
}


10. Fichiers anti-hotlink et délais d’expiration définis
Return412 ici est un code d’état HTTP personnalisé, qui est par défaut 403, ce qui est pratique pour trouver la bonne requête de lien rapide
« réécriture ^/; « Affiche une image d’un anti-hotlink
« access_log off » Aucun journal d’accès n’est enregistré, ce qui réduit le stress
« Expire 3D » 3 jours de cache navigateur pour tous les fichiers


Emplacement ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers aucun bloqué *.xx.com*.xx.net localhost 208.97.167.194 ;
if ($invalid_référent) {
réécriture ^/;
retour 412 ;
pause ;
}
access_log off ;
root /opt/lampp/htdocs/web ;
expire 3d ;
pause ;
}


11. N’autoriser l’accès à IP fixe au site web qu’avec un mot de passe


root /opt/htdocs/www ;
autoriser le 208.97.167.194 ;
autoriser 222.33.1.2 ;
autoriser 231.152.49.4 ;
nier tout ;
auth_basic « C1G_ADMIN » ;
auth_basic_user_file htpasswd ;


12Convertir les fichiers dans des répertoires multi-niveaux en un seul fichier pour améliorer les effets SEO
/job-123-456-789.html 指向/job/123/456/789.html


réécriture^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last ;


13. Rediriger lorsque les fichiers et répertoires n’existent pas :


if ( !-e $request_nom de fichier) {
proxy_pass http://127.0.0.1 ;
}


14. Pointer un dossier dans le répertoire racine vers le répertoire de niveau 2
Par exemple, /shanghaijob/ pointe vers /zone/shanghai/
Si vous changez last en permanent, alors la barre d’adresses du navigateur sera /location/shanghai/
réécriture ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last ;
Le problème avec l’exemple ci-dessus, c’est qu’il ne correspond pas lors de l’accès à /shanghai
réécriture ^/([0-9a-z]+)job$ /area/$1/ last ;
réécriture ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last ;
Cette voie/shanghai est également accessible, mais les liens relatifs sur la page ne sont pas disponibles,
Si ./list_1.html adresse réelle est /area/shanghia/list_1.html deviendra /list_1.html, ce qui la rendra inaccessible.
Alors je ne peux pas ajouter le saut automatique
(-d $request_nom_fichier) a une condition : il doit s’agir d’un répertoire réel, et ma réécriture ne l’est pas, donc cela n’a aucun effet
if (-d $request_nom_fichier){
réécriture ^/(.*)([^/])$ http ://$host/$1$2/permanent ;
}
C’est facile à faire après avoir compris la raison, laissez-moi sauter manuellement
réécriture ^/([0-9a-z]+)job$ /$1job/permanent ;
réécriture ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last ;


15. Changement de nom de domaine
serveur
{
écouter 80 ;
server_name jump.linuxidc.com ;
index index.html index.htm index.php ;
root /opt/lampp/htdocs/www ;
réécriture ^/ http://www.xx.com/ ;
access_log off ;
}


16. Tournage multi-domaine
server_name www.xx.comwww.xx.com ;
index index.html index.htm index.php ;
root /opt/lampp/htdocs ;
if ($host ~ « linuxidc\.net ») {
réécriture ^(.*) http ://www.xx.com$1permanent ;
}


6. variables globales nginx
arg_PARAMETER #这个变量包含GET请求中, s’il existe un PARAMÈTRE variable.
args #这个变量等于请求行中 paramètres (requête GET), par exemple, foo=123&bar=blahblah ;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Ces données sont précises même si la connexion est interrompue.
Champ de content_length #请求头中的Content longueur.
Champ de type content_type #请求头中的Content.
cookie_COOKIE #cookie la valeur de la variable COOKIE
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
l’hôte #请求主机头字段, sinon le nom du serveur.
Hostname #Set au Hostname de TheMachine rapporté par gethostname
http_HEADER
is_args #如果有args参数, cette variable est égale à « ? », sinon égale à « », valeur nulle.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, généralement GET ou POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Nom d’utilisateur validé par le module de base.
request_completion #如果请求结束, mets-le sur OK. Vide lorsque la requête n’est pas terminée ou si la requête n’est pas la dernière dans la chaîne de requêtes.
request_method #GET或POST
request_filename #当前请求的文件路径, généré par des directives racines ou alias et des requêtes URI.
request_uri #包含请求参数的原始URI, il ne contient pas le nom d’hôte, par exemple « /foo/bar.php ?arg=baz ». Impossible de modifier les choses.
Scheme #HTTP方法 (par exemple http, https).
server_protocol #请求使用的协议, généralement HTTP/1.0 ou HTTP/1.1.
server_addr #服务器地址, cette valeur peut être déterminée après la fin d’un appel système.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Sept. Correspondance entre les règles Apache et Nginx
Le RewriteCond d’Apache correspond à celui de Nginx si
La règle de réécriture d’Apache correspond à la réécriture de Nginx
Le [R] d’Apache correspond à la redirection de Nginx
[P] en apache correspond à last dans Nginx
Le [R,L] d’Apache correspond à la redirection de Nginx
Le [P,L] d’Apache correspond au dernier de Nginx
Le [PT,L] d’Apache correspond au dernier de Nginx


Par exemple, autoriser un nom de domaine spécifié à accéder à ce site, et toujours se tourner vers www.xx.com autres noms de domaine
  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' ;
}
si( $allowHost !~ '1' )
{
réécriture ^/(.*)$ http://www.xx.comredirect ;
}





Précédent:Sina Weibo scanne le code pour payer 1 centime afin de recevoir la prime de fin d’année jusqu’à 2015 yuan
Prochain:CMD5 pirate le mot de passe de l’administrateur système Windows
Publié sur 07/12/2014 17:25:05 |
Lire et poster en retour est une vertu
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com