Como hospedar dinamicamente qualquer domínio sem criar pastas especificamente para ele?

0

Suponha que um nome de domínio tenha sido apontado para o endereço IP do meu servidor.

assim que o nome de domínio chegar até mim ...

Eu quero que o apache execute ...

 python_script domain.tld

ou talvez ..

 bash_script domain.tld

se o domínio de entrada se parece com isso:

domain.tld/test

então ..

 bash_script domain.tld/test

deve ser executado.

de dentro do script bash eu posso executar cálculos e decidir o que exibir.

Talvez as coisas não funcionem dessa forma devido a preocupações de segurança, mas a segurança não é minha preocupação. só gostaria de testá-lo.

    
por user82418 30.08.2014 / 12:53

1 resposta

1

Uma instalação padrão de apache servirá todas as URLs que apontam para ela se nenhum Host Virtual tiver sido definido. Portanto, você não precisa fazer nada extra para obter apache para responder.

Os scripts podem ser executados como scripts CGI colocando-os em /var/www/cgi-bin e garantindo que sejam executáveis com chmod 0755 <script name> .

Por exemplo, se você criar /var/www/cgi-bin/test.sh da seguinte forma:

#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<pre>"
env
echo "</pre>

navegue para o seu navegador em: http://<server name or IP>/cgi-bin/test.sh , você deverá ver algo semelhante a:

SERVER_SIGNATURE=
Apache/2.2.15 (CentOS) Server at testing.lo Port 80

HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0
SERVER_PORT=80
HTTP_HOST=testing.lo
DOCUMENT_ROOT=/var/www/html
SCRIPT_FILENAME=/var/www/cgi-bin/test.sh
REQUEST_URI=/cgi-bin/test.sh
SCRIPT_NAME=/cgi-bin/test.sh
HTTP_CONNECTION=keep-alive
REMOTE_PORT=43964
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/var/www/cgi-bin
SERVER_ADMIN=root@localhost
HTTP_ACCEPT_LANGUAGE=en-gb,en;q=0.5
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
REMOTE_ADDR=192.168.122.1
SHLVL=1
SERVER_NAME=testing.lo
SERVER_SOFTWARE=Apache/2.2.15 (CentOS)
QUERY_STRING=
SERVER_ADDR=192.168.122.40
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
HTTP_CACHE_CONTROL=max-age=0
HTTP_ACCEPT_ENCODING=gzip, deflate
REQUEST_METHOD=GET
_=/bin/env

Como você pode ver, HTTP_HOST é a URL do servidor ( testing.lo neste exemplo), que você pode usar em seu script.

No entanto, isso não é exatamente como você solicitou, pois você tem /cgi-bin/test.sh no URL. Para corrigir isso, você precisa redirecionar. A maneira mais simples seria ativar o arquivo .htaccess e configurá-lo.

Em /etc/httpd/conf/httpd.conf , localize a linha <Directory "/var/www/html"> e role algumas linhas até ver uma linha que inicia AllowOverride . Certifique-se de que esteja definido para All . Você deveria ter:

<Directory "/var/www/html">
...
...
AllowOverride All
...
...
</Directory>

Agora crie um arquivo /var/www/html/.htaccess e adicione o seguinte:

RewriteEngine on
RewriteRule (.*) /cgi-bin/test.sh/$1 [L]

Reinicie o apache :

service httpd restart

Aponte seu navegador para o URL do servidor: http://<server name or IP> .

Você deve ver resultados semelhantes a antes, mas sem precisar anexar o caminho do script ao URL. Observe também que há variáveis de ambiente que informam qual URL foi inserido para que seu script possa usá-las.

HTTP_HOST é o nome do servidor.

PATH_INFO é o caminho anexado ao servidor. ( test se você inserir http://<server name or IP>/test no seu navegador).

No seu script bash , você simplesmente precisa usar essas variáveis em vez de analisar os argumentos do script conforme sua pergunta foi sugerida.

O script não precisa ser bash . Use qualquer idioma que desejar, desde que ele possa acessar as variáveis de ambiente passadas para ele.

    
por 30.08.2014 / 18:20