Nginx 为 CSS/JS 文件提供 403 错误

Posted

技术标签:

【中文标题】Nginx 为 CSS/JS 文件提供 403 错误【英文标题】:Nginx gives a 403 error for CSS/JS files 【发布时间】:2011-04-25 10:21:04 【问题描述】:

我已经在 Ubuntu10.10 上设置了 nginx 0.7.67 和 php-cli 。我正在尝试运行基于前端控制器的 PHP 框架,但除 index.php 之外的所有页面都会出现 403 错误。

例如:

    http://mysite.com/styles/style.css - 403 禁止 http://mysite.com/scripts/script.css - 403 禁止 http://mysite.com/index.php - 工作

我的/etc/nginx/sites-enabled/default如下

server 
    listen          80;
    server_name     mysite.com;

    access_log      /var/log/nginx/access.log;
    error_log       /var/log/nginx/error.log warn;

    index           index.php index.html;
    root        /full/path/to/public_html;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|html)$ 
            expires max;
    


    location ~ index.php 
            include     /etc/nginx/fastcgi_params;
            keepalive_timeout 0;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_pass    127.0.0.1:9000;
    


关于如何解决上述问题的任何建议?

PS:这是错误日志中的条目

2010/10/14 19:56:15 [error] 3284#0: *1 open() "/full/path/to/public_html/styles/style.css" 
failed (13: Permission denied), client: 127.0.0.2, server: quickstart.local, 
request: "GET /styles/style.css HTTP/1.1", host: "mysite"

【问题讨论】:

该死的。这是Linux权限问题。***目录之一没有其他人的“r”权限。问题已解决。 同意。我只是将所有文件的权限更改为 755,并将 www-data 设为文件夹的所有者,一切都开始工作了。 【参考方案1】:

遇到了同样的问题。通过简单地对我的 CSS 和 JS 文件和文件夹设置正确的权限来修复它。设置权限时要小心!但是要在网络上读取文件,它必须由运行服务器进程的用户读取。

chmod -R +rx css
chmod -R +rx js

提供读取和执行权限。 -R 用于递归。仅对您希望全世界可读的文件执行此操作!

【讨论】:

不应该是chmod -R +rx css吗? @MichaelButler 谢谢。但它在 Mac OS X 中不被接受。【参考方案2】:

Alt 解决方案:通过将 nginx.conf(例如,/usr/local/nginx/conf/nginx.conf)编辑为这些文件的所有者来更改运行用户:

user myuser mygroup;

【讨论】:

这为我解决了问题。谢谢!【参考方案3】:

在你的位置线试试这个:

location ~* ^.+\.(js|css|png|jpg|jpeg|gif|ico|html)$ 

location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|html)$ 

【讨论】:

错误日志显示 2010/10/14 19:56:15 [错误] 3284#0: *1 open() "/home/adil/NetBeansProjects-old/CrowdSourcedWeb/applications/csw/web /styles/style.css”失败(13:权限被拒绝),客户端:127.0.0.2,服务器:quickstart.local,请求:“GET /styles/style.css HTTP/1.1”,主机:“quickstart.local” 每当 js 或 css 文件的文件名中有一个额外的点时,我就会遇到这个问题,即:bootstrap.min.css 而不是 bootstrap.css。在我的 nginx 配置中添加了 top 选项并解决了问题【参考方案4】:

确保每个***目录都有权限级别和 index.html。大多数情况下,您只需复制您想在 /www 中查看的文件并将其重命名为 index.html 确保新的 index.html 具有正确的权限(确保 777 仅用于测试当然)。

【讨论】:

777 “只是为了确定”是一个糟糕的主意。 “我有我的钥匙,但我应该让我的前门不上锁,以确保我能重新进入。”【参考方案5】:

我需要为这个问题编写替代解决方案。 我将 wordpress 迁移到 plesk 服务器,但我在 css 和 js 脚本中遇到了这个错误。 Nginx 配置产生获取 js 和 css 文件的错误。 如果加载 CSS 和 JS 脚本时出现 wordpress 错误(禁止), 可能是nginx和apache的配置问题。

解锁配置nginx和apache的框:

静态文件智能处理 -> DONT CHECKED

这解决了我的问题。我也希望其他人 pymessoft.com

【讨论】:

【参考方案6】:
    server 
        listen          80;
        server_name     mysite.com;

        access_log      /var/log/nginx/access.log;
        error_log       /var/log/nginx/error.log warn;

        index           index.php index.html;
        root        /full/path/to/public_html;

 <--- you forgot this one

        location ~* \.(js|css|png|jpg|jpeg|gif|ico|html)$ 
                expires max;
        


        location ~ index.php 
                include     /etc/nginx/fastcgi_params;
                keepalive_timeout 0;
                fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_pass    127.0.0.1:9000;
        

    

您必须在定义位置之前关闭服务器

如果您无权访问这些文件,则将文件的所有者更改为 www-data 或 apache。

【讨论】:

位置标签必须在服务器标签内。 这很奇怪,在我的情况下,它可以在定义位置之前关闭服务器。但我很高兴你找到了解决方案! 马丁。只是为了解释我上面的评论,我之所以这么说是因为 nginx 抱怨。将位置标签保留在服务器标签之外是“非法的”。也许您应该再次查看您的 conf,以准确了解它为什么这样做。很高兴知道。还有,感谢您的帮助。 位置标签应该在服务器标签中

以上是关于Nginx 为 CSS/JS 文件提供 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

403 Forbidden nginx/1.6.2

joomla公共服务器上的css、js文件和图像出现403错误

Nginx 提供静态文件并得到 403 禁止

官方 nginx docker 在提供静态文件时给出 403 Forbidden

django:通过nginx提供静态文件

从 IIS 上的服务堆栈提供 swf 文件时出现 403 错误