$document_root$fastcgi_script_name Nginx по сравнению с $request_filename

Вы не говорите, какое программное обеспечение веб-сервера Вы выполняете, но, большинство серверов поддерживает vhosts.

С Apache создайте vhost

ServerName www.mydomain.com ServerAlias mysite.sites.com DocumentRoot /usr/www/mydomain.com

Это vhost ответит на IPADDRESS на запросы на www.mydomain.com и mysite.sites.com пока DNS на тех двух точках записей в Вашем IPADDRESS, это будет очевидно для пользователя.

Необходимо удостовериться, что приложение ссылается на заголовок HTTP_HOST, который требуют, и не использует жесткие ссылки на www.mydomain.com

Это имеет смысл?

Andrew

15
задан 10 January 2013 в 02:34
3 ответа

Вот что говорится в документации:

$ request_filename

Эта переменная равна пути к файлу для текущего запроса, сформированного из директив root или alias и URI запроса;

$ document_root

Эта переменная равна значению директивы root для текущего запроса;

$ fastcgi_script_name

Эта переменная равна запросу URI или, если URI завершается прямой косой чертой, то запросу URI плюс имя индексного файла, заданного параметром fastcgi_index. Можно использовать эту переменную вместо SCRIPT_FILENAME и PATH_TRANSLATED, используемых, в частности, для определения имени скрипта в PHP.

Как здесь написано, есть по крайней мере разница при использовании fastcgi_index или fastcgi_split_path_info . Может есть еще ... это то, что я знаю прямо сейчас.

Пример

Вы получаете запрос / info / и имеете следующую конфигурацию:

fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;

SCRIPT_FILENAME будет равно / home / www /scripts/php/info/index.php, но при использовании $ request_filename это будет просто / home / www / scripts / php / info / .

конфигурация fastcgi_split_path_info также важна. Дополнительную помощь см. Здесь: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info

24
ответ дан 2 December 2019 в 20:47

Я предполагаю, что эти строки были взяты из файла 'fastcgi_params'.

Обычно вы не получаете никаких ошибок, когда дело касается SCRIPT_FILENAME , потому что он уже определен, когда вы определили корневую директиву в своем файле vhost. Поэтому, если вы не определили это явно в вашем файле vhost с помощью fastcgi_param , значение SCRIPT_FILENAME будет взято из корневой директивы .. Но ОДИН ВАЖНЫЙ НОМЕР ЗДЕСЬ. Существует еще одна переменная, необходимая nginx для отправки запросов на php-сервер, это $ fastcgi_script_name , и вы должны правильно определить ее, чтобы избежать повторяющихся URL-адресов и ошибок с uri, заканчивающимися косой чертой.

Заключение :

Чтобы все работало очень хорошо,

2
ответ дан 2 December 2019 в 20:47

TL; DR

Я рекомендую использовать $ request_filename для SCRIPT_FILENAME .


Если вы используете root директиву

$ document_root $ fastcgi_script_name равно $ request_filename .

Если вы используете псевдоним директива

$ document_root $ fastcgi_script_name вернет неправильный путь, потому что $ fastcgi_script_name - это путь URL-адреса, а не путь, относящийся к $ document_root .

Пример

Если у вас есть конфигурация

location /api/ {
    index  index.php index.html index.htm;
    alias /app/www/;
    location ~* "\.php$" {
        try_files      $uri =404;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        # fastcgi_param  SCRIPT_FILENAME  $request_filename;
    }
}

Запрос / api / test.php :

  • $ document_root $ fastcgi_script_name == /app/www//api/testing.php
  • $ request_filename == / app / www /testing.php[12154 sizesRequest / api / :
    • $ document_root $ fastcgi_script_name == /app/www//api/index.php
    • $ request_filename == /app/www/index.php

    И если вы используете $ req uest_filename , вы должны установить индекс с помощью директивы index , fastcgi_index не будет работать.

6
ответ дан 2 December 2019 в 20:47

Теги

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