网页应用

NGINX

搭配 Lolia FRP 和 NGINX 配置网页服务

准备 NGINX

从 nginx 官网 下载对应系统的版本,解压到任意目录即可,无需安装。建议放在不含空格和中文的路径下。

解压后的目录结构:

路径说明
nginx.exe主程序(Linux 下为 nginx)
conf/nginx.conf主配置文件
html/默认站点根目录
logs/访问日志与错误日志

启动并验证

在 nginx 目录下打开终端(Windows 为 PowerShell 或命令提示符),执行:

start nginx
Windows 下使用 start 启动时,nginx 会在后台运行,不会弹出命令行窗口,因此看不到任何输出是正常的。

Linux 下执行 ./nginx 即可。

浏览器访问 http://127.0.0.1,能看到 nginx 的欢迎页即表示启动成功。默认配置监听 80 端口,站点根目录为 html。

放置站点文件

把您的网页文件放进 html/ 目录,或修改 conf/nginx.conf 中 location / 的 root 指向实际目录:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   html;
        index  index.html index.htm;
    }
}

改完配置后需要重载才会生效,见下方常用命令。

反向代理

如果您的服务已经在本机其它端口上运行(例如 Java、Node.js、面板等),不需要把站点文件放进 html/,让 nginx 把请求转发过去即可:

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://127.0.0.1:8080;

        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

把 proxy_pass 改成后端实际监听的地址即可。若后端是 WebSocket 服务,还需要加上协议升级相关的两行:

        proxy_http_version 1.1;
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";

X-Forwarded-For 与 X-Real-IP 的作用是把访客地址传给后端,后端需要读取这两个请求头才能拿到真实 IP。

创建隧道

在面板的隧道创建页面选择 HTTP 隧道:

参数填写内容
本地 IP127.0.0.1
本地端口nginx 实际监听的端口,默认 80

若本机 80 端口已被占用,可以修改 listen 为其它端口(如 8080),并把隧道的本地端口一并改掉。

绑定域名

在隧道详情中拿到形如 cn-frp-1.qwq.fan 的节点域名,为您的域名添加 CNAME 记录指向它,具体填写规则见 DNS 配置。

获取访客真实IP

经过 FRP 转发后,nginx 看到的来源地址是 frpc 的地址(通常是 127.0.0.1),访问日志、IP Ban 之类依赖来源 IP 的功能都会失效。

nginx 的 realip 模块支持 PROXY protocol 的 v1 和 v2 两个版本,两者的配置写法完全相同,版本在面板中按本地服务支持情况选择即可。

具体配置见 获取访客真实IP。

HTTPS

需要 HTTPS 时,可以启用 AutoTLS 由客户端自动签发证书,也可以自行在 nginx 上配置证书。两种方式见 AutoTLS。

常用命令

操作命令
校验配置是否正确nginx -t
重载配置nginx -s reload
优雅停止nginx -s quit
立即停止nginx -s stop

常见问题

改了配置但没有生效

执行 nginx -s reload。若命令报错,先用 nginx -t 查看是哪一行配置有问题。

启动失败且没有任何提示

在 nginx 目录下执行 nginx -t 校验配置,或查看 logs/error.log。Windows 下双击启动时错误信息不会显示在窗口中。

访问日志里记录的全是 127.0.0.1

这是 FRP 转发后的正常现象,需要额外配置才能拿到访客真实 IP,见 获取访客真实IP。

80 端口被占用

Windows 下可执行 netstat -ano | findstr :80 查看占用进程;也可以把 listen 改成其它端口,同时修改隧道的本地端口。