## Server Block for docs.pingcap.com behind the Ucloud ULB map $sent_http_content_type $expires { default off; text/html epoch; application/json epoch; text/css max; application/javascript max; image/* max; } map $sent_http_content_type $cache { default off; text/html off; application/json off; text/css "public, immutable"; application/javascript "public, immutable"; image/* "public, immutable"; } server { listen 80; server_name docs.pingcap.com; root /var/www/docs.pingcap.com; index index.html index.htm; access_log /var/log/nginx/docs.pingcap.com.log main; error_log /var/log/nginx/docs.pingcap.com.err error; ## Ucloud redirect if ($http_x_forwarded_proto = "http") { return 301 https://$server_name$request_uri; } absolute_redirect off; expires $expires; add_header Cache-Control $cache; error_page 404 403 /404.html; location = /zh/tools/ { return 302 https://$server_name/zh/tidb/stable/ecosystem-tool-user-guide/; } location = /zh/dev-guide/ { return 302 https://$server_name/zh/dev-guide/dev/; } location = /zh/tidb/ { return 302 https://$server_name/zh/tidb/stable/; } ## EN Port location = /tidb/ { return 302 https://$server_name/tidb/stable/; } location = /tools/ { return 302 https://$server_name/tidb/stable/ecosystem-tool-user-guide/; } # Do remember to update after stable branch changed. # vvv location = /zh/tidb/v8.5 { return 302 https://$server_name/zh/tidb/stable; } location ~ ^/zh/tidb/v8.5/(.*) { return 302 https://$server_name/zh/tidb/stable/$1; } location = /tidb/v8.5 { return 302 https://$server_name/tidb/stable; } location ~ ^/tidb/v8.5/(.*) { return 302 https://$server_name/tidb/stable/$1; } # ^^^ ### docs --> docs-archive location = /zh/tidb/v2.1 { return 301 https://docs-archive.pingcap.com/zh/tidb/v2.1; } location ~ ^/zh/tidb/v2.1/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v2.1/$1; } location ~ ^/tidb/v2.1/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v2.1/$1; } location = /ja/tidb/v2.1 { return 301 https://docs-archive.pingcap.com/tidb/v2.1; } location ~ ^/ja/tidb/v2.1/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v2.1/$1; } location = /zh/tidb/v3.0 { return 301 https://docs-archive.pingcap.com/zh/tidb/v3.0; } location ~ ^/zh/tidb/v3.0/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v3.0/$1; } location = /tidb/v3.0 { return 301 https://docs-archive.pingcap.com/tidb/v3.0; } location ~ ^/tidb/v3.0/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v3.0/$1; } location = /zh/tidb/v3.1 { return 301 https://docs-archive.pingcap.com/zh/tidb/v3.1; } location ~ ^/zh/tidb/v3.1/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v3.1/$1; } location = /tidb/v3.1 { return 301 https://docs-archive.pingcap.com/tidb/v3.1; } location ~ ^/tidb/v3.1/(.*) { return 302 https://docs-archive.pingcap.com/tidb/v3.1/$1; } location = /zh/tidb/v4.0 { return 301 https://docs-archive.pingcap.com/zh/tidb/v4.0; } location ~ ^/zh/tidb/v4.0/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v4.0/$1; } location = /tidb/v4.0 { return 301 https://docs-archive.pingcap.com/tidb/v4.0; } location ~ ^/tidb/v4.0/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v4.0/$1; } location = /zh/tidb/v5.0 { return 301 https://docs-archive.pingcap.com/zh/tidb/v5.0; } location ~ ^/zh/tidb/v5.0/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v5.0/$1; } location = /tidb/v5.0 { return 301 https://docs-archive.pingcap.com/tidb/v5.0; } location ~ ^/tidb/v5.0/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v5.0/$1; } location = /zh/tidb/v5.1 { return 301 https://docs-archive.pingcap.com/zh/tidb/v5.1; } location ~ ^/zh/tidb/v5.1/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v5.1/$1; } location = /tidb/v5.1 { return 301 https://docs-archive.pingcap.com/tidb/v5.1; } location ~ ^/tidb/v5.1/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v5.1/$1; } location = /zh/tidb/v5.3 { return 301 https://docs-archive.pingcap.com/zh/tidb/v5.3; } location ~ ^/zh/tidb/v5.3/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v5.3/$1; } location = /tidb/v5.3 { return 301 https://docs-archive.pingcap.com/tidb/v5.3; } location ~ ^/tidb/v5.3/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v5.3/$1; } location = /zh/tidb/v5.2 { return 301 https://docs-archive.pingcap.com/zh/tidb/v5.2; } location ~ ^/zh/tidb/v5.2/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v5.2/$1; } location = /tidb/v5.2 { return 301 https://docs-archive.pingcap.com/tidb/v5.2; } location ~ ^/tidb/v5.2/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v5.2/$1; } location ~ ^/zh/tidb/v6.0/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v6.0/$1; } location ~ ^/tidb/v6.0/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v6.0/$1; } location = /zh/tidb/v6.2 { return 301 https://docs-archive.pingcap.com/zh/tidb/v6.2; } location ~ ^/zh/tidb/v6.2/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v6.2/$1; } location = /tidb/v6.2 { return 301 https://docs-archive.pingcap.com/tidb/v6.2; } location ~ ^/tidb/v6.2/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v6.2/$1; } location = /ja/tidb/v6.2 { return 301 https://docs-archive.pingcap.com/ja/tidb/v6.2; } location ~ ^/ja/tidb/v6.2/(.*) { return 301 https://docs-archive.pingcap.com/ja/tidb/v6.2/$1; } location = /zh/tidb/v6.3 { return 301 https://docs-archive.pingcap.com/zh/tidb/v6.3; } location ~ ^/zh/tidb/v6.3/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v6.3/$1; } location = /tidb/v6.3 { return 301 https://docs-archive.pingcap.com/tidb/v6.3; } location ~ ^/tidb/v6.3/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v6.3/$1; } location = /ja/tidb/v6.3 { return 301 https://docs-archive.pingcap.com/ja/tidb/v6.3; } location ~ ^/ja/tidb/v6.3/(.*) { return 301 https://docs-archive.pingcap.com/ja/tidb/v6.3/$1; } location = /zh/tidb/v6.4 { return 301 https://docs-archive.pingcap.com/zh/tidb/v6.4; } location ~ ^/zh/tidb/v6.4/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v6.4/$1; } location = /tidb/v6.4 { return 301 https://docs-archive.pingcap.com/tidb/v6.4; } location ~ ^/tidb/v6.4/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v6.4/$1; } location = /ja/tidb/v6.4 { return 301 https://docs-archive.pingcap.com/ja/tidb/v6.4; } location ~ ^/ja/tidb/v6.4/(.*) { return 301 https://docs-archive.pingcap.com/ja/tidb/v6.4/$1; } location = /zh/tidb/v6.6 { return 301 https://docs-archive.pingcap.com/zh/tidb/v6.6; } location ~ ^/zh/tidb/v6.6/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v6.6/$1; } location = /tidb/v6.6 { return 301 https://docs-archive.pingcap.com/tidb/v6.6; } location ~ ^/tidb/v6.6/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v6.6/$1; } location = /zh/tidb/v7.0 { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.0; } location ~ ^/zh/tidb/v7.0/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.0/$1; } location = /tidb/v7.0 { return 301 https://docs-archive.pingcap.com/tidb/v7.0; } location ~ ^/tidb/v7.0/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v7.0/$1; } location = /zh/tidb/v7.2 { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.2; } location ~ ^/zh/tidb/v7.2/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.2/$1; } location = /tidb/v7.2 { return 301 https://docs-archive.pingcap.com/tidb/v7.2; } location ~ ^/tidb/v7.2/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v7.2/$1; } location = /zh/tidb/v7.3 { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.3; } location ~ ^/zh/tidb/v7.3/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.3/$1; } location = /tidb/v7.3 { return 301 https://docs-archive.pingcap.com/tidb/v7.3; } location ~ ^/tidb/v7.3/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v7.3/$1; } location = /zh/tidb/v7.4 { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.4; } location ~ ^/zh/tidb/v7.4/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.4/$1; } location = /tidb/v7.4 { return 301 https://docs-archive.pingcap.com/tidb/v7.4; } location ~ ^/tidb/v7.4/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v7.4/$1; } location = /zh/tidb/v7.6 { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.6; } location ~ ^/zh/tidb/v7.6/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v7.6/$1; } location = /tidb/v7.6 { return 301 https://docs-archive.pingcap.com/tidb/v7.6; } location ~ ^/tidb/v7.6/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v7.6/$1; } location = /zh/tidb/v8.0 { return 301 https://docs-archive.pingcap.com/zh/tidb/v8.0; } location ~ ^/zh/tidb/v8.0/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v8.0/$1; } location = /tidb/v8.0 { return 301 https://docs-archive.pingcap.com/tidb/v8.0; } location ~ ^/tidb/v8.0/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v8.0/$1; } location = /zh/tidb/v8.2 { return 301 https://docs-archive.pingcap.com/zh/tidb/v8.2; } location ~ ^/zh/tidb/v8.2/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb/v8.2/$1; } location = /tidb/v8.2 { return 301 https://docs-archive.pingcap.com/tidb/v8.2; } location ~ ^/tidb/v8.2/(.*) { return 301 https://docs-archive.pingcap.com/tidb/v8.2/$1; } #tidb-in-kubernete docs->archive location = /tidb-in-kubernetes/v1.0 { return 301 https://docs-archive.pingcap.com/tidb-in-kubernetes/v1.0; } location ~ ^/tidb-in-kubernetes/v1.0/(.*) { return 301 https://docs-archive.pingcap.com/tidb-in-kubernetes/v1.0/$1; } location = /tidb-in-kubernetes/v1.1 { return 301 https://docs-archive.pingcap.com/tidb-in-kubernetes/v1.1; } location ~ ^/tidb-in-kubernetes/v1.1/(.*) { return 301 https://docs-archive.pingcap.com/tidb-in-kubernetes/v1.1/$1; } location = /zh/tidb-in-kubernetes/v1.0 { return 301 https://docs-archive.pingcap.com/zh/tidb-in-kubernetes/v1.0; } location ~ ^/zh/tidb-in-kubernetes/v1.0/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb-in-kubernetes/v1.0/$1; } location = /zh/tidb-in-kubernetes/v1.1 { return 301 https://docs-archive.pingcap.com/zh/tidb-in-kubernetes/v1.1; } location ~ ^/zh/tidb-in-kubernetes/v1.1/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb-in-kubernetes/v1.1/$1; } location = /tidb-in-kubernetes/v1.2 { return 301 https://docs-archive.pingcap.com/tidb-in-kubernetes/v1.2; } location ~ ^/tidb-in-kubernetes/v1.2/(.*) { return 301 https://docs-archive.pingcap.com/tidb-in-kubernetes/v1.2/$1; } location = /zh/tidb-in-kubernetes/v1.2 { return 301 https://docs-archive.pingcap.com/zh/tidb-in-kubernetes/v1.2; } location ~ ^/zh/tidb-in-kubernetes/v1.2/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb-in-kubernetes/v1.2/$1; } #tidb-data-migration docs->archive location = /tidb-data-migration/v1.0 { return 301 https://docs-archive.pingcap.com/tidb-data-migration/v1.0; } location ~ ^/tidb-data-migration/v1.0/(.*) { return 301 https://docs-archive.pingcap.com/tidb-data-migration/v1.0/$1; } location = /tidb-data-migration/v2.0 { return 301 https://docs-archive.pingcap.com/tidb-data-migration/v2.0; } location ~ ^/tidb-data-migration/v2.0/(.*) { return 301 https://docs-archive.pingcap.com/tidb-data-migration/v2.0/$1; } location = /zh/tidb-data-migration/v1.0 { return 301 https://docs-archive.pingcap.com/zh/tidb-data-migration/v1.0; } location ~ ^/zh/tidb-data-migration/v1.0/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb-data-migration/v1.0/$1; } location = /zh/tidb-data-migration/v2.0 { return 301 https://docs-archive.pingcap.com/zh/tidb-data-migration/v2.0; } location ~ ^/zh/tidb-data-migration/v2.0/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb-data-migration/v2.0/$1; } location = /tidb-data-migration/v5.3 { return 301 https://docs-archive.pingcap.com/tidb-data-migration/v5.3; } location ~ ^/tidb-data-migration/v5.3/(.*) { return 301 https://docs-archive.pingcap.com/tidb-data-migration/v5.3/$1; } location = /zh/tidb-data-migration/v5.3 { return 301 https://docs-archive.pingcap.com/zh/tidb-data-migration/v5.3; } location ~ ^/zh/tidb-data-migration/v5.3/(.*) { return 301 https://docs-archive.pingcap.com/zh/tidb-data-migration/v5.3/$1; } location = /tidb-in-kubernetes/ { return 302 https://$server_name/tidb-in-kubernetes/stable/; } location = /tidb-in-kubernetes/v1.6 { return 302 https://$server_name/tidb-in-kubernetes/stable/; } location ~ ^/tidb-in-kubernetes/v1.6/(.*) { return 302 https://$server_name/tidb-in-kubernetes/stable/$1; } location = /zh/tidb-in-kubernetes/ { return 302 https://$server_name/zh/tidb-in-kubernetes/stable/; } location = /zh/tidb-in-kubernetes/v1.6 { return 302 https://$server_name/zh/tidb-in-kubernetes/stable/; } location ~ ^/zh/tidb-in-kubernetes/v1.6/(.*) { return 302 https://$server_name/zh/tidb-in-kubernetes/stable/$1; } location /tidb-data-migration/stable { return 301 https://$server_name/tidb/stable/dm-overview; } location /zh/tidb-data-migration/stable { return 301 https://$server_name/zh/tidb/stable/dm-overview; } location /zh/appdev/dev { return 301 https://$server_name/zh/tidb/stable/dev-guide-overview; } location ~ ^/tidbcloud/beta/(.*) { return 301 https://$server_name/tidbcloud/$1; } location ~ ^/tidbcloud/public-preview/(.*) { location ~ ^/tidbcloud/public-preview/(service-level-agreement|terms-of-service|privacy-policy) { return 301 https://en.pingcap.com/legal/; } return 301 https://$server_name/tidbcloud/$1; } location ~ ^/tidbcloud/public-preview { return 301 https://$server_name/tidbcloud; } location /zh/tidb-data-migration/dev/ { return 302 https://$server_name/zh/tidb/dev/dm-overview; } location /tidb-data-migration/dev/ { return 302 https://$server_name/tidb/dev/dm-overview; } # permanently redirect tiunimanager pages to the v6.1 overview location /zh/tidb/dev/tiunimanager-(.*) { return 301 https://$server_name/zh/tidb/v6.1/tiunimanager-overview; } location /zh/tidb/stable/tiunimanager-(.*) { return 301 https://$server_name/zh/tidb/v6.1/tiunimanager-overview; } location /zh/tidb/v7.4/tiunimanager-(.*) { return 301 https://$server_name/zh/tidb/v6.1/tiunimanager-overview; } location /zh/tidb/v7.3/tiunimanager-(.*) { return 301 https://$server_name/zh/tidb/v6.1/tiunimanager-overview; } location /zh/tidb/v7.1/tiunimanager-(.*) { return 301 https://$server_name/zh/tidb/v6.1/tiunimanager-overview; } location /zh/tidb/v6.5/tiunimanager-(.*) { return 301 https://$server_name/zh/tidb/v6.1/tiunimanager-overview; } }