Задать вопрос
@Olgavm
В начале пути

Как быть: nginx, ошибка 404 не работает при /?something?

Сайт на nginx. Для несуществующих URL отдаётся своя страница 404 ошибки. Так я думала, пока не увидела в Я.Вебмастере информацию о дубле главной страницы. Дубль имеет вид mysite.ru/?something
Как исправить ситуацию?
Для внутренних страниц ошибка обрабатывается нормально.
PS. Компетенции в nginx - "читаю документацию и почти всё понимаю" ). С сервером работала на курсах. На текущем сайте сервером занимается другой человек, но уровень - "в начале пути".

nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
worker_connections 768; # Почему столько?
# multi_accept on; # Почему отключено?
}

http {
sendfile on; # Почему без ограничения объёма данных?
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65; # Рекомендуется указывать единицы
types_hash_max_size 2048;
# server_tokens off; # почему отключено?

# server_names_hash_bucket_size 64;
# server_name_in_redirect off; # запрещает использовать в абсолютных перенаправлениях, выдаваемых nginx’ом, основное имя сервера, задаваемое директивой server_name. Значение off - дефолтное. Значит, в данном варианте нет смысла

include /etc/nginx/mime.types;
default_type application/octet-stream;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # ref: POODLE - что это?

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # определяет MIME типы, для которых будет работать сжатие. Почему отключено?

# почему нет: client_max_body_size 8M;

include /etc/nginx/conf.d/*.conf; #?
include /etc/nginx/sites-enabled/*;
}

Конфигурация сайта mysite.ru
server {
listen 443 ssl;
root /somepath;
server_name mysite.ru www.mysite.ru mysite.com;
index index.html;
ssl_certificate /etc/letsencrypt/live/mysite.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mysite.ru/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

error_page 404 /ErrorPages/404.html;
try_files $uri $uri/ =404;

location / {
# try_files $uri $uri/index.html $uri.html =404; # это частный случай try_files $uri $uri/ =404? Или есть смысл использовать обе директивы?

#try_files $uri $uri/ /index.html?$args; полагаю, что эта директива создаёт дубли главной

#if (!-e $request_filename){
# return 404;
#}
# Это часть прежнего кода. Предлагаю заменить на try_files $uri $uri/ =404 в контексте server;
}
}

server {
listen 80;
server_name mysite.ru www.mysite.ru mysite.com;
return 301 https://$server_name$request_uri;
}
  • Вопрос задан
  • 1027 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@Olgavm Автор вопроса
В начале пути
Спасибо.
Возможно, эта строчка виновата:
try_files $uri $uri/ /index.html?$args;

Думаю её переписать:
try_files $uri $uri/ =404;

Чтобы избавиться от случайных дублей, решила добавить в код страницы rel="canonical"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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