NGINX
准备 NGINX
从 nginx 官网 下载对应系统的版本,解压到任意目录即可,无需安装。建议放在不含空格和中文的路径下。
解压后的目录结构:
| 路径 | 说明 |
|---|---|
nginx.exe | 主程序(Linux 下为 nginx) |
conf/nginx.conf | 主配置文件 |
html/ | 默认站点根目录 |
logs/ | 访问日志与错误日志 |
启动并验证
在 nginx 目录下打开终端(Windows 为 PowerShell 或命令提示符),执行:
start nginx
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 隧道:
| 参数 | 填写内容 |
|---|---|
| 本地 IP | 127.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 改成其它端口,同时修改隧道的本地端口。