apache httpd Redirecionando a URL com base no nome do servidor

1

Temos um sistema Jira e Confluence no meu trabalho. Ambos estão sendo executados nos mesmos servidores. O URL real para acessar o Jira e o Confluence é:

http://foauslxapp05:8080/jira
http;//foauslxapp05:8090/confluence

ou com o nome completo do host:

http://foauslxapp05.foservices.corp:8080/jira
http://foauslxapp05.foservices.corp:8090/confluence

Para simplificar tudo, configurei uma regra de proxy para permitir que os usuários façam isso:

http://foauslxapp05/jira  <-- Accessing Jira
http://foauslxapp06/wiki  <-- Accessing Confluence

Nossos técnicos criaram um par de aliases de servidor para foauslxapp05 , de modo que:

http://jira/jira     <-- Accessing Jira
http://jira.foservices.corp/jira  <-- Accessing Jira
http://wiki/wiki     <-- Accessing Confluence
http://wiki.foservices.corp/wiki  <-- Accessing Confluence

O que eu realmente gostaria de fazer é levar isso para a próxima etapa:

http://jira    <-- Accessing Jira
http://jira.foservices.corp  <-- Accessing Jira
http://wiki    <-- Accessing Confluence
http://wiki.foservices.copr  <-- Accessing Confluence

O problema, é claro, é que os nomes DNS jira e wiki são meramente aliases DNS para foauslxapp05 . Preciso detectar o URL que o usuário digitou (ou seja, qual host o usuário solicitou) e, em seguida, com base nesse URL, preciso redirecionar o usuário para o aplicativo correto.

Eu não tenho nem mesmo certeza do que eu deveria estar olhando: este é o VirtualHost? mod_rewrite? mod_proxy? Ou isso é algo completamente diferente? Eu não posso imaginar algo assim sendo muito difícil de fazer. Infelizmente, não estou muito familiarizado com o Apache httpd.

    
por David W. 24.04.2012 / 18:04

2 respostas

1

Você pode fazer isso usando a variável ServerAlias na configuração do host virtual, esse item de configuração pode suportar uma lista de nomes / aliases do servidor:

link

    
por 24.04.2012 / 18:07
0

O que você deseja é um host virtual baseado em nome. Como é provável que você receba muitos conselhos ruins sobre como estruturar isso, sugiro o seguinte como sendo uma maneira agradável e clara (talvez um pouco duplicada) de fazer isso.

Mas antes de começar, eu diria: onde a Crowd se encaixa nessa imagem? (Crowd sendo a peça da SSO que junta Jira e Confluence juntos muito bem). Em nossa implantação, temos jira.example.com/jira, jira.example.com/confluence e o mesmo para / crowd e / servicedesk e o que vem a seguir. Você pode querer considerar como sua solução irá crescer (não estou dizendo que sua solução é ruim, ou até pior do que a nossa, mas é algo para se ter em mente).

Ok, para a configuração. Você precisa informar ao Apache que está usando hospedagem virtual baseada em nome em HTTP e HTTPS.

# Look in /etc/httpd/conf/httpd.conf
NameVirtualHost *:443
NameVirtualHost *:80

Presumivelmente, você tem o mod_ssl instalado e o mod_proxy_ajp para o proxy reverso de volta para os servlets do tomcat, fornecendo-lhe o Jira / Confluence, etc.

Espero que você esteja familiarizado com a configuração do mod_ssl, então você tem seus certificados, etc. Eu não tenho experiência com o SNI (e se você ainda estiver usando o RHEL5, não é realmente um opção, mas você não disse qual versão do RHEL você está usando), então eu vou assumir que você tem um certificado SAN com nomes como:

  • jira.example.com (ou melhor, jira.foservices.corp, mas vou usar example.com daqui para frente)
  • confluence.example.com
  • crowd.example.com (você não disse se está usando isso ...)

