1

我想在 nginx 服务器上部署,但是只为 Apache 和 IIS 提供了配置。过去我已经成功地为各种应用程序编写了几个 nginx 服务器配置,但我正在努力解决这个问题。

已经在 nginx 和锂论坛上问过这个问题,没有运气。

这是我迄今为止所做的最好的。

root /var/servers/my_app/app/webroot;

location / {
    index index.php;
    try_files $uri $uri/ index.php;
}
location ~ \.php {
            fastcgi_pass unix:/tmp/php.socket;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME /var/servers/my_app/$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
    }

问题出在 / (根页面)上,每个链接都在 index.php 前面添加,例如,而不是

www.example.com/something

我明白了

www.example.com/index.php/something

不确定这是否与 nginx 配置相关,或者更确切地说,锂在无法检测到 Apache/IIS 环境时会这样做。无论哪种方式,我都无法解决。

另一件事是,当我访问“www.example.com/test”(通过直接 URL 输入)时,页面会正确呈现,但是“www.example.com/test/”(带有斜杠)和“www.example. com/test/anything_here" 已损坏 - 所有链接都附加到当前 URL,例如按下相同的链接会创建以下内容:

www.example.com/test/
www.example.com/test/test
www.example.com/test/test/test

编辑:更新的配置 (很抱歉延迟编辑,但我仍然卡住,最近重新开始解决这个问题)

    root /var/server/my_app/app/webroot/;

    index index.php index.html;
    try_files $uri $uri/ /index.php?$args;

    location ~ \.php {
            fastcgi_pass unix:/tmp/php.socket;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME /var/servers/my_app/$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
    }

    location ~/\.ht {
            deny all;
    }

}

正如我在评论中提到的,这会导致所有链接都包含 index.php,它看起来像:

www.example.com/index.php/something
www.example.com/index.php/stylesheet.css
4

2 回答 2

3

我认为你的问题是try_files不应该在一个location块内。

尝试此处显示的配置:http: //li3.me/docs/manual/configuration/servers/nginx.wiki

我帮助定义了它,并一直在本地和生产中使用它。它不应该导致您报告的任何问题。

复制如下:

server {
        listen   IP_ADDRESS_HERE:80;
        server_name DOMAIN.COM;

        root   /var/www/DOMAIN.COM/webroot/;
        access_log /var/log/DOMAIN.com/access.log;
        error_log /var/log/DOMAIN.com/error.log warn;

        index  index.php index.html;

        try_files $uri $uri/ /index.php?$args;

        location ~ \.php$
        {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
        location ~ /\.ht {
                deny all;
        }
}
于 2012-06-22T14:35:39.720 回答
1

我怀疑问题是锂依赖于一些环境变量,在这种情况下 - 链接生成,它使用 PHP_SELF,这恰好是不正确的。

解决方案:

fastcgi_param PATH_INFO $fastcgi_path_info;

而不是以前不正确的:

fastcgi_param PATH_INFO $fastcgi_script_name;

所以最终配置:

root /var/server/my_app/app/webroot/;

index index.php index.html;
try_files $uri $uri/ /index.php?$args;

location ~ \.php {
        fastcgi_pass unix:/tmp/php.socket;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /var/servers/my_app$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
}

location ~/\.ht {
        deny all;
}

感谢 rmarscher 和 mehlah @ lithum 论坛。

于 2012-07-27T12:22:06.563 回答