家庭服務器搭建並提供公網Http服務

前陣子組裝了一個主機,然後在主機上搭建了一個Linux的服務器,這裏主要記錄其流程和碰到的問題。

1. 安裝Ubuntu Server 20.04

製作U盤啓動盤並安裝

  • Mac系統下推薦balenaEtcher工具燒錄U盤鏡像。具體參考https://cto.eguidedog.net/node/826、
  • 設置U盤啓動並安裝https://www.jianshu.com/p/da49cd69e8ff

注意Ubuntu Server版本並沒有圖形界面,因此後續的安裝都需要鍵盤配合完成。

無線上網

Ubuntu Server默認沒有無線客戶端,需要安裝一個客戶端之後才能配置無線,這段時間需要先連網線上網。

完成上述兩個步驟之後就可以愉快無線上網了,配置無線網的時候,注意網卡名,一般比較長,輸入的時候多檢查一下。

SSH上網

如果在安裝的時候沒有勾選ssh服務,這一步可能需要手動安裝ssh後才能使用ssh,參考https://blog.csdn.net/qq_34814495/article/details/108739713

配置ssh key等內容可以參考之前的博客https://lfeng.tech/2019/09/20/Linux-VPS-configure/

其他問題

安裝軟件包遇到鎖的問題

https://askubuntu.com/questions/1109982/e-could-not-get-lock-var-lib-dpkg-lock-frontend-open-11-resource-temporari

ubuntu未使用全部磁盤

手動擴展磁盤:https://askubuntu.com/questions/1269493/ubuntu-server-20-04-1-lts-not-all-disk-space-was-allocated-during-installation

開機等待網絡連接

開機時間長,顯示A start job is running for wait for network to be configured,可以設置網絡連接爲optional。

https://askubuntu.com/questions/972215/a-start-job-is-running-for-wait-for-network-to-be-configured-ubuntu-server-17-1

使用python3爲默認的python

sudo apt install python-is-python3 這樣當升級python後依然有效,比alias方便。

2. 外網訪問家庭Ubuntu服務器

外網訪問ubuntu家庭服務器的核心,就是如何找到家庭內網環境中的Ubuntu,具體來講根據能否獲取公網ip,可以分爲如下兩種方案:

  • 有公網ip,對於家庭環境,可以採用路由器撥號上網,獲取ip,然後設置端口轉發即可。如果是非固定公網ip,可以採用ddns綁定免費域名進行訪問,也可以利用dnspod等提供的api動態刷新ip來綁定頂級自定義域名。

  • 無公網ip,需要內部ubuntu和公網的server之間建立內網穿透,實現在公網訪問內部ubuntu的目的。

-商業服務:花生殼、ngrok等,主要缺點免費版本速度慢、安全性問題。

-自建服務:在一臺有公網ip的機器上配置frp,和本地局域網中的ubuntu建立連接,實現內網穿透。

由於家中寬帶無公網ip,以及出於安全考慮,我在利用騰訊vps配置了frp,來和本地局域網ubuntu連接,實現內網穿透。這樣內網的端口就可以暴露到外網,並且可以綁定域名進行訪問。

第一次登錄騰訊ubuntu:先使用網頁版設置root以及個人用戶,賬號和密碼

設置root用戶密碼:sudo passwd root

以後切換root用戶只需:su root。

如何配置frp可以參考官方git的readme,後續也會講到。

3. 映射Http服務

這節主要介紹如何將家庭ubuntu上的http服務暴露到公網,以下是整個原理結構。瀏覽器在訪問域名時,nginx把80和443的請求都轉發到本機的5000端口;frp運行通過8000端口與本地的ubuntu server進行通信,然後將本地的5000端口也映射到服務器的5000端口,這樣通過外網就可以訪問到家裏的http服務了。

image-20220129165252881

準備工作:

  • VPS安裝好Nginx,frp,綁定好對應的域名。https證書可以參考https://www.v2fy.com/p/2021-06-27-nginx-https-1624774964000/,注意可能需要切換證書服務商(acmesh issue證書問題,切換默認服務器到letsencrypt acme.sh --set-default-ca --server letsencrypt)
  • Ubuntu server上同時安裝好frp。

VPS端配置

配置Nginx轉發

主要兩個功能,一是將80同時轉發到443,強制https驗證。二是將443的流量轉發到本地5000端口。可以新建abc.lfeng.tech.conf,填入下面內容:

server {
    listen       80;
    listen       [::]:80;
    server_name  abc.lfeng.tech;
    rewrite ^(.*)$ https://$host$1 permanent;
}

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  abc.lfeng.tech;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host:443;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    ssl_certificate "/etc/nginx/ssl/abc.lfeng.tech/fullchain.cer";
    ssl_certificate_key "/etc/nginx/ssl/abc.lfeng.tech/abc.lfeng.tech.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

frp配置

編輯frps.ini並填入以下內容:

[common]
bind_port = 8000
vhost_http_port = 5000

這樣將ubuntu server上的5000在vps上暴露出來。

Ubuntu Server配置

ubuntu這邊比較簡單,不需要配置ssl證書用於https驗證, 也不需要nginx,只需要配置好frpc.ini就好了。

[common]
server_addr = 8.8.123.123
server_port = 8000

[web]
type = http
local_port = 5000
custom_domains = abc.lfeng.tech

[webs]
type = https
local_port = 5000
custom_domains = abc.lfeng.tech

注意需要把https和http全部配置上去,這樣直接就可以通過abc.lfeng.tech來加密訪問本地的5000端口上的http服務了。


參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章