Nginx - Varnish - Apache2:使用 map 进行 301 重定向?

Nginx - Varnish - Apache2:使用 map 进行 301 重定向?

Nginx 正在监听端口 443 和 80,并将所有内容从 80 重定向到 443。请求将转到 Varnish 端口 8080,然后使用端口 81 转到 Apache2。这非常有效。

现在所有 301 都在 Apache2 中完成,但请求会通过 Varnish 到达 Apache2,然后重定向回 Varnish,直到我们知道是否有命中或未命中。我认为在 Nginx 上使用 map 进行定向是更明智的做法。但使用 map 并没有重定向任何东西。

我感觉我无法实现这一点,因为代理(或其他东西),我必须使用 Apache2 和虚拟主机的配置。但我不确定,因为经过几个小时的谷歌搜索,我发现的都是 SSL 重定向的问题和技巧。

我的设置(所有域名和网址都是真实的)

Nginx的虚拟主机:

map_hash_bucket_size 256;

map $request_uri $new_uri {
    include /etc/nginx/snippets/includes/301.katiska.info.map;
    }

server {
        listen 46.101.98.116:443 ssl http2;
        server_name katiska.info www.katiska.info;

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

        if ($new_uri != "") {
        #   rewrite ^ $new_uri permanent;
        #   rewrite ^(.*)$ $new_uri permanent;
            return 301 $new_uri;
        }

        location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header Host $host;
        proxy_pass_header Server;
        }

    ssl_certificate /etc/letsencrypt/live/katiska.info/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/katiska.info/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

}

server {
    listen 46.101.98.116:80;
    server_name katiska.info www.katiska.info;

    access_log   /var/log/nginx/katiska.info.access-80.log;
    error_log    /var/log/nginx/katiska.info.error-80.log;

    if ($host = www.katiska.info) {
        return 301 https://$host$request_uri;
    }
    if ($host = katiska.info) {
        return 301 https://$host$request_uri;
    }
    return 404;

}

conf for map in location /etc/nginx/snippets/forwards/301.katiska.info.map: (我使用了三种不同类型的正则表达式,非常简单,而且我知道它们应该是正确的)

/kokeet /;
/koprofagia/?$ /terveys/terveys-yleinen/koprofagia/;
/koulutukset/$ /tag/kurssi/;

我没有在这里放与 Varnish 相关的东西,因为我认为它们不相关。Apache 中的虚拟主机也是如此。它们无论如何都可以工作,而且都是非常基础的东西。

有任何想法吗?

编辑:

Richard 知道了,问题解决了。谢谢。

因此,重定向必须以 ~ 开头(当匹配区分大小写时)。这有效:

~/kokeet /;
~/koprofagia/?$ /terveys/terveys-yleinen/koprofagia/;
~/koulutukset/$ /tag/kurssi/;

完全不同的问题是(几乎)每个网页和答案都不使用 ~ 或 ~*。这是一个很好的例子,说明为什么应该小心...

相关内容