Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 11719|Resposta: 1

[Web] Um exemplo ilustra a regra de reescrita em Nginx

[Copiar link]
Publicado em 05/12/2014 22:45:25 | | |
Um. Correspondência de expressão regular, onde:
* ~ é a correspondência sensível a maiúsculas minúsculas
* ~* é uma correspondência insensível ao caso
* !~ e !~* são incompatibilidades sensíveis a maiúsculas minúsculas e maiúsculas, respectivamente
Dois. Correspondência de arquivos e diretórios, onde:
* -f e !-f são usados para determinar se um arquivo existe
* -d e !-d são usados para determinar se existe um diretório
* -e e !-e são usados para determinar se existe um arquivo ou diretório
* -x e !-x são usados para determinar se um arquivo é executável ou não
3. O último parâmetro da instrução de reescrita é a marca de flag, que é marcada com:
1.last é equivalente à marca [L] em Apache, que significa reescrita.
2. Quebra Após a conclusão do emparelhamento dessa regra, o emparelhamento será encerrado e as regras subsequentes não serão mais combinadas.
3.redirect retorna o 302 redirecionamento temporário, e o endereço do navegador exibirá o endereço URL após o salto.
4.Permanent return 301 permanent redirection, o endereço do navegador exibirá o endereço URL após o salto.


Use last and break para implementar reescritas de URI, e a barra de endereços do navegador permanece inalterada. E há uma pequena diferença entre os dois, usar o comando alias deve ser marcado com último; Ao usar proxy_pass diretivas, você precisa usar a tag de quebra. Depois que a última tag for executada nessa regra de reescrita, ela estará no servidor{......} A tag reinicia o pedido, enquanto a tag break termina a partida após a conclusão da partida por regência.
Por exemplo: se redirecionarmos uma URL como /photo/123456 para /path/to/photo/12/1234/123456.png
reescrever "/foto/([0-9]{2})([0-9]{2})([0-9]{2})"/caminho/para/foto/$1/$1$2/$1$2$3.png ;


Quatro. Regra NginxRewrite


1. comando de quebra
Ambiente de uso: servidor, localização, se;
A diretiva completa o conjunto de regras atual e não gerencia mais a diretiva de reescrita.


2. Se diretiva
Ambiente de uso: servidor, localização
Essa instrução é usada para verificar se uma condição é cumprida e, se sim, executar a instrução dentro dos colchetes curtilhos. O comando If não suporta aninhamento, e não suporta múltiplas condições && e || Tratamento.


3. Comando de retorno
sintaxe: returncode ;
Ambiente de uso: servidor, localização, se;
Essa instrução é usada para encerrar a execução da regra e retornar um código de status ao cliente.
Exemplo: Se a URL visitada terminar em ".sh" ou ".bash", um código de status 403 é retornado
Localização ~ .*\. (sh|bash)?$
{
retorno 403;
}


4. Comando de regravação
Sintaxe: flag de substituição rewriteegex
Ambiente de uso: servidor, localização, se
Essa diretiva redireciona o URI com base na expressão, ou modifica a string. As instruções são executadas na ordem do arquivo de configuração. Note que reescrever expressões só é válido para caminhos relativos. Se você quiser emparelhar nomes de host, deve usar instruções if, por exemplo, abaixo:
if( $host ~* www\.(. *) )
{
Definir $host_sem_www $1;
reescrever ^(.*)$ http://$host_without_www$1permanent;
}


5. Comando Set
Sintaxe: valor da variável conjunta; Padrão: nenhum; Ambiente de uso: servidor, localização, se;
Essa diretiva é usada para definir uma variável e atribuir um valor a ela. O valor de uma variável pode ser texto, variável ou união de variáveis de texto.
Exemplo: set$varname "olá mundo";


6.Uninitialized_variable_warn instruções
Sintaxe: uninitialized_variable_warnon|off
Ambiente de uso: http, servidor, localização, se
Esse comando é usado para ativar e desligar a mensagem de aviso para variáveis não inicializadas, e o valor padrão é Ligado.




Cinco. Exemplo de escrita de regras Nginx Rewrite
1. Quando o arquivo e diretório acessados não existirem, redirecione para um determinado arquivo php
if( !-e $request_nome do arquivo )
{
reescrita ^/(.*)$ index.php último;
}


2. Troca de diretório /123456/xxxx ====> /xxxx?id=123456
reescrever ^/(\d+)/(.+)/ /$2?id=$1 último;


3. Se o cliente estiver usando o navegador IE, ele redireciona para o diretório /ie
if( $http_user_agent ~ MSIE)
{
reescrita ^(.*)$ /ie/$1 quebra;
}


4. Desabilitar o acesso a múltiplos diretórios
Localização ~ ^/(cron|templates)/
{
negar tudo;
intervalo;
}


5. Desabilitar o acesso a arquivos que começam com /data
Localização ~ ^/Data
{
negar tudo;
}


6. Proibir o acesso a arquivos com nomes de sufixos .sh, .flv, .mp3
Localização ~ .*\. (sh|flv|mp3)$
{
retorno 403;
}


7. Defina o tempo de cache do navegador para certos tipos de arquivos
Localização ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
expira em 30d;
}
Localização ~ .*\. (js|css)$
{
expira 1h;
}


8. Definir prazos de validade para favicon.ico e robots.txt;
Aqui, o favicon.ico é de 99 dias, o robots.txt de 7 dias, e o registro de erro 404 não é registrado
Localização ~(favicon.ico) {
log_not_found desligado;
expira em 99d;
intervalo;
}
localização ~(robots.txt) {
log_not_found desligado;
expira 7d;
intervalo;
}


