nginx配置:别名和404错误

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

我的实际问题是,我想让我的“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;
    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正确地为我的别名服务。