Redirecionar subpasta para outro IP local no apache [fechado]

3

Eu tenho um pi de framboesa trabalhando e sendo acessível através de um domínio, que é asada.net. Ele serve páginas da web usando o apache 2.2.22.

Além disso, comprei recentemente um NAS que também tem uma página da web em uma instância local do apache (incorporado).

O ip local do Raspberry pi é 192.168.0.4 e o ip local do NAS é 192.168.0.5.

Toda vez que eu acesso www.asada.net, a página de raiz do raspberry pi é mostrada.

Agora, o que eu quero fazer é redirecionar o site www.asada.net/nas para o ip do NAS, 192.168.0.5, para que esta página fique acessível de fora.

Eu não quero que o asada.net aponte para 192.168.0.5 nem faça qualquer alteração em seu servidor apache, apenas redirecione-o do raspberry pi.

Todas as configurações que eu tentei foram feitas no apache do raspberry pi. Eu habilitei o mod_proxy; tentei ProxyPass e ProxyPassReverse, eu também tentei diretiva Location ... Mas sem sorte.

Alguém poderia me ajudar?

Obrigado antecipadamente!

EDITAR : Meu raspberry pi está executando o Raspbian e a versão do apache é 2.2.22. Estes são módulos carregados:

Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 headers_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 proxy_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_connect_module (shared)
 proxy_ftp_module (shared)
 proxy_html_module (shared)
 proxy_http_module (shared)
 proxy_scgi_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

EDIT 2 : Eu fui capaz de fazer alguns progressos. Este é o meu VirtualHost:

    <VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName asada.net
        ServerAlias www.asada.net
        DocumentRoot /var/www

        # NAS
        ProxyPreserveHost on
        ProxyPass /nas http://192.168.0.5
        ProxyPassReverse /nas http://192.168.0.5

    </VirtualHost>

Agora, de alguma forma funciona ... páginas da Web são carregadas, mas os recursos não são. Deixe-me postar uma captura de tela:

Oquepossofazer?

EDIT3:Mate@Froggizmesugeriu aqui algumas maneiras de alcançar meu objetivo, então escolhi o que achei que se ajustaria melhor às minhas necessidades : Mapeamento de URL. Eu descartei subdomínios porque meu domínio é gratuito (noip.com).

Atualmente, meu VirtualHost se parece com o seguinte código:

    <VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName asada.net
        ServerAlias www.asada.net
        DocumentRoot /var/www

        # NAS
        ProxyPreserveHost on
        ProxyPass /nas http://192.168.0.5
        ProxyPassReverse /nas http://192.168.0.5

        ProxyHTMLURLMap http://192.168.0.5 /nas

        <Location /nas>
            ProxyPassReverse /
            SetOutputFilter proxy-html
            ProxyHTMLURLMap http://192.168.0.5 /nas
            ProxyHTMLURLMap / /nas
            ProxyHTMLURLMap /nas /nas
            RequestHeader unset Accept-Encoding
        </Location>

    </VirtualHost>

Tudo parece estar configurado corretamente. Quando eu digito asada.net/nas no meu navegador, a típica imagem quebrada é mostrada na página:

Enoconsolededepuração,éalgoestranho:todorecursoquedevesercarregadorecebeumerro'Falhaaocarregarrecurso:oservidorrespondeucomstatus404(NotFound)'.Oqueémaisestranhoéqueolinkdorecurso(colocadoàdireita)pareceestarfaltandoum'/'logoapós'...net/nas'eantes'web/...':

http://asada.net/nasweb/css/job_list_icon.css?v=WDV1.01

Olha, meu palpite é que deveria ser

http://asada.net/nas/web/css/job_list_icon.css?v=WDV1.01

em vez disso.

Alguma ideia? Obrigado novamente.

    
por russellhoff 02.12.2015 / 09:23

3 respostas

1

O que eu entendo é que o RPI serve páginas para www.asada.net, e é isso que você quer. Além disso, você quer servir suas páginas NAS através do site www.asada.net/nas. Tenho certeza de que isso é possível, mas sugiro o seguinte:

  • NAS: nas.asada.net (talvez seja necessário alterar o DNS para que isso funcione)
  • RPI: www.asada.net, asada.net

Isso é muito mais fácil de manipular e limpar também. Eu acho que não importa muito para você.

Eu acho que você precisa configurar o Apache como proxyserver para o seu NAS. Para isso você precisa do módulo mod_proxy . Você precisa configurar um vhost para o NAS, e dentro desse vhost você configura o proxy.

