Existe uma maneira de encaminhar dinamicamente subdomínios no NGINX?

3

Eu fiz todo o googling que posso, mas sem sorte. Eu estou tentando descobrir como criar um namespace para um usuário, digamos user.mysite.com, e ter esse redirecionamento para sua pasta (mysite.com/user). Existe uma maneira de fazer o nginx encaminhar todos os subdomínios para suas respectivas pastas? A razão pela qual estou fazendo isso é porque eu gostaria de poder criar subdomínios assim sem precisar reiniciar o nginx.

Meu arquivo nginx.conf se parece com isso agora mesmo.

server
{

# add www.
if ($host ~ ^(?!www)) {
    rewrite ^/(.*)$ http://www.$host/$1 permanent;
}


server_name www.mydomain.com;

access_log /var/log/nginx/mydomain.com.access.log;

    error_log /var/log/nginx/mydomain.com.error.log;

root /usr/share/nginx/mydomain.com/;

index index.php index.html index.htm;

# use fastcgi for all php files
location ~ \.php$
{
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

# deny access to apache .htaccess files
location ~ /\.ht
{
    deny all;
}
}

Este é um pequeno código que encontrei para redirecionar todos os subdomínios para o www.mydomain.com. Se ele pudesse redirecionar para seus respectivos diretórios, seria exatamente o que eu preciso.

# remove subdomain
if ($host ~ "^www\.(.*?)\.(.{3,}\.([a-z]{2}\.[a-z]{2}|[a-z]{2,4}))$") {
    set $host_without_sub $2;
    rewrite ^/(.*)$ http://www.$host_without_sub/$1 permanent;
}
    
por Daniel F. Dietzel 26.12.2012 / 19:55

1 resposta

1

Com outro dia inteiro de googling, encontrei esta jóia:

link

#######################  Magic  RewriteRules  #######################

uninitialized_variable_warn off;

##### Rewrite rules for domain.tld => www.domain.tld #####
if ($host ~* ^([^.]+\.[^.]+)$) {
    set $host_without_www $1;
    rewrite ^(.*) $scheme://www.$host_without_www$1 permanent;
}

##### Rewrite rules for subdomains with automatic SSL support #####
set $redirect_ssl 'no';
if ($host ~* ^(.*)\.([^.]+\.[^.]+)$) {
    set $ssl_subdomain $1;
    set $host_without_www $1.$2;
}
if (-e $document_root/config/ssl/$ssl_subdomain) {
    set $redirect_ssl 'yes';
}
if ($scheme = 'https') {
    set $redirect_ssl 'no';
}
if ($redirect_ssl = 'yes') {
    rewrite ^(.*) https://$ssl_subdomain.$host_without_www$1 permanent;
}

##### Rewrite rules for automatic authentication #####
if ($host ~* ^([^.]+)\.[^.]+\.[^.]+$) {
    set $auth_subdomain $1;
}
if (-e $document_root/config/auth/$auth_subdomain) {
    rewrite ^(.*)$ /auth$1;
    break;
}

##### Rewrite rules for automatic subdirectory rewriting #####
set $redirect_subdir 'yes';
if ($redirect_subdir_done = 'yes') {
    set $redirect_subdir 'no';
}
if ($host ~* 'www\.[^.]+\.[^.]+$') {
    set $redirect_subdir 'no';
}
if ($host ~* ^([^.]+)\.[^.]+\.[^.]+$) {
    set $subdir_domain '$1';
}
if ($redirect_subdir = 'yes') {
    set $redirect_subdir_done 'yes';
    rewrite ^(.*)$  /$subdir_domain$1 break;
}

####################  End Of Magic RewriteRule  ####################
    
por 27.12.2012 / 06:28