9. Definir o tempo de validade de um determinado documento; Isso é de 600 segundos, e os registros de acesso não são registrados
Localização ^~ /html/scripts/loadhead_1.js {
access_log desligado;
root /opt/lampp/htdocs/web;
expira 600;
intervalo;
}


10. Arquivos anti-hotlink e prazos de expiração definidos
O Return412 aqui é um código de status HTTP personalizado, que por padrão é 403, o que é conveniente para encontrar a solicitação correta de hotlink
"reescrever ^/; "Mostra uma imagem de um anti-hotlink
"access_log fora;" Nenhum log de acesso é registrado, reduzindo o estresse
"Expira 3D" 3 dias de cache do navegador para todos os arquivos


Localização ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers nenhum bloqueou *.xx.com*.xx.net localhost 208.97.167.194;
if ($invalid_referente) {
reescrita ^/;
retorno 412;
intervalo;
}
access_log desligado;
root /opt/lampp/htdocs/web;
expira 3d;
intervalo;
}


11. Permitir acesso fixo ao site apenas com senha


root /opt/htdocs/www;
permitir 208.97.167.194;
permitir 222.33.1.2;
permitir 231.152.49.4;
negar tudo;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Converter arquivos em diretórios multinível em um único arquivo para aprimorar os efeitos de SEO
/job-123-456-789.html 指向/job/123/456/789.html


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


13. Redirecionar quando arquivos e diretórios não existirem:


if (!-e $request_nome do arquivo) {
proxy_pass http://127.0.0.1;
}


14. Apontar uma pasta no diretório raiz para o diretório de nível 2
Por exemplo, /shanghaijob/ aponta para /área/xangai/
Se você mudar last para permanente, então a barra de endereços do navegador será /location/shanghai/
reescrever ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
O problema com o exemplo acima é que ele não corresponde ao acessar /shanghai
rewrite ^/([0-9a-z]+)job$ /area/$1/ last;
reescrever ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Essa forma/xangai também é acessível, mas os links relativos na página não estão disponíveis,
Se ./list_1.html endereço real for /area/shanghia/list_1.html se tornará /list_1.html, tornando-o inacessível.
Aí não posso adicionar pulo automático
(-d $request_nome do arquivo) tem uma condição de que deve ser um diretório real, e minha reescrita não é, então não tem efeito
se (-d $request_nome do arquivo){
reescrever ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
É fácil depois de saber o motivo, deixe-me pular manualmente
rewrite ^/([0-9a-z]+)job$ /$1job/permanent;
reescrever ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. Mudança de nome de domínio
Servidor
{
ouça 80;
server_name jump.linuxidc.com;
índice index.html index.htm index.php;
root /opt/lampp/htdocs/www;
reescrita ^/ http://www.xx.com/;
access_log desligado;
}


16. Torneamento multidomínio
server_name www.xx.comwww.xx.com;
índice index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ "linuxidc\.net") {
reescrita ^(.*) http://www.xx.com$1permanent;
}


6. Variáveis globais nginx
arg_PARAMETER #这个变量包含GET请求中, se existir um PARÂMETRO variável.
args #这个变量等于请求行中 parâmetros (requisição GET), por exemplo, foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Esses dados são precisos mesmo que a conexão seja interrompida.
Campo de content_length #请求头中的Content comprimento.
Campo do tipo content_type #请求头中的Content.
cookie_COOKIE #cookie o valor da variável COOKIE
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
#请求主机头字段 host, caso contrário, o nome do servidor.
Nome de hostname #Set ao nome de host da Máquina conforme retornado por gethostname
http_HEADER
is_args #如果有args参数, essa variável é igual a "?", caso contrário igual a "", valor nulo.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, geralmente GET ou POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Nome de usuário validado pelo Módulo Básico.
request_completion #如果请求结束, coloque em OK. Esvaziar quando a solicitação não for concluída ou se a solicitação não for a última na cadeia de requisições.
request_method #GET或POST
request_filename #当前请求的文件路径, gerado por diretivas raiz ou alias e requisições de URI.
request_uri #包含请求参数的原始URI, ele não contém o nome do host, por exemplo, "/foo/bar.php?arg=baz". não pode ser modificado.
esquemas #HTTP方法 (ex.: http, https).
server_protocol #请求使用的协议, geralmente HTTP/1.0 ou HTTP/1.1.
server_addr #服务器地址, esse valor pode ser determinado após a conclusão de uma chamada de sistema.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Sete. Correspondência entre as regras Apache e Nginx
O RewriteCond do Apache corresponde ao Nginx se
A Regra RewriteRule de Apache corresponde à reescrita de Nginx
O [R] de Apache corresponde ao redirecionamento de Nginx
[P] em Apache corresponde ao último em Nginx
O [R,L] de Apache corresponde ao redirecionamento de Nginx
O [P,L] de Apache corresponde ao último de Nginx
O [PT,L] de Apache corresponde ao último de Nginx


Por exemplo, permita que um nome de domínio especificado acesse esse site e sempre recorra a www.xx.com outros nomes de domínio
  Apache:
RewriteCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC]
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $
Regra ReescreverT^/(.*)$ http://www.xx.com[R,L]


  Nginx:
if( $host ~* ^(.*)\.aaa\.com$ )
{
Conjunto $allowHost '1';
}
if( $host ~* ^localhost )
{
Conjunto $allowHost '1';
}
if( $host ~* ^192\..168\.1\..(. *?) $ )
{
Conjunto $allowHost '1';
}
se( $allowHost !~ '1' )
{
reescrever ^/(.*)$ http://www.xx.comredirect ;
}





Anterior:Sina Weibo escaneie o código para pagar 1 centavo e receber o bônus de fim de ano até 2015 yuan
Próximo:CMD5 quebra senha de administrador do sistema Windows
Publicado em 07/12/2014 17:25:05 |
Ler e postar de volta é uma virtude
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com