用nginx给ttyd实现https访问,99%的设置都和【Linux下用Nginx给File Browser设置SSL开启HTTPS访问】一样,直接照搬即可。但如果完全照搬,会发现https下登录ttyd以后,页面全黑,有一个浮窗显示【press enter to reconnect】,没有光标,也没有命令提示符。

很容易就明白出现这个问题是因为ttyd使用的是websocket协议,通过nginx代理转发以后出现了bug。

网上搜了一下解决方案,根据【这个页面】和【这个页面】上的两个解答,需要对nginx的配置内容稍微修改。


注意

  • 设定域名为:jackiechang.cn
  • 设定外网端口为:11111
  • 设定内网端口为:4533

配置文件

server {
	listen [::]:11111 ssl;

	server_name jackiechang.cn;

	ssl_certificate ssl/jackiechang.cn.pem;
	ssl_certificate_key ssl/jackiechang.cn.key;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 5m;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
	ssl_prefer_server_ciphers on;

	error_page 497 https://$host:$server_port$uri$is_args$args;

	location / {
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header X-Forwarded-Port $server_port;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";
		proxy_http_version 1.1;

		proxy_pass  http://localhost:4533;
	}
}