我有一个像这样的文件夹结构:
/usr/share/nginx/idevaffiliate/install/templates/bootstrap/css/bootstrap.css
尝试通过网络服务器访问此文件和其他静态文件时,我收到了403条回复:
[30/Aug/2016:04:56:33 +0100] "GET /idevaffiliate/install/templates/bootstrap/css/bootstrap.css HTTP/1.1" 403 46 "http://example.com/idevaffiliate/install/install.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
这是我的nginx位置指令:
location ~ ^/idevaffiliate/(images|javascript|js|css|flash|media|static)/ {
rewrite ^ https://$server_name$request_uri? permanent;
root /usr/share/nginx/;
expires 30d;
}
location ^~ /idevaffiliate {
root /usr/share/nginx/;
index index.html index.htm index.php;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include /etc/nginx/fastcgi.conf;
}
所有文件和子目录的文件夹权限:
[root@BTCUKSW001 nginx]# ls -la
total 20
drwxr-xr-x 12 nginx nginx 4096 Feb 3 2014 idevaffiliate
摘自/etc/php-fpm.d/www.conf:
[www]
listen = /var/run/php5-fpm.sock
listen.allowed_clients = 127.0.0.1
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
user = nginx
group = nginx
我不知道为什么我有这个“访问被拒绝”的问题。谁能告诉我为什么以及如何解决?
答案 0 :(得分:3)
您在问题中显示两个位置区块。第一个看起来像一个重定向循环,但永远不会输入,因为第二个位置块使用^~
修饰符覆盖它。有关位置块处理,请参阅this document。
您收到静态文件的403响应的原因是因为您要求php5-fpm
为其提供服务。 fastcgi_pass
块中的location ^~ /idevaffiliate
指令会将所有请求发送到php5-fpm
,只需要查看PHP脚本。
有许多模式可用,但常见的解决方案是使用嵌套位置仅提供PHP文件:
location ^~ /idevaffiliate {
root /usr/share/nginx;
index index.html index.htm index.php;
...
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include /etc/nginx/fastcgi.conf;
}
}