Configuração do Nginx para localizar index.html

1

Estou tentando realizar o seguinte comportamento:

Na estrutura de arquivos

/var/html/jpmelos.com/
- index.html
- public/
  - index.html

Se eu alcançar http://jpmelos.com , desejo obter public/index.html se o arquivo existir e, se ele não existir, quero solicitar ao usuário nome de usuário e senha e obter index.html . O mesmo comportamento se alcançar http://jpmelos.com/index.html . A pasta pública é verificada e correspondida primeiro, depois protegida com senha.

Eu incluo este arquivo de configuração no bloco http :

server {
    listen 80;
    server_name jpmelos.com;

    location / {
        root /var/html/jpmelos.com/public;
        index index.html;
        try_files $request_uri @redirect;
    }

    location @redirect {
        auth_basic on;
        auth_basic_user_file /htpasswd/jpmelos;

        root /var/html/jpmelos.com;
        index index.html;
    }
}

O comportamento resultante quando alcanço http://jpmelos.com/index.html está correto e recebo o arquivo public/index.html . Mas quando eu alcanço http://jpmelos.com , ele retorna um 403 Forbidden . Estou executando o Ubuntu 15.10, Nginx 1.11.1.

Isso é confuso porque, como o arquivo pode ser retornado de http://jpmelos.com/index.html , sabemos que isso não é proibido. E a configuração define corretamente index index.html e o arquivo está lá.

Então, o que estou perdendo?

Além disso, uma pergunta secundária: se eu alterar root /var/html/jpmelos.com/public; para alias /var/html/jpmelos.com/public; , ele não corresponderá mais e retornará 404 Not Found . Por que isso?

    
por jpmelos 14.07.2016 / 16:25

1 resposta

1

Corrigi minha configuração e consegui o que queria:

server {
    listen 80; 
    server_name jpmelos.com;
    root /var/html/jpmelos.com/public;

    index index.html;
    autoindex off;

    location / { 
        try_files $uri $uri/ @redirect;
    }   

    location @redirect {
        auth_basic on; 
        auth_basic_user_file /htpasswd/jpmelos;

        root /var/html/jpmelos.com;
    }
}

Mova a primeira diretiva raiz para o bloco server , só porque é uma boa prática. Em seguida, mova a diretiva index também, para evitar a repetição. Em seguida, altere a diretiva try_files . Isso tentará $uri file, depois o $uri diretório usando a diretiva index e, em seguida, redirecionando.

Ao redirecionar, defina as configurações de autenticação e atualize a raiz para o novo valor, apenas para o bloco location .

    
por 14.07.2016 / 19:50

Tags