Vue3 项目 Nginx 配置问题

错误信息:

2023/01/10 17:00:44 [crit] 3002719#0: *20444 stat() "/home/fanbook-mgr/fanbook-mgr.web/dist/index.html" failed (13: Permission denied), client: 60.182.104.237, server: fanbook-mgr.starlight.work, request: "GET / HTTP/2.0", host: "fanbook-mgr.starlight.work2023/01/10 17:00:44 [error] 3002719#0: *20444 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 60.182.104.237, server: fanbook-mgr.starlight.work, request: "GET / HTTP/2.0", host: "fanbook-mgr.starlight.work

站点配置:

server {
  listen  80;
  listen 443 ssl http2;
  server_name fanbook-mgr.starlight.work;
  root /home/fanbook-mgr/fanbook-mgr.web/dist;
  #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
  #error_page 404/404.html;
  #HTTP_TO_HTTPS_START
  if ($server_port !~ 443){
    rewrite ^(/.*)$ https://$host$1 permanent;
  }
  #HTTP_TO_HTTPS_END
  ssl_certificate /www/server/panel/vhost/cert/fanbook-mgr.starlight.work/fullchain.pem;
  ssl_certificate_key /www/server/panel/vhost/cert/fanbook-mgr.starlight.work/privkey.pem;
  ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  add_header Strict-Transport-Security "max-age=31536000";
  error_page 497  https://$host$request_uri;
  #SSL-END
  location / {
    error_page 403 /403;
    error_page 404 /404;
    error_page 500 /500;
    index index.html;
    try_files $uri $uri/ /index.html;
  }
  access_log  /www/wwwlogs/fanbook-mgr.starlight.work.log;
  error_log  /www/wwwlogs/fanbook-mgr.starlight.work.error.log;
}

运行用户是 www ,与 fanbook-mgr 用户属于同一个组 web ,权限是 750 ,照道理应该有权限访问?

最终的问题在于全局配置。

全局配置有写:

user www www;

我学习了一下,意思是以 www 用户和 www 用户组运行,而不是它的主用户组 web

改为:

user www web;

后正常。


感谢@m0_54204465 回答

这个错误信息表明 Nginx 无法访问 /home/fanbook-mgr/fanbook-mgr.web/dist/index.html 文件。这可能是因为文件权限问题导致的。

你已经提到运行用户是 www ,而且它和 fanbook-mgr 用户属于同一组 web,并且权限为 750。这确实是有权限访问的。

然而,有可能存在文件或目录的所有者或所属组不是这两个用户所在的组,从而导致 Nginx 无法访问文件。可以通过使用命令 ls -l 来查看文件的详细信息,以确定所有者和所属组。

如果权限设置正确,那么其它可能的原因是:

如果文件不存在,那么将会出现这种错误。路径有误,检查一下路径是否正确
Nginx 的运行用户无法访问文件所在目录,可以检查父目录权限
我建议你检查一下文件路径和权限,