Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何配合nginx使用? #53

Closed
openmynet opened this issue Jul 26, 2016 · 10 comments
Closed

如何配合nginx使用? #53

openmynet opened this issue Jul 26, 2016 · 10 comments
Labels

Comments

@openmynet
Copy link

远程服务器里有web服务,使用nginx作为服务前端,frp要如何配合nginx使用?
以下配置测试了行不通。需要如何配置
nginx配置:
server {
listen 80;
server_name demo.*;
location / {
proxy_pass http://127.0.0.1:7000;
}
}
frps.ini 配置
[common]
bind_port = 7000
vhost_http_port = 8008
[web01]
type = http
custom_domains = demo.exampledomain.com

frpc.ini 配置
[common]
server_addr = 162...*
[web01]
type = http
local_ip = 127.0.0.1
local_port = 80

@fatedier
Copy link
Owner

我测试了一下这种情况是可以通过的,你可以检查下以下几个地方是否存在问题:

  1. 配置文件中的 auth_token 参数有没有配置?需要在 frps.ini 的 [web01] 以及 frpc.ini 的 [common] 里配置相同的 auth_token。
  2. 检查下 frps 和 frpc 是否启动成功了,日志里是否有出错信息,没有配置 auth_token 程序会输出错误信息后退出。
  3. proxy_pass http://127.0.0.1:7000 这个是 web 服务的地址吗?检查端口是否正确。可以直接访问 nginx 看是否有问题。
  4. 如果仍然有问题,可以贴一下出错的详细信息。

@openmynet
Copy link
Author

1、配置文件中的auth_token 已配置成相同的了
2、为避免影响,暂时将nginx关掉了,frps.ini 中的 vhost_http_port = 80
3、服务端的frps从日志上看没有报错都是success
4、客户端的frpc 日志如下:
2016/07/26 15:21:28 [main.go:109] [I] Start frpc success 2016/07/26 15:21:29 [control.go:181] [I] Start to send heartbeat to frps 2016/07/26 15:21:48 [conn.go:182] [W] join connections error, read tcp 127.0.0.1:62754->127.0.0.1:80: read tcp 192.168.1.132:62755->162.*.*.201:7000: use of closed network connection 2016/07/26 15:21:51 [conn.go:182] [W] join connections error, read tcp 127.0.0.1:62758->127.0.0.1:80: read tcp 192.168.1.132:62759->162.*.*.201:7000: use of closed network connection

@fatedier
Copy link
Owner

你这个 frpc 好像用的不是最新的 0.7.0 的版本,建议更新,有没有可能 frps 更新了 0.7.0 的版本,因为协议不兼容导致 frpc 无法正常工作。

从日志来看像是连接刚建立就被中断了,如果不是上面的原因,可以将 frp 的代理类型 设置成 tcp 的方式测试一下是否正常,日志级别设置成 debug,方便定位问题。

@openmynet
Copy link
Author

frpc是winx64版本的0.7.0 ,包里面的frps.ini和linux64包里的frps.ini略有不同

@openmynet
Copy link
Author

以下是debug级别的通信信息:
2016/07/26 19:20:28 [main.go:109] [I] Start frpc success 2016/07/26 19:20:28 [control.go:160] [D] ProxyName [web01], read [{"type":3,"code":0,"msg":""} ] 2016/07/26 19:20:28 [control.go:173] [D] ProxyName [web01], connect to server [162.0.0.0:7000] success! 2016/07/26 19:20:28 [control.go:181] [I] Start to send heartbeat to frps 2016/07/26 19:20:48 [control.go:185] [D] Send heartbeat to server 2016/07/26 19:20:49 [control.go:101] [D] ProxyName [web01], receive heartbeat response 2016/07/26 19:21:06 [control.go:104] [D] ProxyName [web01], new user connection 2016/07/26 19:21:06 [client.go:91] [D] Join two connections, (l[127.0.0.1:65462] r[127.0.0.1:80]) (l[192.168.1.132:65463] r[162.0.0.0:7000]) 2016/07/26 19:21:06 [conn.go:182] [W] join connections error, read tcp 127.0.0.1:65462->127.0.0.1:80: read tcp 192.168.1.132:65463->162.0.0.0:7000: use of closed network connection 2016/07/26 19:21:07 [control.go:104] [D] ProxyName [web01], new user connection 2016/07/26 19:21:07 [client.go:91] [D] Join two connections, (l[127.0.0.1:65466] r[127.0.0.1:80]) (l[192.168.1.132:65467] r[162.0.0.0:7000]) 2016/07/26 19:21:07 [conn.go:182] [W] join connections error, read tcp 127.0.0.1:65466->127.0.0.1:80: read tcp 192.168.1.132:65467->162.0.0.0:7000: use of closed network connection 2016/07/26 19:21:08 [control.go:185] [D] Send heartbeat to server 2016/07/26 19:21:09 [control.go:101] [D] ProxyName [web01], receive heartbeat response 2016/07/26 19:21:28 [control.go:185] [D] Send heartbeat to server 2016/07/26 19:21:29 [control.go:101] [D] ProxyName [web01], receive heartbeat response 2016/07/26 19:21:48 [control.go:185] [D] Send heartbeat to server 2016/07/26 19:21:49 [control.go:101] [D] ProxyName [web01], receive heartbeat response

