nginx 配置
server {
listen 80;
server_name mydomainname.com;
location /update_k3s_io {
proxy_pass https://update.k3s.io/;
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
proxy_ssl_ciphers HIGH:!aNULL:!MD5;
proxy_ssl_verify_depth 2;
proxy_ssl_server_name on;
#proxy_set_header Host $host;
proxy_redirect ~^https://[^/]+(/.+)$ http://mydomainname.com/update_k3s_io$1;
}
}
申请时,我经常收到 301 Moved Permanently
[root@centos ~]# curl -v http://mydomainname.com/update_k3s_io/v1-release/channels
* Trying 172.16.16.2...
* TCP_NODELAY set
* Connected to mydomainname.com (172.16.16.2) port 80 (#0)
> GET /update_k3s_io/v1-release/channels HTTP/1.1
> Host: mydomainname.com
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.18.0
< Date: Sat, 05 Feb 2022 18:50:01 GMT
< Content-Length: 0
< Connection: keep-alive
< location: /v1-release/channels
< strict-transport-security: max-age=15552000; includeSubDomains; preload
< CF-Cache-Status: DYNAMIC
< Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
< Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=wKyi16WxuyuaHO08DrH7%2FzyNJopjnIXJKluUYVSKy61chEH8BHoMt%2BEWAPOE3Yo5mv%2Fi2n36vlpRyUjIq15OkzUWkbHPwlPf6tuAxqExdwuAhxdAyXisDk7XG6lWfZo%3D"}],"group":"cf-nel","max_age":604800}
< NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
< X-Content-Type-Options: nosniff
< CF-RAY: 6d8e527b2f863a5f-DME
<
* Connection #0 to host mydomainname.com left intact
URL 似乎是正确的,它还能是什么?
这是它应该如何工作的:
在您的代码中,由于
/
end没有location
,代理时,这是 URL:https://update.k3s.io//v1-release/channels
并且 k3s 服务器试图告诉您转到没有双斜杠的普通 URL。好吧,proxy_redirect
它不起作用,因为Location
响应中的标头不包含服务器名称。