Htaccess comportamento estranho com Nginx

2

Eu tenho um site em execução no Nginx (v1.0.14) servindo como proxy reverso que envia solicitações para o Apache (v2.2.19). Então, o Nginx roda na porta 80, o Apache está no 8080.

O site geral funciona bem, exceto que não consigo bloquear o acesso a determinados diretórios com o arquivo .htaccess.

Por exemplo, eu tenho 'my-protected-directory' em 'www.site.com' Dentro dele eu tenho o htaccess com o seguinte código:

<Files *>
order deny,allow
deny from all
allow from 1.2.3.4 <--- my ip address here
</Files>

Quando eu tento acessar esta página com o meu ip (1.2.3.4) eu recebo erro 404, que não é o que eu esperava:

http://www.site.com/my-protected-directory

No entanto, tudo funciona como esperado quando essa página é veiculada diretamente pelo Apache. Eu posso ver esta página, todo mundo não pode.

http://www.site.com:8080/my-protected-directory

Atualizar. Nginx config (7.1.3.7 é o site ip.):

user  apache;
worker_processes  4;
error_log  logs/error.log;
pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    sendfile        on;
    keepalive_timeout  65;
    gzip  on;
    gzip_min_length 1024;
    gzip_http_version 1.1;
    gzip_proxied any;
    gzip_comp_level 5;
    gzip_types    text/plain text/css
                  application/x-javascript text/xml
                  application/xml application/xml+rss
                  text/javascript image/x-icon;

    server {
    listen       80;
    server_name  www.site.com site.com 7.1.3.7;
    access_log  logs/host.access.log  main;

    # serve static files
    location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
      root    /var/www/vhosts/www.site.com/httpdocs;
      proxy_set_header Range "";
      expires 30d;
    }

    # pass requests for dynamic content to Apache
    location / {
      proxy_redirect               off;
      proxy_set_header X-Real-IP  $remote_addr;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Range "";
      proxy_pass      http://7.1.3.7:8080;
    }
  }

Atualização 2 : o mod_rpaf é instalado e o endereço IP é determinado corretamente

Alguém poderia me dizer o que está errado e como isso pode ser corrigido?

    
por Termos 26.03.2012 / 00:39

4 respostas

1

Eu consegui resolver esse problema. O problema estava no módulo Rpaf que, sob alguma condição, funciona incorretamente. Por 'condições' eu quero dizer a versão do Apache e o SO. (O meu era o Apache 2.2 no CentOS)

De qualquer forma, para consertar isso, você deve desabilitar o módulo rpaf e instalar a versão corrigida aqui: mod_realip2

A instalação é clara e simples. Espero que isso ajude alguém porque eu passei horas e horas procurando resolução.

    
por 26.03.2012 / 14:06
1

Se o nginx estiver fazendo proxy para o apache, então a conexão para o apache vem do nginx, não vindo de você, e assim o seu IP nunca entra na equação.

Você pode definir uma variável de ambiente com base no seu IP original (que será armazenado no cabeçalho x-forwarded-for) e, em seguida, permitir solicitações com esse conjunto de variáveis:

<Location "/">
    SetEnvIf X-Forwarded-For ^1\.2\.3\.4 proxy_env
    Order allow,deny
    Satisfy Any
    Allow from env=proxy_env
</Location>
    
por 26.03.2012 / 10:18
0

Você pode tentar adicionar à seção do servidor nginx error_log <path> debug; , executar a solicitação e ver como ela é analisada em relação às regras de local. Às vezes não é tão óbvio ...

    
por 26.03.2012 / 02:28
0

Você colocou a diretiva root em location em vez de server . Este é um dos mais comuns erros de configuração do nginx . E, neste caso, será diretamente responsável pelo seu erro 404.

    
por 13.09.2013 / 16:40