Apache reescreve para nginx no host dinâmico

1

Eu fiz algumas leituras e não consegui encontrar uma resposta para minha pergunta, pois ela tem um componente-chave diferente da maioria dos casos. Começa da mesma forma que todas as outras histórias: Eu preciso migrar o .htaccess para o nginx config, o que seria bastante simples se não fosse por isso: o servidor nginx está configurado para usar hosts dinâmicos:

server {
    listen 80;

    server_name ~^(www\.)?(?<sname>.+?).server.company.com$;
    root /var/www/$sname/current/public;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~* \.(gif|png|bmp|ico|flv|swf|exe|html|htm|txt|css|js) {
        add_header        Cache-Control public;
        add_header        Cache-Control must-revalidate;
        expires           7d;
    }

    location ~ \.php$ {

        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
    }

    location ~ /\.ht {
        deny all;
    }
}

Isso é feito para executar vários projetos em um único subdomínio com base em seu diretório. O problema é que um desses projetos (vamos chamá-lo theproject.domain.company.com) é um gigante muito antigo que usa o .htaccess para uma tonelada de redirecionamentos. Eu posso criar os blocos de localização para esses redirecionamentos, mas não tenho idéia de como aplicá-los apenas a esse projeto (não tenho muita experiência com o nginx).

Estou disposto a aceitar qualquer solução possível e o que eu tenho teorizado é:

1) nginx config específico do diretório - como o htaccess, mas não tenho certeza se o nginx é capaz de carregar a configuração em tempo real

2) usando se bloco para o nome do servidor específico, mas não tenho certeza sobre a sintaxe, como eu não consegui encontrar nenhum exemplo de se está sendo usado para o nome do servidor

3) vhost separado para esse subdomínio, isso seria uma solução viável, embora não seja muito agradável para o meu problema, problema é que eu não sei como configurar prioridades como esse subdomínio irá coincidir com o mesmo padrão do vhost dinâmico

Qualquer ajuda, conselho ou links são muito apreciados

    
por Auris 11.08.2017 / 14:59

1 resposta

2

A opção (3) reduz o risco de quebrar todos os subdomínios apenas para corrigir um subdomínio não autorizado. Um bloco server com server_name que é uma correspondência exata sempre terá prioridade sobre uma expressão regular server_name . Consulte este documento para detalhes.

Se você quiser minimizar a configuração duplicada, descarregue as instruções comuns em um arquivo separado e puxe-as usando uma instrução include .

Por exemplo:

server {
    listen 80;
    server_name www.theproject.server.company.com theproject.server.company.com;

    root /var/www/theproject/current/public;

    #
    # ... statements to fix "theproject"
    #

    include /path/to/common/config;
}

server {
    listen 80;
    server_name ~^(www\.)?(?<sname>.+?).server.company.com$;

    root /var/www/$sname/current/public;
    include /path/to/common/config;
}
    
por 11.08.2017 / 15:50