Подтвердить что ты не робот

Как установить index.html в качестве корневого файла в Nginx?

Как установить index.html для имени домена, например. https://www.example.com/ - приводит пользователя к index.html в корневой каталог.

Я пробовал разные вещи вроде:

server {
    # some configs

    location = / {
            index index.html;
            fastcgi_index index.html;
    }
or 
    location / {
            index index.html;
            fastcgi_index index.html;
    }

}

Ничто не помогло мне.

Есть и другие конфигурации с ключевым словом location, хотя я также прокомментировал их.

Другие конфигурации "location" в предложении server {:

location ~ .*(css|htc|js|bmp|jp?g|gif|ico|cur|png|swf|htm?|html)$ {
        access_log off;
        root $www_root;
}

location ~ \.php$
{
        include                         /etc/nginx/fastcgi_params;
        index                           index.html;
        fastcgi_index                   index.html;
        fastcgi_param SCRIPT_FILENAME   $www_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING      $query_string;
        fastcgi_param PATH_INFO         $fastcgi_path_info;
        fastcgi_pass                    127.0.0.1:9000;
        # Директива определяет что ответы FastCGI-сервера с кодом больше или равные 400
        # перенаправлять на обработку nginx'у с помощью директивы error_page
        fastcgi_intercept_errors        on;
        break;
}

location ~ /\.ht {
    deny all;
}

Все они были прокомментированы и раскоментированы, но ничего не помогло.

Издания PS были сделаны в файле/etc/nginx/sites-enabled/domainname.com.

4b9b3361

Ответ 1

Ответ заключается в размещении корневого каталога в директивах местоположения:

root   /srv/www/ducklington.org/public_html;

Ответ 2

в вашем блоке местоположения вы можете сделать:

location / {
  try_files $uri $uri/index.html;
}

который скажет ngingx искать файл с точным именем, указанным первым, и если ни один такой файл не найден, он попытается выполнить uri/index.html. Поэтому, если запрос https://www.example.com/ приходит, он сначала ищет точное совпадение файлов, а не обнаруживает, что тогда будет проверять index.html

Ответ 3

location / { - наиболее общее местоположение (с location {). Это будет соответствовать чему угодно, AFAIU. Я сомневаюсь, что было бы полезно иметь location / { index index.html; } из-за большого количества повторяющегося содержимого для каждого подкаталога вашего сайта.

Подход с

try_files $uri $uri/index.html index.html;

плохо, как указано в комментарии выше, потому что он возвращает index.html для страниц, которые не должны существовать на вашем сайте (в этом может получиться любое возможное $uri). Кроме того, как упоминалось в ответе выше, в последнем аргументе try_files имеется внутренняя переадресация.

Ваш подход

location = / {
   index index.html;

также плохо, поскольку index также выполняет внутреннюю переадресацию. Если вы этого хотите, вы должны иметь возможность обрабатывать это в конкретном location. Создать, например.

location = /index.html {

как было предложено здесь. Но тогда у вас будет рабочая ссылка http://example.org/index.html, что может быть нежелательно. Другим вариантом, который я использую, является:

root /www/my-root;

# http://example.org
# = means exact location
location = / {
    try_files /index.html =404;
}

# disable http://example.org/index as a duplicate content
location = /index      { return 404; }

# This is a general location. 
# (e.g. http://example.org/contacts <- contacts.html)
location / {
    # use fastcgi or whatever you need here
    # return 404 if doesn't exist
    try_files $uri.html =404;
}

P.S. Это чрезвычайно легко для debug nginx (если это позволяет ваш двоичный файл). Просто добавьте в блок server {:

error_log /var/log/nginx/debug.log debug;

и увидеть там все внутренние переадресации и т.д.

Ответ 4

Согласно документации Проверяет наличие файлов в указанном порядке и использует первый найденный файл для обработки запроса; обработка выполняется в текущем контексте. Путь к файлу создается из параметра файла в соответствии с директивами root и alias. Можно проверить существование каталогов, указав косую черту в конце имени, например. "$ URI/". Если ни один из файлов не найден, создается внутренняя переадресация uri, указанная в последнем параметре. Внимание!

внутреннее перенаправление на uri, указанное в последнем параметре, сделал.

Итак, в последнем параметре вы должны добавить свою страницу или код, если первые два параметра вернут false.

location / {
  try_files $uri $uri/index.html index.html;
}