Tengo una máquina virtual nueva con instalación mínima de CenotOS 7.
Lo que quiero que suceda es configurar Nginx para que sirva archivos estáticos desde un directorio en localhost:80
.
Mi directorio es /home/kenny/projects/kcrypt/dist/
.
Aquí están los contenidos de mi /etc/nginx/nginx.conf
:
# this is set to root in order to rule out
# any permission related issues.
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80 default_server;
listen [::]:80 default_server;
root /home/kenny/projects/kcrypt/dist/;
index index.html;
location / {
}
}
}
cuando ejecuto curl http://localhost
me sale esta respuesta:
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>
He intentado otorgar todo tipo de permisos a cualquier directorio que se me ocurra.
Al final configuré Nginx para que se ejecutara como root.
Ya reinstalé el sistema operativo varias veces y no puedo hacerlo funcionar.
PD
Esto es lo que encontré en/var/log/nginx/error.log
2018/02/27 21:33:19 [error] 15689#0: *1 open() "/home/kenny/projects/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"
2018/02/27 21:33:35 [error] 15690#0: *2 open() "/home/kenny/projects/kcrypt/dist/index.html" failed (13: Permission denied), client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1"
2018/02/27 21:33:38 [error] 15690#0: *3 open() "/home/kenny/projects/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"
No consigo lo que quiere... Le he dado todos los permisos que puedo.
Esto es lo que tengo en el directorio raíz:
[root@vm3 dist]# ll
total 368K
drwxrwxrwx. 2 root root 98 Feb 26 23:16 .
drwxrwxrwx. 6 root root 234 Feb 27 21:26 ..
-rwxrwxrwx. 1 root root 1.2K Feb 26 23:16 favicon.ico
-rwxrwxrwx. 1 root root 1.7K Feb 26 23:16 index.html
-rwxrwxrwx. 1 root root 175K Feb 26 22:53 index.js
-rwxrwxrwx. 1 root root 297 Feb 26 23:16 manifest.json
-rwxrwxrwx. 1 root root 179K Feb 26 22:53 styles.css
PD 2
Intenté poner mis archivos estáticos en /var/www/kcrypt/dist/
, pero sin resultado.
Sigo recibiendo los mismos mensajes de error:
2018/02/27 23:18:11 [error] 16157#0: *1 open() "/var/www/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"
2018/02/27 23:20:58 [error] 16535#0: *1 open() "/var/www/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"
2018/02/27 23:21:30 [error] 16564#0: *1 open() "/var/www/kcrypt/dist/index.html" failed (13: Permission denied), client: ::1, server: , request: "GET / HTTP/1.1", host: "localhost"
Respuesta1
Su sistema tiene SELinux habilitado. De forma predeterminada, SELinux no permite que el servidor web lea archivos en los directorios personales de los usuarios. Los directorios habilitados para el servicio web son /var/www
(donde los paquetes del sistema colocan los archivos) y /srv/www
(donde se espera que los usuarios coloquen los archivos en producción).
Si necesita servir archivos desde directorios de inicio, puede configurar el booleano SELinux httpd_read_user_content
, que permitirá leer estos archivos.
setsebool -P httpd_read_user_content 1
Tenga en cuenta que SELinux nunca permitirá que el servidor webescribiren los directorios de inicio de los usuarios. Si necesita esto, deberá colocar su contenido web en otro lugar yhacer que los directorios apropiados sean escribibles.
También tenga en cuenta que SELinux funcionaademás depermisos regulares de UNIX, por lo que los archivos y directorios relevantes también deben tener la propiedad y los permisos adecuados, cualesquiera que sean para su caso de uso específico.