Ответ 1
Ответ заключается в размещении корневого каталога в директивах местоположения:
root /srv/www/ducklington.org/public_html;
Как установить 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.
Ответ заключается в размещении корневого каталога в директивах местоположения:
root /srv/www/ducklington.org/public_html;
в вашем блоке местоположения вы можете сделать:
location / {
try_files $uri $uri/index.html;
}
который скажет ngingx искать файл с точным именем, указанным первым, и если ни один такой файл не найден, он попытается выполнить uri/index.html. Поэтому, если запрос https://www.example.com/ приходит, он сначала ищет точное совпадение файлов, а не обнаруживает, что тогда будет проверять index.html
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;
и увидеть там все внутренние переадресации и т.д.
Согласно документации Проверяет наличие файлов в указанном порядке и использует первый найденный файл для обработки запроса; обработка выполняется в текущем контексте. Путь к файлу создается из параметра файла в соответствии с директивами root и alias. Можно проверить существование каталогов, указав косую черту в конце имени, например. "$ URI/". Если ни один из файлов не найден, создается внутренняя переадресация uri, указанная в последнем параметре. Внимание!
внутреннее перенаправление на uri, указанное в последнем параметре, сделал.
Итак, в последнем параметре вы должны добавить свою страницу или код, если первые два параметра вернут false.
location / {
try_files $uri $uri/index.html index.html;
}