Nginx gives a 403 error for CSS/JS files
-
30-09-2019 - |
Question
I have setup nginx 0.7.67 on Ubuntu10.10 along with php-cli . I'm trying to get my front-controller based PHP framework to run, but all pages except index.php give a 403 error.
Ex :
- http://mysite.com/styles/style.css - 403 Forbidden
- http://mysite.com/scripts/script.css - 403 Forbidden
- http://mysite.com/index.php - Works
My /etc/nginx/sites-enabled/default is as follows
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;
}
}
Any suggestions on how to fix the above?
PS: This is the entry from the error log
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"
Solution
Had the same problem. Fixed it by simply setting the right permissions on my CSS and JS files and folders. Be careful about setting permissions! But for a file to be readable on the web, it has to be readable by the user running the server process.
chmod -R +rx css
chmod -R +rx js
Gives read and execute permissions. The -R
is for recursive. Only do this for files you want readable by the world!
OTHER TIPS
Alt solution: change the run user by editing the nginx.conf (e.g., /usr/local/nginx/conf/nginx.conf) to the owner of those files:
user myuser mygroup;
Try this in your location line:
location ~* ^.+\.(js|css|png|jpg|jpeg|gif|ico|html)$ {
or
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|html)$ {
Make sure that every top level directory has permission levels AND the index.html. Most of the times you will just copy the file you want to see in /www and rename it index.html make sure the new index.html has the right permissions (to be sure 777 just for testing ofcourse).
i need to write alterative solution to this problem. I migrate wordpress into plesk server and I get this error with css and js scripts. Nginx configuration produce a bug getting js and css files. If a wordpress error loading CSS and JS scripts (forbidden), it may be due to the configuration of nginx and apache.
UNLOCK the box of configuration nginx and apache:
Intelligent processing of static files -> DONT CHECKED
This solves my problem. I hope others too pymessoft.com
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;
}
}
you have to close server{} before defining the location.
or change the owner of the files to www-data or apache if you don't have access to the files.