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 错误的主要内容,如果未能解决你的问题,请参考以下文章

请教关于nginx配置404错误页面

NGINX 配置404错误页面转向

tomcat+nginx配置项目后访问404错误

Nginx 下配置Laravel 错误404

修改nginx配置文件访问后链接网页跳转nginx404错误页面

NGINX + Vue HTML 模式配置给出 404