@fatedier
Copy link
Owner

fatedier commented Jul 26, 2016

从日志里面打印的代码行数来看,确实不是 0.7.0 版本的客户端,你用 ./frpc.exe --version 看一下版本号是否正确。而且我看 0.7.0 版本 windows 和 linux 压缩文件里的 frps.ini 是一样的。

@openmynet
Copy link
Author

openmynet commented Jul 27, 2016

问题找到了,frpc确实不是0.7.0的,包是使用远程服务器下载的,不知怎么的下到了0.6.0的
贴下运行nginx和frps成功后的配置
nginx:

map $http_x_forwarded_for $clientRealip {
   "" $remote_addr;
   ~^(?P<firstAddr>[0-9\.]+),?.*$  $firstAddr;
}

server {
       listen 80;
       server_name demo.*;
       ## 将demo(demo.open.it)二级域名转发到8008端口
       location / {
           proxy_pass http://127.0.0.1:8008;  # frps.ini 里的 vhost_http_port = 8008
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $clientRealip;  # $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
}

frps.ini 配置 修改

[common]
 #与nginx里的端口号相匹配
 vhost_http_port = 8008
[web01]
 type = http
 auth_token = demo.open.it
# 域名
 custom_domains = demo.open.it

frpc.ini 配置

[common]
auth_token = demo.open.it

其他的使用默认配置

@se77en
Copy link

se77en commented Aug 26, 2016

@openmynet 请教一下,我客户端也配置了一个 nginx,然后拿不到真实 IP,access-log 打出来都是 127.0.0.1,frp 配置方式是客户端特权模式

@openmynet
Copy link
Author

@se77en 客户端的nginx配置和网站服务器nginx配置类似

server {
       listen 80;
       server_name demo.*;
       location / {
            proxy_pass http://127.0.0.1:8080; # 本地服务器地址
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_max_temp_file_size 0;
            proxy_redirect off;
            proxy_read_timeout 240s;
       }
}
webclient => remote.nginx => frps =>frpc =>local.nginx => local.server

@yjiawqgj
Copy link

问题找到了,frpc确实不是0.7.0的,包是使用远程服务器下载的,不知怎么下到了0.6.0的
贴下运行nginx和frps成功后的配置
nginx:

map $http_x_forwarded_for $clientRealip {
   "" $remote_addr;
   ~^(?P<firstAddr>[0-9\.]+),?.*$  $firstAddr;
}

server {
       listen 80;
       server_name demo.*;
       ## 将demo(demo.open.it)二级域名转发到8008端口
       location / {
           proxy_pass http://127.0.0.1:8008;  # frps.ini 里的 vhost_http_port = 8008
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $clientRealip;  # $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
}

frps.ini 配置修改

[共同] 
 #与nginx的里的端口号相匹配
 vhost_http_port = 8008
 [WEB01]
 类型= HTTP
 的auth_token = demo.open.it
 #域名
 custom_domains = demo.open.it

frpc.ini 配置

[通用] 
auth_token = demo.open.it

其他的使用默认配置

请问你是用nginx来免端口访问内网的吗?我使用的是最新0.37.1版本,已经不适用你的配置了。能帮我看一下吗?如果可以请回复。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants