Subdomínios do usuário Nginx, devo proxy_pass?

2

Estou tentando configurar subdomínios de usuários, veiculando conteúdo de pastas específicas: www.example.com/username veiculado em username.example.com (como páginas do github).

Eu olhei para o Nginx reescreve, mas eu não quero que o navegador redirecione - eu quero que o domínio seja username.example.com. De qualquer forma, um comentário sobre esta questão diz que eu não posso reescrever o host, apenas proxy para ele. Eu tentei configurar um proxy_pass , mas toda a documentação e exemplos mostram que ele está sendo usado para (obviamente) proxy para um serviço em outro host ou porta, mas no meu caso eu quero apenas proxy para outro local no mesmo host e porta.

Esta é a maneira apropriada de resolver este problema e, em caso afirmativo, qual é a sintaxe de configuração correta do Nginx?

    
por Kevin L. 11.03.2011 / 22:32

2 respostas

3

A maneira simples de lidar com isso é fazer com que o nginx trate cada um dos diretórios como um host virtual diferente.

server_name _;
root /var/www/$host;

Isso exigiria que o caminho físico dos arquivos fosse /var/www/username.example.com/ em vez de /var/www/username/ .

    
por 11.03.2011 / 22:48
0

Para referência, foi o que acabei colocando na configuração do meu site nginx. Note que eu estou combinando o subdomínio e definindo a raiz a partir disso, em vez de $host como na resposta de Shane, então eu posso usar / var / www / username no disco. Além disso, todos os usuários compartilham as pastas stylesheets e javascripts .

server_name _;

set $myroot "";
if ($host ~ (.*)\.example\.com) {
          set $myroot $1;
}
if ($host ~ ^www\.example\.com) {
  set $myroot "";
}

location / {
  root   /var/www/$myroot;
  index  index.html index.htm;
  autoindex on;
}

location ~ ^(/stylesheets|/javascripts) {
  root /var/www;
}
    
por 14.03.2011 / 16:13