简单的nginx重定向不匹配

时间:2019-03-06 01:42:01

标签: nginx nginx-location

我本来是试图进行复杂的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;
}

2 个答案:

答案 0 :(得分:0)

根据您的日志条目:您正在请求/google/(请注意末尾斜杠),但这与/google位置不匹配,因为那里没有末尾斜杠。

因此,您需要两个完全匹配的位置:

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

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

答案 1 :(得分:0)

  • 使用curl -v调试服务器上发生的事情。

  • 您使用sites-available / sites-enabled吗?别。参见https://serverfault.com/a/870709/110020sites-available / sites-enabled是非标准的并且是邪恶的,请不要使用它,而应使用conf.d

  • 确保您确实重新加载了nginx。参见https://stackoverflow.com/a/21297545/1122270。直接尝试sudo nginx -s reloadsudo pkill -HUP nginx

  • 同时选中error_logaccess_log。确保事件的日期与您提出的新请求匹配。我建议打开几个终端窗口,并在每个窗口中进行tail -f,然后按几次 return 键以将新输入与旧输入分开,然后再执行请求。

  • 您是否还在nginx上使用任何其他代理?这些可能是问题的原因。