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:
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.
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:
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:
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