示例为 Nginx 配置,其他 web 服务器原理相同
当使用 http(s) 协议时,如何让 http 协议强制跳转到 https 呢?
由于飞鸽采用端口转发模式,即80 -> 80,443 -> 443,如果穿透了 https 端口,当我们使用 http:// 访问时,会报 400
状态码:497 HTTP Request Sent to HTTPS Port 发送到HTTPS端口请求
奇技淫巧
既然 https 协议下无法使用 http 请求,那可以在 nginx 中将 497错误码直接转发到 https请求上
server {
listen 443 ssl;
server_name www.xxx.com;
error_page 497 https://$http_host$request_uri; # 重点在这里,只需要一行命令
ssl_certificate /usr/local/nginx/cert/7172296_www.xxx.com.pem;
ssl_certificate_key /usr/local/nginx/cert/7172296_www.xxxx.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
}