Você não nos diz que tipo de servidor você usa. Eu acho que é Raspbian? Qual versão do Apache - 2.2 ou 2.4? Isso pode fazer uma grande diferença, então certifique-se de que você tenha o tutorial certo, algo assim:

< p >

Eu vejo que você tentou fazer isso, mas não deu certo. Dê-nos a configuração que você usa. Deixe-nos saber o que você tentou. Não podemos ajudá-lo sem saber o que você fez!

    
por 02.12.2015 / 10:05
0

Você não precisa do mod_proxy ou algo assim. Você pode fazer isso com mod_alias, que está incluído na maioria das instalações padrão do apache2.

Em sua configuração vhost ou em um arquivo .htaccess na raiz do site, basta adicionar esta linha:

Redirect /nas http://192.168.0.5

Você deve fazer Redirect 301 /nas http://192.168.0.5 , pois nunca será encontrado no endereço .4. Mas isso não importa realmente para as coisas da rede interna. Um redirecionamento 301 significa "permanentemente movido".

Editar: mais informações sobre mod_alias e a diretiva de redirecionamento: link

Editar 02: eu pulei essa linha em sua pergunta acidentalmente:

so that this page gets accessible from outside.

Isso é o que eu geralmente faço nesse cenário, já que é muito mais simples solucionar problemas e manter do que um proxy reverso. Você precisará mover para endereços baseados no nome do host. Usaremos nas.asada.net como sugerido pelo SPRBRN. Dentro da sua rede, configure o DNS para que nas.asada.net aponte para 192.168.0.5. Fora da sua rede, ele deve apontar para o seu endereço IP externo.

No seu NAS, altere a porta de acesso para algo não padrão. Eu nunca trabalhei com um onde você não pudesse fazer isso. Talvez use 8000 se estiver usando a porta 80, ou 1443 se estiver usando 443. Peça ao seu firewall para encaminhar esta nova porta para o NAS.

Em seguida, faça a diretiva da seguinte forma:

Redirect 301 /nas http://nas.asada.net:8000[or whatever port your chose]

Dessa forma, o acesso ao seu NAS não depende do pi de framboesa ou de qualquer outro dispositivo de rede. Além disso, verifique se você está usando SSL se planeja acessá-lo pela rede.

    
por 02.12.2015 / 10:13
0

Primeiro eu te explico o problema:

Os comandos

ProxyPass /nas http://192.168.0.5
ProxyPassReverse /nas http://192.168.0.5

redirecionará http://asada.net/nas para http://192.168.0.5 , portanto, quando você tentar acessar uma imagem, ela estará no código http://192.168.0.5/example.gif , o servidor Apache não fará proxy na imagem, pois a solicitação é /example.gif , o que não começa em /nas .

Para resolver esse problema, há muitas maneiras.

Alterando o caminho para se ajustar ao padrão de proxy

ProxyPass /nas http://192.168.0.5/nas
ProxyPassReverse /nas http://192.168.0.5/nas

assim toda a solicitação será redirecionada corretamente quando você acessar o link . mas neste cas nas precisa ser delivada de http://192.168.0.5/nas ao invés de http://192.168.0.5

Adicionando nome de subdomínio

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName asada.net
    ServerAlias www.asada.net
    DocumentRoot /var/www
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName nas.asada.net
    # NAS
    ProxyPreserveHost on
    ProxyPass / http://192.168.0.5
    ProxyPassReverse / http://192.168.0.5
</VirtualHost>

É exatamente a mesma solução de antes, mas com outra abordagem, / caberá com as solicitações / do proxy. E você terá um endereço dedicado para acessá-lo. Será mais limpo.

Usando o mapeamento de URL

ProxyPass /nas/ http://192.168.0.5/
ProxyPassReverse /nas/ http://192.168.0.5/

ProxyHTMLURLMap http://192.168.0.5 /nas/

<Location /nas/>
   ProxyPassReverse /
   SetOutputFilter  proxy-html
   ProxyHTMLURLMap https://192.168.0.5 /nas/
   ProxyHTMLURLMap / /nas/
   ProxyHTMLURLMap  /nas/ /nas/
   RequestHeader    unset  Accept-Encoding
</Location>

como a resposta em proxy reverso do apache2 O mapeamento de URLs não será aplicado

Usando substituto

Isso eu não posso ajudar, desculpe, eu ainda não encontrei como fazer trabalhos substitutos

    
por 02.12.2015 / 11:08