我使用nginx在我的服务器上设置了域名。到目前为止我的主页工作得很好。但现在我想添加一些位置以便以后测试编程。我的计划是调用不同的项目,如mydomain.com/php/myprogramm.php
所以我在 /var/www/mydomain.com/php 中添加了一些文件夹(我的索引位于 /var/www/mydomain.com / HTML )
输入 www.mydomain.com/php / 会导致 403错误, mydomain.com/php/myprogramm.php 会导致< strong>找不到文件 ...
这是我的nginx文件:
server {
listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;
# Make site accessible from http://localhost/
server_name mydomain.com www.mydomain.com;
location / {
root /var/www/mydomain.com/html;
index index.html index.htm;
}
location /php/ {
root /var/www/mydomain.com;
}
location /js/ {
root /var/www/mydomain.com;
}
location /node/ {
root /var/www/mydomain.com;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
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;
}
}
当然,当我设置我的域名时,我还设置了 sudo chown -R www-data:www-data /var/www/mydomain.com/html 和 sudo chmod 755 /无功/网络
某些想法有人吗? :/答案 0 :(得分:0)
第一条黄金法则是:
nginx始终只接受来自单 location
的请求。(重新)阅读http://nginx.org/en/docs/http/request_processing.html。
根据您的配置:
(www.)mydomain.com/php/<whatever>
的{{1}}来自.php
的{{1}}将向location /php/
提供/var/www/mydomain.com/php/<whatever>
提交的文件请求(www.)mydomain.com/<whatever>.php
location ~\.php$
<default root ('html' by default)>/<whatever>.php
将向.php
提出请求
醇>
这里的第一个问题是您没有从您认为自己的位置提供/var/www/mydomain.com/php/
个文件。从location
文档中了解如何选择服务请求的位置块。
您会注意到“找不到文件”&#39;错误不是nginx错误,而是由PHP生成的消息。这有助于了解问题是来自(前端还是后端)。
现在关于403:似乎nginx无法访问应该从中提供内容的位置。检查location
(目录+内容)权限。
您的配置看起来不够理想。
root /var/www/mydomain.com;
location / {
root /var/www/mydomain.com/html;
index index.html index.htm;
}
location /php/ {
location ~ \.php$ {
# Useless without use of $fastcgi_script_name and $fastcgi_path_info
# Moreover, requests ending up here always end with .php...
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
# You seem to have copy-pasted this section without understanding it.
# Good understanding of what happens here is mandatory for security.
}
}
块中使用相同的根,为什么不将它移动一层以上,以便它成为默认值(您可以在需要的特定位置覆盖它?)location
文档)。原因是正则表达式位置对顺序敏感,这对维护很不利。前缀位置不是因为只选择与请求URI最长的匹配。以下是部分配置的推荐更新版本:
{{1}}
我建议您阅读有关fastcgi_split_path_info
,$fastcgi_script_name
和$fastcgi_path_info
的文档。
答案 1 :(得分:0)
对于我现在的测试,我很简单地解决了这个问题。
这就是我所做的一切。
但是我会在以后的问题上记住你的建议。
感谢您的帮助,我很感激。