首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx位置指令似乎不起作用。我是不是遗漏了什么?

Nginx位置指令似乎不起作用。我是不是遗漏了什么?
EN

Stack Overflow用户
提问于 2009-06-18 06:32:15
回答 5查看 84.2K关注 0票数 39

我已经将Nginx设置为我的主web服务器,并在其后面有两个基于Mochiweb的服务器。某些请求被反向代理到这两个服务器。现在,我想使用nginx访问phpmyadmin (位于/var/www/nginx-default/phpMyAdmin),但它一直显示错误404未找到。我是不是漏掉了什么明显的东西?

代码语言:javascript
复制
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;
    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-08 16:44:13

这里的问题是只采用“最好的”location指令,顺序如下:

代码语言:javascript
复制
location =  <path>  (longest match wins)
location ^~ <path>  (longest match wins)
location ~  <path>  (first defined match wins)
location    <path>  (longest match wins)

使用此规则集,您的/phpmyadmin location指令将被正则表达式".php$location指令删除,因此前者将被完全忽略。此外,php fastcgi指令是硬连接到/home/me/dev目录的,这意味着phpMyAdmin是完全不可访问的。您可以使用重写来获取phpMyAdmin脚本的正确根目录:

代码语言:javascript
复制
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;
}
票数 83
EN

Stack Overflow用户

发布于 2012-09-11 23:07:55

直接设置“root”。更少的指令,更少的计算需要设置更多的变量。还有其他一些东西(比如fastcgi_param DOCUMENT_ROOT)不会在当前接受的答案中正确设置。但是,此方法将处理所有这些问题:

代码语言:javascript
复制
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;
}
票数 6
EN

Stack Overflow用户

发布于 2013-05-20 01:19:17

我为此挣扎了几个小时,上面讨论的解决方案都不适合我的情况(因为我需要运行index.php、带参数的index.php以及除index.php之外的其他php脚本),但最终达到了如下所示的工作配置:

代码语言:javascript
复制
    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;
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1011101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档