Простое перенаправление nginx не соответствует

Изначально я пытался переписать сложный URL-адрес, который у меня не получился, поэтому я сократил его до простого перенаправления URL-адреса, который определенно должен работать, вместо этого он выдает ошибку 404.

Запросы для [any_scheme]: //www.mydomain.com/google должны перенаправлять на https://www.google.com/

nginx.conf (не опубликован, поскольку не содержит серверных блоков, поэтому не может конфликтовать?)

mydomain.com.conf:

server {
    server_name www.mydomain.com;
    root /home/mydomain/public_html;
    index index.php index.html index.htm;

    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate /home/mydomain/ssl.combined;
    ssl_certificate_key /home/mydomain/ssl.key;

    access_log /var/log/virtualmin/mydomain.com_access_log;
    error_log /var/log/virtualmin/mydomain.com_error_log;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location = /google {
        return 302 https://www.google.com/;
    }

    #rogue .htaccess files caught here
    location ~ /\.ht {
        deny all;
    }
}

#force non-www. to www.
server {
    server_name mydomain.com;
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    return 301 $scheme://www.mydomain.com$request_uri;
}

person Jon    schedule 06.03.2019    source источник
comment
Пробовали nginx -t && service nginx reload?   -  person Danila Vershinin    schedule 06.03.2019
comment
@DanilaVershinin Ага, с каждым изменением. Что-то должно быть конфликтующим в другом месте, так как эта конфигурация настолько чиста, насколько я думаю   -  person Jon    schedule 06.03.2019
comment
Есть ли запись в журнале доступа, соответствующая этому ответу 404?   -  person Richard Smith    schedule 06.03.2019
comment
xxxx - - [06 / мар / 2019: 01: 45: 39 +0000] GET / google / HTTP / 1.1 404 193 - Mozilla / 5.0 (Linux; Android 7.1.2; Swift 2 X) AppleWebKit / 537.36 (KHTML, например Gecko) Chrome / 72.0.3626.76 Mobile Safari / 537.36   -  person Jon    schedule 06.03.2019
comment
Интересно, работает ли другое местоположение из www.mydomain.com? Ты проверил?   -  person Alexander Azarov    schedule 14.03.2019


Ответы (2)


  • Используйте curl -v для отладки того, что происходит с вашим сервером.

  • Вы используете sites-available / sites-enabled? Не надо. См. https://serverfault.com/a/870709/110020. sites-available / sites-enabled нестандартный и злой, не используйте его, используйте вместо него conf.d.

  • Убедитесь, что вы действительно перезагружаете nginx. См. https://stackoverflow.com/a/21297545/1122270. Попробуйте напрямую sudo nginx -s reload и sudo pkill -HUP nginx.

  • Проверьте как error_log, так и access_log. Убедитесь, что даты мероприятий соответствуют новым запросам, которые вы делаете. Я бы рекомендовал открыть несколько окон терминала и выполнить tail -f в каждом из них, а затем выполнить несколько return нажимает, чтобы отделить новый ввод от старого, только после этого выполняя запросы.

  • Вы используете какие-либо дополнительные прокси поверх nginx? Это могло быть причиной проблемы.

person cnst    schedule 14.03.2019
comment
Спасибо, я думаю sudo nginx -s reload добился цели. Я использовал systemctl reload nginx, что, по моему мнению, в основном то же самое, поэтому не уверен, почему это сработало на этот раз, но это сработало. Я также приму ваш совет по sites-enabled. Для записи я использую образ Ubuntu 16.04 LEMP из Digital Ocean. Спасибо еще раз. - person Jon; 14.03.2019

На основании вашей записи в журнале: вы запрашиваете /google/ (обратите внимание на конечную косую черту), но это не будет соответствовать местоположению /google, потому что там нет конечной косой черты.

Итак, вам нужно два точных совпадения:

location = /google {
    return 302 https://www.google.com/;
}

location = /google/ {
    return 302 https://www.google.com/;
}
person Danila Vershinin    schedule 06.03.2019
comment
Извините, моя строка файла журнала была неправильной, я тестировал с косой чертой и без нее и разместил неправильную строку. Даже с косой чертой в правиле и тестовой косой чертой в URL-адресе я получаю такой же ответ. Есть ли другой способ отследить проблему? - person Jon; 06.03.2019