Recebendo um 404 para um arquivo que existe no servidor da web nginx

3

Eu recentemente troquei o servidor web da minha máquina do CentOS 7 do Apache para o nginx. Eu uso software para tirar screenshots em meus computadores e carregá-los para o servidor para visualização pública. Originalmente, funcionava bem no Apache - no entanto, agora estou me deparando com um problema em que o nginx apresentará um erro 404 para algumas das minhas imagens .png no servidor da web.

Eu me referi a esta pergunta com um problema muito semelhante problema, mas eu não conseguia entender a solução no contexto do meu próprio problema.

Eu tenho um trecho do bloco de servidores para o servidor de imagens abaixo.

server {
    listen       80;
    server_name  imageserver.example.com;
    root         /usr/share/nginx/imageserver.example.com/public_html;

    access_log   imageserver.example.com/logs/imageserver.example.com_access.log;
    error_log    imageserver.example.com/logs/imageserver.example.com_error.log crit;

    location / {
        index  index.html index.htm;
    }

    location ~* \.png {
        root       imageserver.example.com/public_html/u/;
        expires    max;
        add_header Pragma public;
        add_header Cache-control "public, must revalidate, proxy-revalidate";
    }
}

Um link de exemplo é esta imagem . Confirmei que o arquivo existe no servidor e tem as seguintes permissões.

$ lsa 7b724394b851299c68b15f1172f158c6.png -rw-rw-r--. 1 jflory nginx 2.4K Nov 3 11:13 7b724394b851299c68b15f1172f158c6.png

Estou muito confuso sobre como consertar isso. Qual poderia ser o problema?

    
por Justin W. Flory 05.11.2015 / 02:48

3 respostas

3

A diretiva root no contêiner location ~* \.png está adicionando um / u / ao final do seu URL, portanto, o servidor está procurando em / u / u / para a imagem.

Esta diretiva root é realmente desnecessária, pois o valor será herdado do valor definido no bloco server .

    
por 06.11.2015 / 08:54
2

O arquivo de imagem está no diretório raiz, não / u /

Remova o / u no seu link e você verá a imagem ser carregada.

    
por 05.11.2015 / 03:41
2

Curious though, wouldn't /u/ be the root directory for the images, since that's where they are all stored? I don't know if I quite understand why this fixed it.

Você precisa fornecer o caminho do diretório public_html apenas. Veja o exemplo a seguir para entender.

Estrutura do arquivo:

.../public_html/

-- /u/myimg.jpg

-- /index.html

Código para mostrar a imagem em index.html :

<img src="/u/myimg.jpg">

Portanto, se você definir .../public_html/u/ como o caminho do servidor de imagem, o servidor tentará localizar .../public_html/u/u/myimg.jpg e, por isso, lançará o erro 404. Espero que isso ajude:)

    
por 23.02.2016 / 21:38