我应该如何配置 nGinx 来提供一个简单的 PHP 应用程序(路由问题)?

我应该如何配置 nGinx 来提供一个简单的 PHP 应用程序(路由问题)?

我正在尝试配置我的 nGinx 服务器(在 Debian Wheezy 盒子上)来为我的小型 PHP 应用程序提供服务。我在路由方面遇到了问题。

我需要什么:

/ - 不允许使用 PHP,只能使用 .html 文件

/api-所有内容都转到/api/index.php,包括/api/method1、/api/method2 等。

就这样。

我现在有什么:

server {
    listen 3000;

    root /home/my_user/php/my_app;
    index index.html index.htm;

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

    location / {
            try_files /index.html =404;
    }
    location /api {
            try_files /index.php =404;
    }

    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

            # With php5-cgi alone:
            #fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

有效的方法:

/ 给我/home/my_user/php/my_app/index.html,没问题。

/api 给出 404,这不对(它应该转到 /api/index.php 文件)。/api/foo 也是如此。(是的,文件 /api/index.php 存在,并且每个人都可以读取,就像 api/ 子目录一样。)

/api/index.php 给了我 404(但是是另一个,我不确定发生了什么)。

根据我找到的 nginx/php 教程,一切都应该没问题。但事实并非如此。

我应该如何配置我的 nginx?

答案1

您的配置可以简化。

server {
    listen 3000;

    root /home/my_user/php/my_app;
    index index.html index.htm;

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

    location /api/ {
        try_files /api/index.php =404;

        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;
    }
}

首先,仅提供静态文件是默认的 nginx 行为,不需要为其设置一些特殊的块。index指令足以让 nginx 搜索index.html

要将任何请求映射到/api/something/api/index.php您应使用完整路径作为try_filesroot指令到文件的构造路径。此外,fastcgi 指令也应位于此位置,因为如果try_files找到文件,则会在当前上下文(即 内)中对其进行处理location /api/

没有必要location ~ .*\.php$,因为“不允许使用 PHP”

相关内容