nginx配置:别名和404错误
我的实际问题是,我想让我的“site.com/blog/index.php”直接指向“/srvX/www/blog/caller/index.php”。虽然使用“root/srv/www/”直接指向“/srv/www/blog/index.php”非常简单,但这不是我想要的。我发现了“alias”,它似乎满足了我的需求 1) 第一次尝试:nginx配置:别名和404错误,nginx,location,alias,Nginx,Location,Alias,我的实际问题是,我想让我的“site.com/blog/index.php”直接指向“/srvX/www/blog/caller/index.php”。虽然使用“root/srv/www/”直接指向“/srv/www/blog/index.php”非常简单,但这不是我想要的。我发现了“alias”,它似乎满足了我的需求 1) 第一次尝试: server { listen 80; server_name _; root /srv/www/blog/pages; i
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) 第二,尝试了解发生了什么:
如果我将“alias/srv/www/blog/caller;”更改为错误路径,那么可以说“alias/srvX/www/blog/caller;”我实际上在浏览器中得到了相同的行为,但是
我可以在/var/log/nginx/error.log中看到:
[错误]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给出404错误的事实是,nginx的日志中没有任何内容,这是因为php fpm未能提供服务。问题是您没有关于如何处理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 documentroot
继续这样做,但每次都添加/*直到出现错误
希望你一切顺利 问题是您没有关于如何处理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 documentroot
继续这样做,但每次都添加/*直到出现错误
希望你一切顺利 当您尝试
site.com/blog/index.php
时会发生什么?或者试试简单的html(“Hello world”)!请完整复制nginx.conf
?尝试site.com/blog/index.php
时会发生什么?或者试试简单的html(“Hello world”)!您能完整地复制nginx.conf吗?谢谢您的回答。我没有给出我所有的配置,但是php代码已经存在并且可以使用了。此外,权限也被设置为fin。不是那样的,我真的很有信心不是那样的:因为它已经起作用了。我的实际问题是让nginx正确地为我的别名服务。谢谢你的回答。我没有给出我所有的配置,但是php代码已经存在并且可以使用了。此外,权限也被设置为fin。不是那样的,我真的很有信心不是那样的:因为它已经起作用了。我的实际问题是让nginx正确地为我的别名服务。