Já li todos os tópicos semelhantes, mas não consegui resolver o problema, então postei aqui:
Posso executar um arquivo PHP no Terminal SSH com sucesso:
root@skins:~/public1# php8.3 /root/public1/public/index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="refresh" content="0;url='http://:/requirement#'" />
<title>Redirecting to http://:/requirement#</title>
</head>
<body>
Redirecting to <a href="http://:/requirement#">http://:/requirement#</a>.
</body>
Entretanto, não consigo executar o mesmo arquivo no navegador e recebo o erro Arquivo Nginx não encontrado.
Aqui está meu Nginx site.conf:
server {
listen 80;
listen [::]:80;
server_name some.domain.com;
root /root/public1/public; ##<----THIS IS THE ACTUAL PATH
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
No log de erros do Nginx tenho o seguinte:
2024/12/25 13:55:05 [crit] 74930#74930: *5 stat() "/root/public1/public/" failed (13: Permission denied), client: 88.198.213.143, server: some.domain.com, request: "GET / HTTP/1.1", host: "some.domain.com"
2024/12/25 13:55:05 [crit] 74930#74930: *5 stat() "/root/public1/public/" failed (13: Permission denied), client: 88.198.213.143, server: some.domain.com, request: "GET / HTTP/1.1", host: "some.domain.com"
2024/12/25 13:55:05 [crit] 74930#74930: *5 realpath() "/root/public1/public" failed (13: Permission denied), client: 88.198.213.143, server: some.domain.com, request: "GET / HTTP/1.1", host: "some.domain.com"
2024/12/25 13:55:05 [error] 74930#74930: *5 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 88.198.213.143, server: some.domain.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.3-fpm.sock:", host: "some.domain.com"
2024/12/25 13:55:05 [error] 74930#74930: *5 open() "/root/public1/public/favicon.ico" failed (13: Permission denied), client: 88.198.213.143, server: some.domain.com, request: "GET /favicon.ico HTTP/1.1", host: "some.domain.com", referrer: "http://some.domain.com/"
Alguém pode me ajudar com o que há de errado com minha configuração do Nginx?
Sua configuração nginx define o diretório raiz do site em um diretório que o
nginx
usuário (www-data
) não tem permissão para acessar.Altere o diretório raiz do nginx para um local que
www-data
tenha permissão de acesso.Por exemplo:
É um local comum de diretório raiz.
A mensagem de erro é clara: Nginx não tem permissão para acessar o arquivo. O que faz sentido:
/root
é o diretório home do usuário root – ninguém, exceto o usuário root, deve ter acesso a ele, certamente não um servidor web que esteja exposto a ataques remotos.A solução simples é mover o arquivo para algum lugar onde o usuário que está executando o servidor web Nginx (presumivelmente algum usuário do serviço Ngninx) tenha acesso.
No Ubuntu, por padrão, o Nginx roda sob o
www-data
usuário. Então, você pode criar um diretório para uso do Nginx mais ou menos assim:Isso dará acesso de leitura/gravação ao root, acesso de leitura ao Nginx e nenhum acesso a todos os outros.