FRP 和 Nginx 共用 80 端口

虽然在 FRPopen in new window 官网中给了 web 服务配置的示例,但在实际使用中存在两个问题:

  • 有时部分资源找不到,导致页面无法渲染
  • 域名后面还带一个端口,实在有点丑

配置

1. 服务器端 FRP 配置

[common]
bind_port = 7000
vhost_http_port = 8080
subdomain_host = frp.xxx.com

2. 服务器端 Nginx 配置

利用正则来匹配所有的 frp 二级域名。

# /etc/nginx/conf.d/frp.conf

server {
  listen       80;
  server_name  frp.xxx.com *.frp.xxx.com;

  #charset koi8-r;
  #access_log  /var/log/nginx/host.access.log  main;

  location / {
    proxy_pass              http://127.0.0.1:7000;
    # 此处简写
    proxy_set_header        Host $host;
  }


  #error_page  404              /404.html;

  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   /usr/share/nginx/html;
  }
}

3. 域名解析配置

根据 Nginx 的配置添加两项:

  • frp.xxx.com
  • *.frp.xxx.com

4. 客户端 FRP 配置

客户端的 Nginx 配置为默认时就可以使用,此处省略。

[common]
server_addr = xxx.xx.xx.xxx
server_port = 7000

# [ssh] 省略

[web1]
type = http
local_ip = 127.0.0.1
local_port = 80
subdomain = sub1

测试

最后通过浏览器访问 sub1.frp.xxx.com 即可展现效果。