Nginx config: duas aplicações sob o mesmo domínio [duplicado]

2

Eu tenho dois aplicativos: frontend HTML + JS e backend PHP. Eu gostaria de configurar o Nginx para que ambos sejam exibidos no mesmo domínio. As solicitações para o back-end são feitas usando URLs que começam com /api .

Minha tentativa foi assim:

server {
    root /path/to/frontend;
    index index.html;
    server_name example.com;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api {
        alias /path/to/backend;
        index index.php;
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

No entanto, para todas as solicitações para o back-end, acabo com um script 404: principal desconhecido.

Existe uma maneira de conseguir o que estou tentando fazer aqui? Como?

    
por mingos 07.11.2014 / 16:11

1 resposta

2

Você cometeu o erro habitual de as pessoas não entenderem como o nginx funciona. Lembre-se do seguinte:

O nginx sempre atende a um pedido com um único % somentelocation .

Sugiro que você leia (novamente) o seguinte: Como o nginx processa uma solicitação

Agora, olhando para sua configuração, as solicitações de back-end precisam ser veiculadas por dois locais:

  1. location /api
  2. location ~\.php$

Seguindo a documentação location , o primeiro é chamado de prefixo localização, enquanto o segundo é uma expressão regular (regex) um. O nginx irá verificar ambos, mas no final apenas selecionará um, que no seu caso é o regex.

Agora, ao processá-lo, o nginx encaminhará uma solicitação para /path/to/frontend/<yourFile>.php para o PHP, construindo o caminho a partir de root /path/to/frontend , já que é o único definido. O back-end falha, incapaz de encontrar o arquivo especificado.

Você pode tentar o seguinte:

location /api {
    alias /path/to/backend;
    index index.php;
    try_files $uri $uri/ /index.php;

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;

        # Useless? Request always ending up with '.php' here...
        fastcgi_index index.php;

        include fastcgi_params;

        # Try to secure this block, which might lead to arbitrary code execution.
    }
}

Quanto à falta de segurança, eu organizei uma palestra sobre nginx e PHP-FPM no nginx.conf 2014 final de outubro. Os slides estão disponíveis: link . Vídeo em breve disponível.

    
por 07.11.2014 / 19:47