Do guia mod_proxy configurei o proxy reverso com autenticação de usuário.
# Set reverse proxy
ProxyPass "/" "http://localhost:10080/"
ProxyPassReverse "/" "http://localhost:10080/"
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Allow from all
AuthType Basic
AuthName "Password Required"
AuthUserFile /home/secure/.passwords
Require user ivy
</Proxy>
Isso funciona da seguinte maneira:
Acessos do usuário para o servidor - > Servidor pede nome de usuário / senha - > Usuário insere suas credenciais - > Se as credenciais estiverem corretas para o hera do usuário, o proxy reverso funcionará para a porta 10080 no host local.
Todos os usuários são adicionados com o htpasswd. Eu corro o apache2.4 pelo Linux.
O que preciso fazer:
Eu quero permitir que usuários diferentes usem o proxy. No número do servidor de túneis reversos estão abertos com as portas 10080, 10081, 10082 e assim por diante ...
Eu quero atribuir cada usuário único para usar a porta do proxy separado. Ou seja:
- ivy - > 10080
- joe - > 10081
- doe - > 10082
Se eu escrever Require user ivy joe doe
, redireciono todos os usuários para a porta única 10080.
Parece que o truque está em algum lugar nas linhas ProxyPass "/" "http://localhost:10080/"
e <Proxy *>
. Ou onde?
Atualização:
Seguindo a sugestão de Jenny tentou:
LoadModule rewrite_module modules/mod_rewrite.so
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteCond %{REMOTE_USER} ivy # Unconditional redirect for testing.
RewriteRule ^/(.*)$ "http://localhost:10080/test.html" [R=301,L]
</IfModule>
Tentei isso com o Proxy ativado (o proxy é mais strong que o Rewrite) e o Proxy desabilitado (o Index.html local é exibido).
Tentei usar sinalizadores [R,L]
, [L,R]
, [L,R=301]
- sem sorte.
Tentou adicionar em <Directory "/var/www/html">
e em <Proxy *>
:
RewriteEngine On
RewriteRule ^/(.*)$ "http://localhost:10080/test.html" [R=301,L]
Tentei isso com o Proxy ativado (o proxy é mais strong que o Rewrite) e o Proxy desabilitado (o Index.html local é exibido).
Deep dig encontrou este truque:
RedirectMatch ^/.*$ /test.html
Isso funciona, mas isso não é condicional: ou seja, ainda não consigo atribuir redirecionamentos diferentes por usuário.
Update2:
Tentei solução de Cedric Knight sem sorte também. Decidi desistir do Apache, mudei para o nginx. Funciona bem. A configuração do servidor para proxy reverso separado por usuário é:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
set $auth_status 100;
server_name localhost;
root /usr/share/nginx/html;
location / {
try_files $uri $uri/ =404;
auth_basic "Restricted content";
auth_basic_user_file "/home/secure/.passwords";
auth_request_set $auth_status $upstream_status;
if ($remote_user = "ivy") {
proxy_pass http://localhost:10080;
break; # break is essential since proxy_pass in 'if' isn't allowed.
}
if ($remote_user = "joe") {
proxy_pass http://localhost:10081;
break;
}
}
}
Esta é uma solução de força bruta. Na próxima etapa, adicionarei a leitura do usuário do mapa: port do arquivo.