NGINX: настроить местоположения с несколькими корневыми каталогами или индексами

Я хочу настроить местоположение для файла phpinfo.php с помощью ] / phpinfo и еще один для phpPgAdmin с / phppgadmin . Корневой каталог моего сервера находится в / usr / share / nginx / html / , там я получил файл index.html и phpinfo.php , а также phpPgAdmin расположен по адресу / usr / share / phppgadmin с его файлом index.php внутри.

Это мой файл default.conf :

server {
    listen       80;
    server_name  localhost;
    root /usr/share/nginx/html;
    index index.html index.htm index.php;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }

    location /phpinfo {
        index phpinfo.php;
    }

    location /phppgadmin {
        alias /usr/share/phppgadmin;
    }
}

Я установил блок местоположения для каждого, но ни один из них не работает.

В основном я хочу настроить все это для перехода к моей информации php с помощью http: // localhost / phpinfo и к моему менеджеру баз данных phpPgAdmin с помощью http: // localhost / phppgadmin .

0
задан 3 June 2019 в 03:05
1 ответ

Давайте сначала возьмем этот минимальный рабочий пример:

server {
    listen   80;
    server_name  test.sc;
    root /usr/share/nginx/html;
    index index.html index.htm index.php;

    location /phpinfo {
        alias /usr/share/phppgadmin/;
        index phpinfo.php;

    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }

}

Здесь проблема в том, что при использовании

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

FPM передается /usr/share/nginx/html/phpinfo.php для обработки, поскольку директива с «root» была определена / usr / share / nginx / html. Это будет сообщение «Входной файл не указан». ошибка.

Как вы могли это сделать:

server {
    listen   80;
    server_name  test.sc;
    root /usr/share/nginx/html;
    index index.html index.htm index.php;

    location /phpinfo {
        alias /usr/share/phppgadmin/;
        index phpinfo.php;

        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include      fastcgi_params;
        }

    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }

}

Таким образом, php-файлы в каталоге / usr / share / phppgadmin / будут обрабатываться отдельно, вы даже можете назначить для них другой пул FPM в контексте / usr / share / phppgadmin /. Все остальное будет обработано с использованием значений по умолчанию, указанных ниже. Nginx ограничен этим поведением, потому что будет использоваться первый блок соответствия регулярному выражению, он не будет продолжать попытки или использовать несколько блоков местоположения.

Теперь вы можете расширить конфигурацию по своему усмотрению:

server {
    listen   80;
    server_name  test.sc;
    root /usr/share/nginx/html;
    index index.html index.htm index.php;

    location /phpinfo {
        alias /usr/share/phppgadmin/;
        index phpinfo.php;

        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include      fastcgi_params;
        }

    }

    location /phppgadmin {
        alias /usr/share/phppgadmin;
        index index.php;

        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include  fastcgi_params;
        }
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }

}

Кроме того, вы можете сократить эта конфигурация путем повторного использования определенных частей:

/ etc / nginx / php_settings:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $request_filename;
    include  fastcgi_params;
}

/etc/nginx/sites-enabled/000.conf:

server {
    listen   80;
    server_name  test.sc;
    root /usr/share/nginx/html;
    index index.html index.htm index.php;

    location /phpinfo {
        alias /usr/share/phppgadmin/;
        index phpinfo.php;

        include php_settings;
    }

    location /phppgadmin {
        alias /usr/share/phppgadmin;
        index index.php;

        include php_settings;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }

}
0
ответ дан 23 November 2019 в 23:38

Теги

Похожие вопросы