Eu tenho o Apache httpd na porta 80 e o servidor Morbo httpd na porta 3000 que serve código Mojolicious perl. O Morbo está disponível apenas no host local.
Agora, quero configurar o host virtual com o proxy para que os arquivos estáticos sejam servidos pelo Apache e o conteúdo dinâmico seja serverd pelo Morbo.
Esta é minha configuração de host virtual:
<VirtualHost *:80>
ServerName mojo.myhost.com
DocumentRoot /opt/mojo/public
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://localhost:3000$1 [NS,P,L]
ProxyPassReverse / http://mojo.myhost.com
</VirtualHost>
O problema é que quando tento acessar o http://mojo.myhost.com/
, o sub-requisito do Apache é emitido pelo Apache e o pedido enviado ao Morbo é http://localhost:3000/error/noindex.html
e não http://localhost:3000/
.
Aqui faz parte do log da mod-rewrite:
[rid#2b20905c58e0/initial] (2) init rewrite engine with requested uri /
[rid#2b20905c58e0/initial] (3) applying pattern '^(.*)' to uri '/'
[rid#2b20905c58e0/initial] (4) RewriteCond: input='/opt/mojo/public/' pattern='!-f' => matched
[rid#2b20905c58e0/initial] (4) RewriteCond: input='/opt/mojo/public/' pattern='!-d' => not-matched
[rid#2b20905c58e0/initial] (1) pass through /
[rid#2b20905cb910/subreq] (2) init rewrite engine with requested uri /index.php
[rid#2b20905cb910/subreq] (1) pass through /index.php
[rid#2b20905cd920/subreq] (2) init rewrite engine with requested uri /index.html
[rid#2b20905cd920/subreq] (1) pass through /index.html
[rid#2b20905cb910/subreq] (2) init rewrite engine with requested uri /index.html.var
[rid#2b20905cb910/subreq] (1) pass through /index.html.var
[rid#2b20905cd920/subreq] (2) init rewrite engine with requested uri /index.htm
[rid#2b20905cd920/subreq] (1) pass through /index.htm
[rid#2b20905caf40/initial/redir#1] (2) init rewrite engine with requested uri /error/noindex.html
[rid#2b20905caf40/initial/redir#1] (3) applying pattern '^(.*)' to uri '/error/noindex.html'
[rid#2b20905caf40/initial/redir#1] (4) RewriteCond: input='/opt/mojo/public/error/noindex.html' pattern='!-f' => matched
[rid#2b20905caf40/initial/redir#1] (4) RewriteCond: input='/opt/mojo/public/error/noindex.html' pattern='!-d' => matched
[rid#2b20905caf40/initial/redir#1] (2) rewrite '/error/noindex.html' -> 'http://localhost:3000/error/noindex.html'
[rid#2b20905caf40/initial/redir#1] (2) forcing proxy-throughput with http://localhost:3000/error/noindex.html
[rid#2b20905caf40/initial/redir#1] (1) go-ahead with proxy request proxy:http://localhost:3000/error/noindex.html [OK]
Eu adicionei NS
flag a RewriteRule
, mas o subreq ainda modifica o URL antes de ser passado para o Morbo. Como posso obter o Apache para passar / em vez de /error/noindex.html para o Morbo?
Se os dois RewriteCond
forem removidos da configuração virtualhost, isso funciona, mas os arquivos estáticos também são serverd pelo Morbo (o que eu não gosto muito).