Я хочу настроить местоположение для 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
.
Давайте сначала возьмем этот минимальный рабочий пример:
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;
}
}