nginx configuratio:别名和404错误

时间:2015-07-27 11:16:47

标签: nginx location alias

我的实际问题是我想将“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是无法服务的。

1 个答案:

答案 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

继续这样做,但每次都要添加/ *,直到出现错误。

希望一切都适合你!!