nginx 配置:别名和 404 错误
Posted
技术标签:
【中文标题】nginx 配置:别名和 404 错误【英文标题】:nginx configuratio : alias and 404 error 【发布时间】:2015-10-17 13:18:40 【问题描述】:我的实际问题是我想让我的“site.com/blog/index.php”直接指向“/srvX/www/blog/caller/index.php”。虽然使用“root /srv/www/”定向到“/srv/www/blog/index.php”非常简单,但这不是我想要的。我发现了“别名”,它似乎可以做我想做的事。
1)第一次尝试:
server
listen 80;
server_name _;
root /srv/www/blog/pages;
index index.php;
location /blog
alias /srv/www/blog/caller;
那里正在尝试 site.com/blog 给我一个 404 未找到,并且没有任何内容弹出到 /var/log/nginx/error.log
1)第二次尝试知道会发生什么:
如果我更改“别名 /srv/www/blog/caller;”到一条坏路,让我们说“别名/srvX/www/blog/caller;”我实际上在浏览器中得到了相同的行为,但是 我可以在 /var/log/nginx/error.log 中看到:
[error] 7229#0: *1 "/srvX/www/blog/caller/index.php" 未找到(2:没有这样的文件或目录),客户端:192.168.1.200,服务器:192.168.1.221 , 请求:“GET /blog/ HTTP/1.1”,主机:“192.168.1.221”
结论:我不知道那里发生了什么:似乎很清楚 nginx 在我的第一次尝试中获取了文件,但它毫无理由地将 404 错误发送到浏览器,而当指定错误的路径时,它马上告诉我。 :/*
编辑
好吧,我找到了解决方案。基本上它完全可以在 nginx 上运行,问题出在 php-fpm 上,他在 nginx 中使用别名时失去了理智。您需要做的是添加别名位置的子位置:
location ~ \.php$
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
现在可以了。 nginx 在 nginx 的日志中没有任何内容的情况下给出了 404 错误,这一事实是 php-fpm 未能提供服务。
【问题讨论】:
当您尝试site.com/blog/index.php
时会发生什么?或者尝试简单的 html(“Hello world”)!能否请您复制完整的nginx.conf
?
【参考方案1】:
问题是您没有关于如何处理 php 脚本的说明。解决这个问题的方法如下:
将以下代码添加到服务器标签内的 nginx.conf 文件中,或者如果您在 conf.d 文件夹中创建了该代码,请将其添加到该文件中。
location /
try_files $uri $uri/ /index.php?q=$request_uri;
location ~ \.php$
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
这将解决该问题,但也可以在文件中:
/etc/php-fpm.d/www.conf
确保将listen.owner设置为listen.owner = nginx
确保将listen.group 设置为listen.group = nginx
重新启动两个服务,它应该可以工作。
如果不能确保您的文档根目录和该目录下的所有文件都归用户 nginx 和组 nginx 所有。
如果没有,您可以使用以下方法来做到这一点:
chown -R nginx:nginx 文档根目录
并继续这样做,但每次都添加 /* 直到出现错误。
希望你一切顺利!!
【讨论】:
感谢您的回答。我没有给出我所有的配置,但是 php 位已经存在并且已经可以工作了。权限也很好。不是那样,我真的很自信不是那样:因为它已经起作用了。我的实际问题是让 nginx 正确地为我的别名提供服务。以上是关于nginx 配置:别名和 404 错误的主要内容,如果未能解决你的问题,请参考以下文章