frp 和 nginx 搭建一個內網穿透伺服器

此刻發表於2019-01-19

相關資料

下載

下載地址:https://github.com/fatedier/f…
選擇對應的版本進行下載

wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_386.tar.gz

如果是windows需要下載windos版本

wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_darwin_amd64.tar.gz

下載後、我的服務端是centos 客戶端是windows

服務端需要關注的檔案是 frps、frps.ini
客戶端需要關注的檔案是 frpc(或者是frpc.exe)、frpc.ini

注意,如果執行的環境是windows就要執行windows版本的,也就是exe字尾的

配置服務端

配置檔案

# frps.ini
[common]
#服務端需要開啟的埠(與客戶端繫結的進行通訊的埠)
bind_port = 7000
#服務端需要開啟的埠(訪問客戶端web服務自定義的埠號)
vhost_http_port = 8081
auth_token = websong

type = http
custom_domains = abc.baidu.com
auth_token = websong

配置檔案說明

  • bind_port
    服務端需要開啟的埠
  • vhost_http_port
    服務端需要開啟的埠
  • auth_token
    需要客戶端的auth_token與此一樣
  • type
    其實除了http還有其他引數,比如tcp,這裡只講述http,其他的請看相關文件: https://github.com/fatedier/frp
  • custom_domains
    域名
    具體接下來在配置客戶端說明

啟動服務

正常啟動,ctrl+c能推出

 ./frps -c ./frps.ini

後臺啟動

nohup ./frps -c ./frps.ini &

如果有興趣,更可以設定成開機啟動(這裡不講述)

配置客戶端

配置檔案

# frpc.ini
[common]
server_addr = 48.104.176.184
server_port = 7000
auth_token = websong

[web6]
type = http
local_port = 80
custom_domains =b.abc.baidu.com

配置檔案講解

  • server_addr
    對應伺服器ip ,
  • server_port
    與服務端配置bind_port一樣
  • auth_token
    與服務端配置auth_token一樣
  • [web6]
    這個是唯一的,假如在另外一個客戶端用了web6將會報明顯的錯誤
  • local_port
    此埠,假如是80,那就是訪問客戶端機器的80埠
  • custom_domains
    域名 這裡重點說一下,這個引數可以填的域名有

     abc.baidu.com
    *.abc.baidu.com

    但是,這些域名都是需要解析到伺服器ip的
    *.abc.baidu.com 這裡就需要使用到域名泛解析
    具體百度即可

客戶端啟動

./frpc -c ./frpc.ini

windows

 ./frpc.exe -c ./frpc.ini

後臺啟動前面加 nohup 跟服務端一樣

nohup ./frpc.exe -c ./frpc.ini

穿透成功

啟動網站

如果以上服務端啟動,客戶端啟動都沒問題的話
以客戶端的配置的域名:custom_domains
和 服務端配置的埠vhost_http_port在瀏覽器開啟即可
也就是 b.abc.baidu.com:8081
其實這些就相當於訪問你客戶端本機的
127.0.0.1:80 或者localhost:80,
這個80埠是客戶端配置檔案的的local_port

至此內網穿透完成

但是

  • 但是剛剛有沒有發現,訪問的是帶埠的網址,b.abc.baidu.com:8081
  • 如果不想帶埠呢,瀏覽器的預設埠是80,也就是說,我把服務端vhost_http_port,配置成80就好了,當然這樣能解決
  • 但是如果伺服器有其他程式佔用80埠呢,比如nginx,總不能把nginx換成其他埠吧,那我的部落格www.blog.com就因為這個得改成www.blog.com:9090 假設改成9090,所以肯定有辦法公用的
  • 辦法就是,我們可以利用nginx的反向代理就能完成,請接下來往下看 配置nginx

原文地址:http://www.taoluyuan.com/index.php/archives/42/

配置nginx

配置檔案

server{
 listen 80;
    server_name *.abc.baidu.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/abc/;

 location / 
    {
        proxy_pass http://48.104.176.184:8081;
        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 REMOTE-HOST $remote_addr;                       
    }
}

說明

如配置檔案所屬

  • 本來是需要訪問 http://b.abc.baidu.com:8081 的
  • nginx使用了泛域名配置,*.abc.baidu.com (你自己的域名肯定不一樣)
 server_name *.abc.baidu.com;
  • 反向代理配置
 proxy_pass http://48.104.176.184:8081;

ip是服務端的ip,埠是服務端配置vhost_http_port 8081

至於nginx的其他引數,跟平常大多數nginx配置網站引數一樣
這裡使用到了nginx泛域名解析,和反向代理

完成開啟網站

如果客戶端配置的custom_domains是b.abc.baidu.com
在瀏覽器輸入 b.abc.baidu.com ,就不用帶埠號8081 ,應為已經被nginx反向代理了;
這樣做的好處是

  • 使用的時候直接在瀏覽器輸入域名就可以,不用輸入埠,使用者也不用知道服務端的vhost_http_port 埠是什麼,
  • 讓伺服器其他網站的埠可以不用改;

原文地址:http://www.taoluyuan.com/index.php/archives/42/

相關文章