在nginx上配置锂

时间:2012-06-22 12:11:43

标签: nginx lithium

我想在nginx服务器上部署lithium,但是只有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

2 个答案:

答案 0 :(得分: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;
        }
}

答案 1 :(得分:1)

我怀疑问题是Lithium依赖于某些环境变量,在这种情况下 - 链接生成,它使用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论坛。