LightSNS 程序已就位,还差最后一步:配置反向代理

你现在看到的是站点根目录里的这份说明,不是 LightSNS 的首页 —— 说明 nginx 还在把这个站点当成一个普通的静态目录,反代配置没有生效,请求一条都没交给 LightSNS。
把下面这段配置粘进你站点的 nginx 配置、重启 nginx,刷新这一页就是安装向导。
(这份文件出现之前,这一步没做的表现是打开站点直接一个 403 Forbidden:站点根目录下没有索引文件,nginx 只能拒绝。)

照这几步做

① 先清空站点的伪静态:宝塔在「网站 → 设置 → 伪静态」,把编辑框里的内容全选删掉再保存。
   要的是内容为空,不是在下拉里选「无」—— 选了「无」,编辑框里原来那份规则还在。
   面板「反向代理」里加过的条目也一并删掉,那同样是一条 location /。
② 打开你站点的 nginx 配置文件(宝塔 / 1Panel 里点「配置文件」就是它)
③ 第一段(upstream 那一块)粘在文件最上面,server 那一块之前
④ 第二段粘进 server { } 里面,保存
⑤ 重启 nginx(宝塔 / 1Panel 面板里点一下重启即可)
⑥ 浏览器打开站点域名 —— 安装向导就在首页

注意事项
· 顺序不能反:nginx 没配好之前站点域名打不开,向导也就打不开。
· 粘的是站点自己那份配置,不是 Nginx 软件的主配置(宝塔的软件商店里那个)。
  判据:你打开的那个文件里必须看得见你自己的域名(server_name 那一行)。
  粘错了的表现是按服务器 IP 能打开、按域名打不开,而且两边都不报错。
· 报 host not found in upstream "lightsns_business":第一段没粘,
  或者粘进 server { } 里面了。
· 报 duplicate location "/":伪静态没清空,或者面板的反向代理里还留着条目 —— 回第 ① 步。
· 报 duplicate upstream:第一段粘了两遍,全机只留一份。

要粘的配置

# ── LightSNS ── 分两段粘,位置不一样,别粘反
#
# 【第一段】粘在这个文件的最上面,server 那一块之前 —— 不是里面。
# nginx 只允许 upstream 待在 http 层,粘进 server { } 里 nginx 直接起不来。
upstream lightsns_business {
    server 127.0.0.1:8790;
    # 每个 nginx worker 进程常驻这么多条空闲连接。
    keepalive 64;
}

# 【第二段】以下全部粘进 server { } 里面。

client_max_body_size 1024m;

# 转发头写在 location 外面,下面每个块自动继承。
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 清空这个头,上面那个连接池才生效 —— 判据见 upstream 那一段的注释。
proxy_set_header Connection "";
proxy_read_timeout 600s;
proxy_send_timeout 600s;

# 关掉反代缓存。面板默认在 http 层(nginx/conf/proxy.conf)写着 proxy_cache cache_one,
# 站点里每一个 proxy_pass 都被它缓存。而 nginx 一旦对某个块开了缓存,就会把
# Range / If-Range / If-None-Match / If-Modified-Since 从发给应用的请求里抹掉 ——
# 存在本机的音乐视频语音于是永远回不了 206,iOS 上直接播不出声,进度条也拖不动。
proxy_cache off;

# 实时通道走独立端口。这一块自己带转发头(本级一有 proxy_set_header,
# 上面那组就整组不再继承),转错了私信通知点赞会静默失效。
location = /realtime {
    proxy_pass http://127.0.0.1:2347;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 86400s;
    proxy_send_timeout 86400s;
    proxy_buffering off;
}

# 证书校验目录让回给磁盘。宝塔申请证书走 HTTP-01 时,校验文件是它自己
# 写进站点目录、由 nginx 从磁盘开的;下面那条 ^~ / 会把它一起转给应用,
# 表现是「申请证书失败:文件验证不通过」,而站点本身一切正常。
# 这一块空着不写指令,继承站点自己的 root,行为和面板原来那块一样。
location ^~ /.well-known/ { }

# 全部交给应用,而且必须是 ^~ / ,不能写成 location / 。
# 面板建站自带两条扩展名正则(.gif/.jpg/.png 那条和 .js/.css 那条),
# 它们不转发、直接从磁盘开文件,而普通前缀 location / 抢不过正则。
# 应用的页面地址本身就会以这些扩展名结尾:正文里指向图片的外链走中转页,
# 地址是 /go/https%3A%2F%2Fa.com%2Fb.jpg(nginx 匹配前会把 %2F 解回 /),
# 站内搜 logo.png 是 /search/logo.png。写成 location / 的表现是这一类地址
# 一点就 404,而那两块里写着 error_log /dev/null,日志里一个字都没有。
# ^~ 的意思是匹到就不再看正则,且与粘贴位置无关。
# 缓冲保持默认开着,不要关。
location ^~ / { proxy_pass http://lightsns_business; }

粘完刷新还是这一页

这份文件由 lightsns-supervisor install 写在站点根目录下,文件名 index.html,每次重跑 install 都会刷新成当前版本的配置。同一份配置在官网 https://lightsns.com/docs 的装机教程 1.4 节也有,两处是同一个来源。反代配好之后所有请求都交给 LightSNS,nginx 不再打开站点目录下的任何文件,这一页也就永远不会再出现。