当前位置: 首页 > 知识库问答 >
问题:

Nginx上的Laravel:访问应用程序的“public/”会导致“权限被拒绝”,即使它与Nginx拥有相同的用户

欧阳杰
2023-03-14

我一直在尝试使用CentOS 7在Nginx上部署全新的Laravel 6应用程序,但我在错误日志中收到以下错误消息。

*13 stat() "/ROOT_OF_APP/public/" failed (13: Permission denied), 
client: 127.0.0.1, server: HOST_NAME, request: "GET / HTTP/1.1", host: "HOST_NAME"

*13 stat() "/ROOT_OF_APP/public/" failed (13: Permission denied), 
client: 127.0.0.1, server: HOST_NAME, request: "GET / HTTP/1.1", host: "HOST_NAME"

*13 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, 
client: 127.0.0.1, server: HOST_NAME, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "HOST_NAME"

第一行显示“/ROOT\u OF_APP/public/”失败(13:权限被拒绝)

因此,我运行了sudo chown-R nignx:nginx/ROOT\u OF_APP/public/sudo chmod-R 775/ROOT\u OF_APP/,并确保nginx和PHP-FPM的用户和组都是nginx(这将在下面解释)。

问题是:为什么即使所有者/用户是nginx,nginx也不能访问“public”?

(第三条消息(主脚本未知)也困扰着我,但我不知道这是否与权限问题有关)

/etc/php fpm中。d/www.conf,您可以看到这些行。

user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

/etc/nginx/nginx.conf中,您可以看到一行。

user nginx;

(我想指出的是,操作系统是CentOS 7,因此它不像Ubuntu那样有www-datauser/group。)

如果我运行ps aux | grep php fpm。。。

user     24394  0.0  0.0 112708   988 pts/1    S+   14:28   0:00 grep --color=auto php-fpm
root     26979  0.0  0.0 306464 10520 ?        Ss   13:57   0:00 php-fpm: master process (/etc/php-fpm.conf)
nginx    26985  0.0  0.0 318712  5804 ?        S    13:57   0:00 php-fpm: pool www
nginx    26986  0.0  0.0 318712  5796 ?        S    13:57   0:00 php-fpm: pool www
nginx    26987  0.0  0.0 318712  5800 ?        S    13:57   0:00 php-fpm: pool www
nginx    26988  0.0  0.0 318712  5800 ?        S    13:57   0:00 php-fpm: pool www
nginx    26989  0.0  0.0 318712  5804 ?        S    13:57   0:00 php-fpm: pool www

如果我运行ps aux|grep nginx...

root      2990  0.0  0.0 122420  5608 ?        Ss   14:01   0:00 nginx: master process /usr/sbin/nginx
nginx    26985  0.0  0.0 318712  5804 ?        S    13:57   0:00 php-fpm: pool www
...
# The 2nd line is repeated several times
...
nginx    31299  0.0  0.0 134672  4212 ?        S    14:15   0:00 nginx: worker process
# This "nginx: worker process" is repeated several times too

我完全不知所措。。。如有任何建议,将不胜感激。

附言

下面是配置文件的外观。

server {
        listen 80;
        listen [::]:80 ipv6only=on;

        access_log /var/log/nginx/MY-APP-access.log;
        error_log /var/log/nginx/MY-APP-error.log;

        root /ROOT_OF_APP/public;
        index index.php index.html index.htm;

        server_name HOST_NAME;

          location / {
            try_files $uri $uri/ /index.php?$args;
          }

          location ~* \.php$ {
              include /etc/nginx/fastcgi_params;
              fastcgi_pass 127.0.0.1:9000;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              fastcgi_index index.php;
        }

        location = /favicon.ico { log_not_found off; access_log off; }
          location = /robots.txt  { log_not_found off; access_log off; }
}

sudo nginx-t显示语法是ok的。

另外,“SELinux强制执行”状态已更改为“允许”,因此SELinux不应成为此问题的原因。

共有2个答案

隆功
2023-03-14

这听起来可能是一个SELinux问题,特别是正如其他人所指出的,因为您位于非默认目录中。

SELinux在执行吗?(运行“getenforce”)

如果这是“强制执行”,我敢打赌这就是问题所在。

如果是这样,您可以暂时禁用它,重新启动服务,查看问题是否消失(运行“set0”)

然后,假设您希望SELinux打开,(至少强烈建议)调查“ussearch-m AVC”的输出。回这里寻求帮助。

濮献
2023-03-14

当我试图将我的项目放到/var/www之外时,这种情况就发生了

我建议把你的项目放在 /var/www/project_folder

然后根据需要更改nginx配置文件。

它会起作用的。

 类似资料:
  • 问题内容: 我正在使用Nginx和Gunicorn配置Django项目。 在Nginx服务器中访问端口时,我的错误日志文件中出现以下错误; 2014/05/30 11:59:42 [crit] 4075#0:* 6 connect()到127.0.0.1:8001在连接到上游时失败(13:权限被拒绝),客户端:127.0.0.1,服务器:localhost,请求:“ GET / HTTP / 1.

  • 问题内容: 我有两个Docker容器:Nginx和App。 该应用程序容器扩展了PHP-fpm,并具有我的Laravel代码。 在我的工作中: 在我的Nginx Dockerfile中,我正在做: 在我的App Dockerfile中,我正在做: 成功运行docker-compose up后,尝试localhost时出现以下错误 流或文件“ /var/www/storage/logs/larave

  • 问题内容: 我不断收到此错误。 我正在使用mySQL Workbench,从中发现根的架构特权为空。根本没有特权。 我在使用服务器的平台上遇到了麻烦,这是一个突然的问题。 root@127.0.0.1 显然具有很多访问权限,但我已以此身份登录,但无论如何它只是分配给localhost-本地主机没有特权。 我做了一些类似,,等等的事情,但是从那儿或互联网上都没有找到成功。 如何获得根对其访问的权限?

  • 我正在使用Spring Cloud oauth-2和Spring Cloud Security构建用户身份验证系统。我想有许多可以分配给用户组的权限。权限存储为枚举常量,如下所示: 我已经将身份验证服务器设置为向内存中的客户端发出JWT令牌。(我认为)一切都很好。 下面是我的用户详细信息实现 就像我说的,身份验证服务器正在颁发令牌。我面临的问题是授权。以下是我的资源服务器超文本传输协议配置: 成功

  • Docker安装在AWS EC2 Ubuntu 16.04实例上,如下所示: 引发权限被拒绝错误: 尝试连接到处的Docker守护程序套接字时,权限被拒绝unix:///var/run/docker.sock: 收到http:///var/run/docker.sock/v1.39/info: 拨号unix/var/run/docker.sock:connect:权限被拒绝 显示: uname-a

  • 注意:最后一个###.##.###.####是运行代码的google compute VM的外部IP。我相信前两个IP是我的家IP。 在连接到上游:[nginx]时,我尝试了:上的