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環境を検出できない場合にそうします。いずれにせよ、私はそれを解決することはできません。

もう1つ、「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

問題は、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フォーラムに感謝します。

于 2012-07-27T12:22:06.563 に答える