3

私は通常 apache を使用しており、NGINX を試してみたいと思っています。

ubuntu dev マシンにインストールし、いくつかの異なるフレームワークとサイトをセットアップして開発中です (codeigniter、symfony、laravel など)。

私が得ている問題は、.php仕事で終わるパスだけだということです。index.php/welcome/indexindex.phpをロードする代わりに404秒だけ試してみると。

cgi.fix_pathinfo を 1 と 0 に設定してみました。

これが私の現在の(多くの試行済みの)サイト構成です。

server {
listen   80; ## listen for ipv4; this line is default and implied
#listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

root /my/path;
index index.php index.html;

# Make site accessible from http://localhost/
server_name localhost;

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
#   root /usr/share/nginx/www;
#}

location ~ \.php$ {
    try_files $uri =404;

    # Fix for server variables that behave differently under nginx/php-fpm than typically expected
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # Include the standard fastcgi_params file included with nginx
    include fastcgi_params;
    fastcgi_param  PATH_INFO        $fastcgi_path_info;
    fastcgi_index index.php;
    # Override the SCRIPT_FILENAME variable set by fastcgi_params
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    # Pass to upstream PHP-FPM; This must match whatever you name your upstream connection
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}


location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
    deny all;
}
}
4

3 に答える 3

2

次のnginx構成構造を使用したいと思います。それはよりきれいです:

location / {
  try_files $uri $uri/ @phpsite;
}

location @phpsite {
  include fastcgi_params;
  ... other fast_cgi directives
}

もう少し複雑なセットアップは、人気のあるsilexプロジェクト(http://silex.sensiolabs.org/doc/web_servers.html#nginx )にあります。

元の設定ファイルに2つの問題があります。

location ~ \.php$ {
    try_files $uri =404;
    ...
}
  1. 正規表現では、「$」は文字列の最後で一致することを意味します。したがって、prodigitalsonのコメントで述べられているように失敗しました。
  2. 上記のfast_cgiロケーションブロック内のtry_filesディレクティブは、そのロケーションブロックがphpのみで処理されることになっているため、存在しないはずです。その行を削除する方がクリーンです。
于 2013-03-10T16:49:01.687 に答える
0

あなたが見逃しているのは次のようなルールだと思います

location / {
    try_files $uri $uri/ /index.php?$args;
}

パスが存在しない場合は、そのindex.phpURLを呼び出そうとします。

あるいは、他のことを試すのは無意味だと知っているなら、

location / {
    try_files /index.php?$args;
}

また

location ~ /index.php {
    try_files /index.php?$args;
}
于 2013-03-09T22:53:00.423 に答える
0

これは私のために働く...

location ~ ^(.*?\.php)($|/.+) {
    try_files $1 =404;

    ... fastcgi conf...
}
于 2016-05-16T20:38:45.680 に答える