最近電信把個人公網地址收回去了,以前作好的網絡端口映射失效了,在公司已經不能愉快地訪問家裏的網絡。原先網絡結構示意圖以下:nginx
用戶 | NGINX | frps | frpc |
https://jiangguogang.club | 直接返回"Welcome" | - | - |
https://jiangguogang.club/photo | 轉127.0.0.1:5002 | TCP通道轉frpc | 轉192.168.1.200:80 |
https://dms.jiangguogang.club | 轉127.0.0.1:5000 | TCP通道轉frpc | 轉192.168.1.200:5000 |
https://webdav.jiangguogang.club | 轉127.0.0.1:5005 | TCP通道轉frpc | 轉192.168.1.200:5005 |
https://router.jiangguogang.club | 轉127.0.0.1:5003 | TCP通道轉frpc | 轉192.168.1.1:80 |
server { server_name jiangguogang.club; location / { add_header Content-Type text/plain; return 200 'Welcome! I am Jiang Guogang.'; #直接返回字符串 } location /photo/ { proxy_pass http://127.0.0.1:5002; #轉至本地的5002端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } #啓用https,證書來自於Let's encrypt. 建議使用Certbot,具體參考Let's encrypt的官網 listen 443 ssl; ssl_certificate /etc/letsencrypt/live/jiangguogang.club/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/jiangguogang.club/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } server { server_name dsm.jiangguogang.club; location / { proxy_pass http://127.0.0.1:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/dsm.jiangguogang.club/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/dsm.jiangguogang.club/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } server { server_name webdav.jiangguogang.club; location / { proxy_pass http://127.0.0.1:5005; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/webdav.jiangguogang.club/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/webdav.jiangguogang.club/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } server { server_name router.jiangguogang.club; location / { proxy_pass http://127.0.0.1:5003; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/router.jiangguogang.club/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/router.jiangguogang.club/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } #下面的配置的意思是:對http的訪問將會重定向至https server { if ($host = photo.jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name photo.jiangguogang.club; return 404; } server { if ($host = webdav.jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name webdav.jiangguogang.club; return 404; } server { if ($host = dsm.jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name dsm.jiangguogang.club; return 404; } server { if ($host = jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name jiangguogang.club; return 404; } server { if ($host = router.jiangguogang.club) { return 301 https://$host$request_uri; } listen 80; server_name router.jiangguogang.club; return 404; }
[common] #服務器監聽端口7000 bind_port = 7000 #服務器web管理界面的訪問端口 dashboard_port = 7001 #服務器web管理界面用戶名 dashboard_user = admin #服務器web管理界面密碼(記得改爲你的) dashboard_pwd = 123456 #日誌文件 log_file = ./frps.log #日誌等級 log_level = info #日誌保留天數 log_max_days = 3 #客戶端訪問token(記得改爲你的) token = 654321 #服務器端容許客戶端請求的端口範圍是5000到5009 allow_ports = 5000-5009 max_pool_count = 5 max_ports_per_client = 0 authentication_timeout = 900 #使用多路複用 tcp_mux = true
[common] #服務器的地址(公網) server_addr = 123.123.123.123 #服務器的監聽端口 server_port = 7000 #服務器的token(改爲你的) token = 654321 #日誌文件配置,調試的時候就靠這個了 log_file = /var/log/frpc.log log_level = info log_max_days = 3 #啓用多路複用 tcp_mux = true #協議,除了TCP以外還有一個通過改進的協議,但我這邊使用時候遇到了點問題,仍是用TCP吧 protocol = tcp #不要登陸失敗就退出 login_fail_exit = false #應用名稱 [dsm] #http是基於TCP協議的,我統一都當成TCP來處理好了 type = tcp #本地IP地址 local_ip = 192.168.1.200 #本地端口 local_port = 5000 #服務器上要打開的端口 remote_port = 5000 #使用加密 use_encryption = true #使用壓縮 use_compression = true [photo] type = tcp local_ip = 192.168.1.200 local_port = 80 remote_port = 5002 use_encryption = true use_compression = true [webdav] type = tcp local_ip = 192.168.1.200 local_port = 5005 remote_port = 5005 use_encryption = true use_compression = true [router] type = tcp local_ip = 192.168.1.1 local_port = 80 remote_port = 5003 use_encryption = true use_compression = true