Php 使用 Nginx - 403 禁止访问
Php with Nginx - 403 Forbidden
我想 运行 使用 nginx 项目 yii2(高级模板)。我使用 virtualbox 和 vagrant(ubuntu 16.04, php 5.6)
我有以下设置 nginx 文件
//
vhost1.conf
server {
listen *:80;
server_name frontend.test;
client_max_body_size 128m;
root /var/www/frontend/web/;
index index.php;
access_log /var/log/nginx/vhost1.access.log;
error_log /var/log/nginx/vhost1.error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ ^/assets/.*\.php$ {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
try_files $uri =404;
}
location ~* /\. {
deny all;
}
}
我有以下结构项目并获得许可:
vagrant@machine1]-[/var/www]-[git master]
$ ls -la frontend/
total 68
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 ./
drwxrwxr-x 1 vagrant vagrant 4096 Jul 9 16:14 ../
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 assets/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 bootstrap/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 components/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 config/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 controllers/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 data/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 helpers/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 messages/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 models/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 modules/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 runtime/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 validators/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 views/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 web/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 widgets/
nginx 错误日志输出:
2018/07/09 21:42:36 [error] 23865#23865: *1 directory index of "/var/www/frontend/web/" is forbidden, client: 192.168.56.1, server: b2bfrontend.test, request: "GET / HTTP/1.1", host: "b2bfrontend.test"
如果我 运行 b2bfrontend.test 我得到错误 - 403 Forbidden
您的 nginx 服务器很可能 运行 在用户 nginx 或 www-data 下,而您的文件拥有 vagrant:vagran 所有权。检查 nginx 运行 下的用户是什么,并相应地更改文件的所有权。此外,如果您对 php 使用 php-fpm,请检查您的 php-fpm 配置并查看那里定义的用户。
只需修复以下位置:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
至:
location / {
try_files $uri /index.php$is_args$args;
}
原因:它尝试去 $uri/
,即 /var/www/frontend/web/
(因为它存在)并进行目录索引,这似乎是不允许的。
消息已经说了:
directory index of "/var/www/frontend/web/" is forbidden
我取消了这一行的注释,现在可以使用了:
fastcgi_pass unix:/var/run/php5-fpm.sock;
就我而言,我使用的是 Debian 9,因此我对其进行了一些更改:
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
我的完整代码是:
location ~ \.(php|twig)$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
我想 运行 使用 nginx 项目 yii2(高级模板)。我使用 virtualbox 和 vagrant(ubuntu 16.04, php 5.6)
我有以下设置 nginx 文件
//
vhost1.conf
server {
listen *:80;
server_name frontend.test;
client_max_body_size 128m;
root /var/www/frontend/web/;
index index.php;
access_log /var/log/nginx/vhost1.access.log;
error_log /var/log/nginx/vhost1.error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ ^/assets/.*\.php$ {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
try_files $uri =404;
}
location ~* /\. {
deny all;
}
}
我有以下结构项目并获得许可:
vagrant@machine1]-[/var/www]-[git master]
$ ls -la frontend/
total 68
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 ./
drwxrwxr-x 1 vagrant vagrant 4096 Jul 9 16:14 ../
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 assets/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 bootstrap/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 components/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 config/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 controllers/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 data/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 helpers/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 messages/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 models/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 modules/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 runtime/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 validators/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 views/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 web/
drwxrwxr-x 1 vagrant vagrant 4096 Jul 5 14:27 widgets/
nginx 错误日志输出:
2018/07/09 21:42:36 [error] 23865#23865: *1 directory index of "/var/www/frontend/web/" is forbidden, client: 192.168.56.1, server: b2bfrontend.test, request: "GET / HTTP/1.1", host: "b2bfrontend.test"
如果我 运行 b2bfrontend.test 我得到错误 - 403 Forbidden
您的 nginx 服务器很可能 运行 在用户 nginx 或 www-data 下,而您的文件拥有 vagrant:vagran 所有权。检查 nginx 运行 下的用户是什么,并相应地更改文件的所有权。此外,如果您对 php 使用 php-fpm,请检查您的 php-fpm 配置并查看那里定义的用户。
只需修复以下位置:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
至:
location / {
try_files $uri /index.php$is_args$args;
}
原因:它尝试去 $uri/
,即 /var/www/frontend/web/
(因为它存在)并进行目录索引,这似乎是不允许的。
消息已经说了:
directory index of "/var/www/frontend/web/" is forbidden
我取消了这一行的注释,现在可以使用了:
fastcgi_pass unix:/var/run/php5-fpm.sock;
就我而言,我使用的是 Debian 9,因此我对其进行了一些更改:
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
我的完整代码是:
location ~ \.(php|twig)$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}