Как правильно настроить директиву псевдонима в nginx?

Я пытался настроить несколько веб-приложений на своем веб-сервере nginx, но не могу заставить работать одно приложение Laravel, для которого требуется, чтобы $ document_root был установлен в общую папку laravel.
В настоящее время я пытаюсь настроить его с помощью директивы псевдонима, но по непонятной причине это не работает. Вот что я пытаюсь сделать.

# Default server configuration
#
server {
listen 80;

# SSL configuration
#
listen 443 ssl;

error_log /var/log/nginx/error.log warn;

ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;set $root_path '/var/www/html';
root $root_path;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;

server_name localhost;

location /paperwork {
alias /var/www/html/paperwork/frontend/public;
try_files $uri $uri/;
#location ~ \.php {
#   fastcgi_split_path_info ^(.+\.php)(.*)$;
#   fastcgi_pass unix:/var/run/php5-fpm.sock;
#   include /etc/nginx/fastcgi_params;
#   #fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
#   #fastcgi_intercept_errors on;
#}
}

#location @paperwork {
#   rewrite /paperwork/(.*)$ /paperwork/index.php/$1 last;
#}

location / {

}location /wallabag {
try_files $uri $uri/ /index.php;
}

location /laverna {
try_files $uri/ /index.php;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#try_files $uri $uri/ =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one

location ~ /\.ht {
deny all;
}
}

Чтобы проверить мою конфигурацию «псевдонима», я поместил файлы «test.php» в /var/www/html/paperwork/frontend/public/test.php и попытался получить к нему доступ через https: //IP/paperwork/test.php. Я получаю ошибку 404 и ничего в журнале ошибок nginx.
Если я попробую https: //IP/paperwork/frontend/public/test.php в браузере он отображает файл test.php без ошибок.
Ничего не изменится, если я раскомментирую строку try_files в php месте.

Если я скопирую test.php в /var/www/html/paperwork/test2.php и получу доступ к https: //IP/paperwork/test2.php файл отображается без ошибок, поэтому я вижу, что псевдоним не работает, так как в публичном каталоге документов нет test2.php.

У меня может быть другое поведение, если я раскомментирую php-местоположение в месте расположения документов. С этим запросы как https: //IP/paperwork/test.php не отображать 404, а пустой экран.

Я прошел через множество форумов / вопросов, связанных с этим, но я не смог получить рабочий конфиг для такой простой задачи, как отображение test.php …

Спасибо !

6

Решение

Я нашел решение. Похоже, что неправильный запрос был отправлен для файлов php. Когда используется псевдоним, рекомендуется использовать $ request_filename вместо $ fastcgi_script_name.

Вот мой блок местоположения:

location /paperwork {

alias /var/www/html/paperwork/frontend/public;
#try_files $uri $uri/;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
#fastcgi_intercept_errors on;
}
}

Это решило мою проблему для моего файла ‘test.php’, который теперь выполняется при достижении https: //IP/paperwork/test.php. Так что псевдоним работает, а php хорошо выполняется.
У меня все еще есть проблема при попытке добраться до index.php (который является моим индексом приложения laravel). Файл найден, но вместо выполнения загружается. Поэтому, когда я достигаю https: //IP/paperwork/index.php Я получаю загруженный файл входа в систему, который является файлом index.php. Я получаю такое же поведение, если я пытаюсь /paperwork/index.php/login или / paperwork / login.

29

Другие решения

Других решений пока нет …