我已经成功安装了使用PHP-FPM的nginx但不幸的是我在从不同目录加载我的php文件时遇到了一些麻烦。我的所有文件都位于/ var / www / html的子目录中(例如,所有css文件都位于/ var / www / html / css中,所有javascript文件都位于/ var / www / html / js,所有php -files位于/ var / www / html / php)。 据此,我将我的php文件的根目录路径更改为/ var / www / html / php:
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.php home.php;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /var/www/html/php;
include snippets/fastcgi-php.conf;
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
不幸的是,当使用我的网络浏览器访问我的nginx服务器时,我收到错误403(禁止)。直接访问我的index.php(http://192.168.2.109/index.php)时,一切正常。所以,我认为这意味着文件权限是正确的,但nginx无法索引/ var / www / html / php目录。此外,/ var / log / nginx / error.log包括:
2017/05/28 07:49:56 [错误] 13678#13678:* 1目录索引“/ var / www / html /”被禁止,客户端:192.168.2.101,服务器:_,请求:“ GET / HTTP / 1.1“,主持人:”192.168.2.109“
我已尝试启用 autoindex 并在“location~.php $ {”部分添加 index 说明符,但未成功。结果是一样的:(
有谁知道我在做错了什么/在这里失踪了? Nginx 403 error: directory index of [folder] is forbidden中的所有建议都无法解决我的问题。
答案 0 :(得分:0)
问题很简单:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /var/www/html/php;
include snippets/fastcgi-php.conf;
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
我可以阅读,当您请求* .php文件时,您更改了根地址。但是,当您请求“默认索引”时,您正在请求/,而不是.php
您需要一个新位置,以便在/ request上更改根路径。试着用这个:
location = / {
root /var/www/html/php;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
也许,在这个配置中,你需要放一个“rewrite index.php;”,但我不知道,因为我从来没有测试过这个配置。
不要认为我的新位置订单(位置= /)与您的位置(位置/)相同,因为我的订单带有等号,仅在您没有任何参数请求“主”位置时才适用。