キャッシュサーバーを利用してリダイレクトエラーが発生する時の対処法

2 min read

error.png

こんにちは、無能です。
※写真は関係無いです。他のエラーのときの画像。

キャッシュサーバーとして稼働させていると、なぜか発生原因不明で時々リダイレクトエラーが表示されてキャッシュを消すまで表示されるという事に悩まされて居ましたがそれが解決しました。

問題の構文。※一部改変しています。

{
    listen 443 ssl;
    server_name xxx.xxx;

    location / {
        proxy_pass /xxxxxx/;
        proxy_set_header Host $host;
        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 $scheme;
        add_header Content-Security-Policy upgrade-insecure-requests;

       ssl_certificate /xxx/xxx.pem; 
       ssl_certificate_key /xxx/xxx.pem; 

		set $do_not_cache 0;
		if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-admin/.*"){
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-content/.*"){
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-includes/.*"){
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-cron.php.*"){
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-login.php.*"){
			set $do_not_cache 1;
		}
                if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$")  {
    set $do_not_cache 0;
}
                

                proxy_no_cache          $do_not_cache;
                proxy_cache_bypass      $do_not_cache;

                proxy_cache             zone;
                proxy_cache_key         $scheme$proxy_host$uri$is_args$args;
                proxy_cache_valid       200 201 6h;
                proxy_cache_valid       302 3h;
                proxy_cache_valid       301 1d;
                proxy_cache_valid       404 5m;
                proxy_cache_lock        on;
    }

}

何度か構築し直したりしているときに思ったのが、SSL認証でリダイレクトループすることが多かったので、おそらく構文的にSSL認証キー自体にもリバースプロキシが入っている事に違和感をようやく気づき.pemをケツの方に持ってきたところ解決しました。以下が適切な構文です。

あと多分add_header Content-Security-Policy upgrade-insecure-requests; の直後にキー配置するのもあまりよろしくないと感じました。

{
    listen 443 ssl;
    server_name xxx.xxx;

    location / {
        proxy_pass /xxxxxx/;
        proxy_set_header Host $host;
        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 $scheme;
        add_header Content-Security-Policy upgrade-insecure-requests;

		set $do_not_cache 0;
		if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-admin/.*"){
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-content/.*"){
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-includes/.*"){
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-cron.php.*"){
			set $do_not_cache 1;
		}
		if ($request_uri ~ "^/wp-login.php.*"){
			set $do_not_cache 1;
		}
                if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$")  {
    set $do_not_cache 0;
}
                

                proxy_no_cache          $do_not_cache;
                proxy_cache_bypass      $do_not_cache;

                proxy_cache             zone;
                proxy_cache_key         $scheme$proxy_host$uri$is_args$args;
                proxy_cache_valid       200 201 6h;
                proxy_cache_valid       302 3h;
                proxy_cache_valid       301 1d;
                proxy_cache_valid       404 5m;
                proxy_cache_lock        on;
    }
       ssl_certificate /xxx/xxx.pem; 
       ssl_certificate_key /xxx/xxx.pem; 
}

これで解決しました。

それでは。

※解決していませんでした。②に追加しました。

キャッシュサーバーを利用してリダイレクトエラーが発生する時の対処法②