39

メイン Web サーバーとして Nginx をセットアップし、その背後に 2 つの Mochiweb ベースのサーバーを配置しています。特定のリクエストは、これら 2 つのサーバーにリバース プロキシされます。現在、nginx を使用して phpmyadmin (/var/www/nginx-default/phpMyAdmin にあります) にアクセスしたいのですが、Error 404 not found と言い続けます。ここで明らかな何かが欠けていますか?

server {
    ############### General Settings ####################
    listen   80;
    server_name  localhost;
    access_log  /home/me/dev/wwwaccess.log;

    ############## Document Root #######################    
    location / {
        root   /home/me/dev;
        index  index.html index.htm index.php;
    }

    ############## PHPMyAdmin #######################   
    location /phpmyadmin {
        root   /var/www/nginx-default/phpMyAdmin;
        index  index.html index.htm index.php;
    }

    ############## Proxy Settings for FastCGI Server #####
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/me/dev$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }


    ############# Proxy Settings for Mochi1 ###############
    location /mochi1 {
            proxy_pass         http://127.0.0.1:8000;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         3600;

            proxy_buffering off;
        }

    ############# Proxy Settings for Mochi2 ###############
    location /mochi2 {
            proxy_pass         http://127.0.0.1:8001;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         3600;

            proxy_buffering off;
        }

    ############# Error redirection pages ################
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /home/me/dev;
    }
}
4

5 に答える 5

83

ここでの問題は、location次の順序で「最良の」ディレクティブのみが取得されることです。

location =  <path>  (longest match wins)
location ^~ <path>  (longest match wins)
location ~  <path>  (first defined match wins)
location    <path>  (longest match wins)

このルールセットを使用すると、ディレクティブは正規表現 " "ディレクティブ/phpmyadmin locationによって打ち負かされるため、前者は完全に無視されます。さらに、php fastcgi ディレクティブはディレクトリに組み込まれているため、phpMyAdmin にはまったくアクセスできません。書き換えを使用して、phpMyAdmin スクリプトの正しいルートを取得できます。.php$location/home/me/dev

location ~ \.php$ {
    set $php_root /home/me/dev;
    if ($request_uri ~* /phpmyadmin) {
        set $php_root /var/www/nginx-default/phpMyAdmin;
    }

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $php_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
}
于 2009-07-08T16:44:13.317 に答える
6

「ルート」を直接設定します。ディレクティブが少なくなり、より多くの変数を設定するために必要な計算が少なくなります。現在受け入れられている回答で正しく設定されない他のもの (fastcgi_param DOCUMENT_ROOT など) もあります。ただし、このメソッドはすべてを処理します。

location ~ \.php$ {
    if ($request_uri ~* /phpmyadmin) {
        root /var/www/nginx-default/phpMyAdmin;
    }

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    include /etc/nginx/fastcgi_params;
}
于 2012-09-11T15:07:55.033 に答える
4

私はこれに何時間も苦労しましたが、上記で説明した解決策はどれも私の場合には機能しませんでした (index.php、引数付きの index.php、および index.php 以外の他の php スクリプトを実行する必要があったため) が、最終的に機能する構成に到達しました次のように:

    location /php-app {
    passenger_enabled off;
    alias /path/to/php-app/$1;
    index index.php index.html;
    try_files $uri $uri/ @rewrite;
   }

   location @rewrite {
    rewrite ^/php-app(.*)$ /index.php?q=$1 last;
   }

location ~ \.php$ {
    alias /path/to/php-app/$1;
    rewrite ^/php-app(.*)$ $1 last;
    passenger_enabled off;
    fastcgi_pass unix:/tmp/php-fpm.socket;
    fastcgi_index index.php;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /path/to/php-app$fastcgi_script_name;
    fastcgi_intercept_errors on;
    }
于 2013-05-19T17:19:17.393 に答える
0

おそらくindex.htmlを検索しますか?に変更してみてください

location /phpmyadmin {
    root   /var/www/nginx-default/phpMyAdmin;
    index index.php;
}

ケース関連の問題を回避するために、以下のセクションを追加します

location /phpMyAdmin {
   rewrite ^/* /phpmyadmin last;
}
于 2009-06-22T12:47:03.950 に答える