Se você estiver usando o RHEL5 ou o RHEL6, será necessário service httpd stop ; edite o / etc / sysconfig / httpd e ative o MPM do trabalhador (descomente a linha do HTTPD), que lhe dará melhor escalabilidade; então service httpd start . O RHEL7 usa o httpd 2.4 por padrão e tem o MPM de evento mais recente, acredito, que seria melhor que o anterior.

Edite o /etc/httpd/conf/httpd.conf e comente quaisquer módulos (LoadModule ...) que não sejam necessários. Se você não sabe, faça alguns de cada vez e use apachectl configtest para testar sua configuração, já que a configuração padrão exigirá um número deles.

Enquanto estiver lá, recomendo ativar o KeepAlives; um bom impulso no desempenho.

Eu estou fazendo para colocar todos esses hosts virtuais em /etc/httpd/conf.d/sites.conf. Espero que você aprecie que haja alguma duplicação aparente, mas separar cada nome / serviço em uma estrofe diferente do VirtualHost adiciona uma grande quantidade de clareza.

Começarei com a estrutura básica mostrando todos os sites (jira e confluência) e, em seguida, detalharei o host virtual para jira (o outro será bastante semelhante).

<VirtualHost *:80>
    ServerName jira.example.com
</VirtualHost>

<VirtualHost *:443>
    ServerName jira.example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName confluence.example.com
</VirtualHost>

<VirtualHost *:443>
    ServerName confluence.example.com
</VirtualHost>

Ok, isso é muito alto nível; vamos dar uma olhada mais de perto nos hosts virtuais jira. Primeiro, eu defino um host virtual para acesso HTTP que apenas redireciona para HTTPS.

<VirtualHost *:80>
    ServerName jira.example.com

    ErrorLog ...
    CustomLog ...

    Redirect 301 / https://jira.example.com/
</VirtualHost>

O site HTTPS é onde toda a ação é:

<VirtualHost *:443>
    ServerName jira.example.com

    SSLEngine On
    SSLProtocol all -SSLv2 -SSLv3

    # The following could be tigher...
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

    # If using a SAN certificate, the following would be the same for crowd
    SSLCertificateFile /etc/pki/tls/certs/jira_etc.pem
    SSLCertificateKeyFile /etc/pki/tls/private/jira_etc.key
    SSLCertificateChainFile /etc/pki/tls/certs/jira_etc.pems

    ErrorLog ... # don't forget log rotation
    CustomLog ...

    # Enough boilerplate, down to Jira specifics. Check which ports are
    # used for each or jira/confluence etc. The command (as root or as 
    # the account running the apps) may be helpful. You want the AJP port;
    # not the HTTP port.
    #
    #    'lsof -Pni | grep LISTEN | grep java'

    # Speed boost
    AddOutputFilterByType DEFLATE text/html text/plain text/xml

    ProxyPass          / ajp://127.0.0.1:8009/jira
    ProxyPassReverse   / ajp://127.0.0.1:8009/jira
</VirtualHost>

DICA: Uma coisa para se pensar: o que você quer que aconteça se as pessoas forem, diga link (o site padrão) , ou para o endereço IP do servidor diretamente? Eu sugiro que você responda com um 404 (não encontrado) ou um 403 (proibido). Aqui está um fragmento para você integrar como lição de casa. Use httpd -S para obter um resumo muito útil de quais sites estão definidos em sua configuração atual (não em execução, mas arquivos de configuração como estão atualmente), e observe que a ordem é importante (outra razão pela qual eu coloquei tudo em conf. d / sites.conf, em vez de conf.d / jira.conf e conf.d / confluence.conf, etc.

<VirtualHost _default_:80>
    RewriteEngine On
    RewriteRule ^ - [R=404,L]
</VirtualHost>

Sugiro que você faça uma coisa semelhante para o site https padrão em conf.d / ssl.conf

Se você acha este post útil e informativo,

Felicidades, Cameron

    
por 24.06.2016 / 14:42