Fantasmas curinga no Nginx

25

Acabei de instalar o Nginx no meu servidor e estou extremamente feliz com os resultados, mas ainda não consigo descobrir como inserir hosts virtuais curinga.

Esta é a estrutura [diretório] que eu gostaria:

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)

Como você pode ver, é bastante básico, no entanto, gostaria de adicionar domínios simplesmente adicionando um registro A para um novo subdomínio, que apontará instantaneamente para o subdiretório com o mesmo nome em public_html.

Há coisas na web, mas não encontrei algo exatamente assim.

Qualquer ajuda seria muito apreciada.

rorygilchrist
fonte
Não sei ao certo o que você quer dizer com "subdiretório com o mesmo nome" quando seu exemplo tem dois nomes diferentes: subdomain 1/ x.example.com- você pode esclarecer?
21411 nickgrim
Verdade, desculpe não muito claro. Vamos dizer que eu tenho subdomínio x.example.com, é diretório seria / public_html / x, no entanto eu preciso tanto example.com e www.example.com para apontar para / public_html /
rorygilchrist

Respostas:

39

Eu vou te mostrar.

O arquivo de configuração

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}

Arquivos de teste

Temos dois arquivos de teste:

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T

Teste

Nomes estáticos do servidor:

$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

E nome do servidor regexp:

$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

T
Alexander Azarov
fonte
Infelizmente não funciona. Todos os subdomínios apontam apenas para public_html. Aqui está a segunda configuração do servidor:server{ listen 80; server_name ~^(.*)\.example\.com$ ; location / { root /var/www/public_html/$1; index index.html index.htm index.php; } location ~ \.php$ { root $1; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/public_html/$1$fastcgi_script_name; include fastcgi_params; } }
rorygilchrist 22/03
4
"não funciona infelizmente" não fornece detalhes infelizmente. Sempre consulte o nginx error.log para obter detalhes. Atualizei minha resposta para mostrar como essa configuração funciona. Você pode ver a minha versão Nginx é 0.8.54
Alexander Azarov
Funcionou perfeitamente para mim agora.
Claire Furney
5

Esse arquivo de configuração do Nginx abaixo permite nomes de host curinga que são roteados dinamicamente para a pasta correspondente e, /var/www/vhost/ao mesmo tempo, geram dinamicamente os respectivos arquivos de log.

http://test1.wildcard.com/var/www/vhost/test1
                                                   /var/log/nginx/test1.wildcard.com-access.log                                                    /var/log/nginx/test1.wildcard.com-error.log

http://test2.wildcard.com/var/www/vhost/test2
                                                   /var/log/nginx/test2.wildcard.com-access.log                                                    /var/log/nginx/test2.wildcard.com-error.log

wildcard.conf

server {
  listen 80;
  listen [::]:80;

  #  Match everything except dot and store in $subdomain variable
  #  Matches test1.wildcard.com, test1-demo.wildcard.com
  #  Ignores sub2.test1.wildcard.com
  server_name ~^(?<subdomain>[^.]+).wildcard.com;

  root /var/www/vhost/$subdomain;

  access_log /var/log/nginx/$host-access.log;
  error_log  /var/log/nginx/$host-error.log;
}
AnthumChris
fonte
Por favor, explique sua solução.
Andrew Schulman
Isso parece ser praticamente idêntico a uma resposta existente. O que isso adiciona?
Michael Hampton
11
Fornece um pouco mais de especificidade. Espero que ajude a todos.
AnthumChris 28/02