笔记
0工具
0此页用于记录用户反馈问题后的每一次改进
关于
“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
不想公开、只想临时给人看:点“分享”生成一条带密码和有效期的链接,到期自动失效,你也能随时撤销。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
访问目录 403 而不是文件列表,index 和 autoindex 的锅
搭了个简单的文件下载目录,nginx root 指到 /data/files,里面放了一堆 zip 和文档。直接访问 /data/files/1.zip 好好的,可访问目录本身 /data/files/ 却报 403 Forbidden。当时第一反应是权限问题,chmod 777 都试了还 403,后来才搞明白这 403 根本不是文件系统权限,是 nginx 层面的。
nginx 对目录请求的默认行为:先按 index 指令找 index.html/index.htm,找不到就打算列目录,但 autoindex 默认是 off,列目录被禁止,于是回 403。也就是说"目录里没有 index 文件 + autoindex 关着"必然 403。两个方向任选一个解决:要么目录里放个 index.html,要么打开 autoindex on 让它列目录。
我是想要目录列表,于是开了 autoindex:
location /files/ {
alias /data/files/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
autoindex_exact_size off 让文件大小显示成人类可读的 K/M/G,on 的话是一长串精确字节数。autoindex_localtime on 用服务器本地时间显示,不然默认显示 UTC,跟国内差 8 小时,看文件修改时间老觉得不对。中文文件名默认会乱码,需要在 server 或 location 里加 charset utf-8,不然浏览器按 latin1 解字节,一堆锟斤拷。
排到这一步就发现 nginx 层 403 和系统权限 403 是两码事,得分开判断。nginx 层 403 的响应体是 nginx 自己的错误页;如果请求根本没到 nginx(比如被防火墙挡),那是另一回事。要确认到底哪一层,看 nginx 错误日志最直接:
tail -f /var/log/nginx/error.log
日志里如果是 directory index of "/data/files/" is forbidden,那就是 index/autoindex 的问题,跟 chmod 无关。如果日志是 Permission denied 配合 open() 系统调用失败,那才是真的系统权限不够。
系统权限这层也有常见坑:nginx worker 进程跑在 www-data 用户下,访问 /data/files 需要整条路径每一级目录都有 x(执行)权限。之前有人把目录放在 /root 下面,/root 默认 700,www-data 根本进不去,路径上任何一级没 x 权限都会 403。用 namei 看每级权限:
namei -l /data/files
或者直接用 worker 用户身份测试能不能列出目录:
sudo -u www-data ls /data/files
能列出来说明系统权限没问题,回头查 nginx 配置。反过来就逐级加权限,目录 755 文件 644 基本够。另外 root 配到不存在的目录会 404 而不是 403,root 配到存在的目录但没读权限才 403,这两个别搞混,能帮你少走弯路。
还有一个特例:如果文件系统挂载带 noexec 之类不影响读,但如果目录是挂载点且权限特殊,也会出现诡异 403。我遇到过一次挂载的盘在容器重启后没挂上,目录变成空挂载点,访问 403,重启后挂载恢复就好了。这类环境问题靠日志里有没有 open() 的 errno 来判断,别一上来就 chmod -R 777,权限给太宽后面出事更麻烦。
SELinux 开启的发行版(CentOS/RHEL/Fedora 那套)还有一个专属坑:文件权限、nginx 配置全对,访问还是 403。这时候看错误日志可能只有一句 connect 或者 Permission denied,但 dmesg 或者 ausearch 里能看到 SELinux 的 avc 拒绝记录:
ausearch -m avc -ts recent
常见的是自定义目录不在 httpd_sys_content_t 这个类型里,nginx 读不了。两个办法:给目录打上正确标签,或者开 httpd_read_user_content 布尔值。chcon -R -t httpd_sys_content_t /data/files 立竿见影,但重新 relabel 可能丢;长期还是写进策略或者把目录放到常规站点路径下省心。这层坑只在你改了非默认目录结构时才遇到,用默认 /var/www 的基本不会撞上。
还有一个容易忽略的:autoindex 是按 location 生效的,不是从父级继承的。你在 server 层开了 autoindex on,子 location 如果用 alias 或者嵌套 location 重新定义了目录,未必带得上;反过来父级没开,子 location 里想列目录也要单独写。所以配置完别只测一个路径,多测几个子目录,确认每个想要列目录的 location 都开了 autoindex,不然有的目录能列、有的 403,更让人摸不着头脑。