我的实际问题是我想将“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)第二次尝试知道会发生什么:
如果我更改“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错误发送到浏览器而没有理由我能想到,而当specyfiyng错误的路径时,它马上告诉我。 :/ *
修改
好吧,我找到了解决方案。基本上它完全适用于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是无法服务的。
答案 0 :(得分:0)
问题是你没有关于如何处理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
继续这样做,但每次都要添加/ *,直到出现错误。
希望一切都适合你!!