403 禁止 nginx/1.4.6 (Ubuntu) - Laravel
403 Forbidden on nginx/1.4.6 (Ubuntu) - Laravel
我不断收到 403 Forbidden
我的设置:
/etc/nginx/sites-available/default
默认
server {
listen 80;
root home/laravel-app/;
index index.php index.html index.htm;
server_name example.com;
location / {
try_files $uri $uri/ /index.html;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
# pass the PHP scripts to FastCGI server listening on the php-fpm socket
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
更新
我遵循了这条指示:here
关于此的任何 hints/suggestions 都将是一个巨大的帮助!
您需要为 php 个文件设置规则(在默认文件中)
# pass the PHP scripts to FastCGI server listening on (...)
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
您在更新中添加的错误表明 nginx 正在尝试从您的 ssc-portal 文件夹中创建目录索引。由于您似乎使用的是基本的 nginx 安装,目录索引在这里失败的唯一原因是 nginx 无法找到列出的索引选项。
在您的服务器块中,您告诉 nginx 在请求目录列表时按顺序尝试以下位置(以尾部斜杠结尾的 URI):index.php、index.html、然后 index.htm.
如果找到 none 个文件,则目录索引请求失败。
我猜你的 index.php 文件放错了地方。您是否将其从 ssc-portal 文件夹中移上去?
您需要为 root
指令指定一个绝对路径。 Nginx 使用编译时使用 --prefix 开关设置的目录。默认情况下,这是 /usr/local/nginx
.
这意味着您的根目录(当前设置为根目录 home/laravel-app/
导致 nginx 在 /usr/local/nginx/home/laravel-app/
查找文件,这可能不是您的文件所在的位置。
如果您将 root
指令设置为绝对路径,例如 /var/www/laravel-app/public/
nginx 将找到这些文件。
同样,您会注意到我在上面的路径中添加了 /public/
。这是因为 Laravel 将它的 index.php
文件存储在那里。如果你只是指向 /laravel-app/
没有索引文件,它会给你一个 403.
我不断收到 403 Forbidden
我的设置:
/etc/nginx/sites-available/default
默认
server {
listen 80;
root home/laravel-app/;
index index.php index.html index.htm;
server_name example.com;
location / {
try_files $uri $uri/ /index.html;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
# pass the PHP scripts to FastCGI server listening on the php-fpm socket
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
更新
我遵循了这条指示:here
关于此的任何 hints/suggestions 都将是一个巨大的帮助!
您需要为 php 个文件设置规则(在默认文件中)
# pass the PHP scripts to FastCGI server listening on (...)
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
您在更新中添加的错误表明 nginx 正在尝试从您的 ssc-portal 文件夹中创建目录索引。由于您似乎使用的是基本的 nginx 安装,目录索引在这里失败的唯一原因是 nginx 无法找到列出的索引选项。
在您的服务器块中,您告诉 nginx 在请求目录列表时按顺序尝试以下位置(以尾部斜杠结尾的 URI):index.php、index.html、然后 index.htm.
如果找到 none 个文件,则目录索引请求失败。
我猜你的 index.php 文件放错了地方。您是否将其从 ssc-portal 文件夹中移上去?
您需要为 root
指令指定一个绝对路径。 Nginx 使用编译时使用 --prefix 开关设置的目录。默认情况下,这是 /usr/local/nginx
.
这意味着您的根目录(当前设置为根目录 home/laravel-app/
导致 nginx 在 /usr/local/nginx/home/laravel-app/
查找文件,这可能不是您的文件所在的位置。
如果您将 root
指令设置为绝对路径,例如 /var/www/laravel-app/public/
nginx 将找到这些文件。
同样,您会注意到我在上面的路径中添加了 /public/
。这是因为 Laravel 将它的 index.php
文件存储在那里。如果你只是指向 /laravel-app/
没有索引文件,它会给你一个 403.