全栈Nginx反向代理和PHP索引

时间:2017-02-03 14:55:08

标签: php nginx reverse-proxy

我正在尝试设置一个全栈Nginx反向代理服务器(显然标题是这样),而且在使用PHP-FPM进行代码解释时我有点挣扎。

以下是代理流程的所谓前端部分(不是用于直接提供文件,而是将客户端重定向到后端服务器):

        server {
            listen xxx.xxx.xxx.xxx:80;
            server_name localhost;

            # logs...

            # Here begins the reverse-proxying

            # Test 2nd backend server
            location /test {
                    proxy_pass http://127.0.0.1:82/;
            }

            # default main site (has to be at the end since location checks file hierarchy)
            location / {
                    proxy_pass http://127.0.0.1:81/;
            }

然后,这是我的两个反向服务器块。 第一个是主站点,默认情况下应通过访问domain.com来提供服务:

 server {
            listen 127.0.0.1:81;
            server_name main;

            # logs...

            root /var/www/main;

            gzip on;
            gzip_types "*";
            expires 10m;

            location / {
                    try_files $uri = 404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass unix:/run/php-fpm.socket;
                    include /etc/nginx/fastcgi.conf;
            }
    }

这是第二次"测试"一,尝试domain.com/test时应该访问:

        server {
            listen 127.0.0.1:82;
            server_name test;

            root /var/www/test;

            gzip on;
            gzip_types "*";
            expires 10m;

                    try_files $uri = 404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass unix:/run/php-fpm.socket;
                    include /etc/nginx/fastcgi.conf;
            }
    }

使用反向代理这样做可以让我实际上只使用一个端口,最重要的是,它隐藏了实际运行的虚拟服务器的数量和数量。

那么,问题是什么? 好吧,它更多的是关于如何通过nginx反向代理管理PHP和索引而不是反向代理本身。

当我在81和82服务器中使用index.html文件时,它工作正常,索引指令工作正常,服务器在访问域时返回/var/www/main/index.html访问domain.com/test时.com和/var/www/test/index.html。

但是,当我使用index.php文件时会出现问题。在这种情况下,只使用那里的URL,在这两种情况下都会留下404错误。我需要在URL中明确指定index.php,例如。 domain.com/test/index.php使其成功,我不想这样做。

我还没有找到任何处理这种特定情况的线程或文档,这就是为什么我来这里询问是否有人对PHP的索引行为有更多的信息?

感谢您提前回答,我很乐意接受您现有的任何事情,因为我已经在这个问题上挣扎了很长时间。

1 个答案:

答案 0 :(得分:0)

您需要将其设置为默认加载index.php文件:

location / {
    index index.php index.html index.htm;
    // ...other configurations
}