隨着技術的發展,內網穿透已經越來越成為了一種非常重要的技術,在很多場合下需要訪問內網或者局域網,例如,遠程控制、遠程辦公、家庭IP訪問等等。在這個過程中,NGINX 內網穿透是其中非常重要的一種技術。
一、內網穿透的概念
內網穿透是通過外部網絡與內部網絡之間的安全隧道,將本地服務暴露給公網訪問或通過公網訪問內網資源的一種技術。開發人員通過內網穿透能夠輕易地把本地開發環境或者局域網上的資源對外開放,方便外界進行訪問。
在技術細節上,內網穿透需要解決兩個問題,其一是如何將公網請求轉發到內網,其二是如何解決內網服務的 IP 不具備公網訪問能力。
二、NGINX 內網穿透的實現
從技術實現上,NGINX 的內網穿透主要是通過兩個模塊來進行實現的:
1. upstream 模塊
upstream 模塊可以將後端服務初始化為一個群組,它可以代表多個服務器。這個功能使得NGINX可以將請求自動轉發到可用服務器上。
upstream my_backend { server backend1.example.com:8080; server backend2.example.com:8080; server backend3.example.com:8080; }
2. stream 模塊
stream 模塊可以通過 TCP、UDP 或者 SSL/TLS 協議來代理連接。當我們需要穿透時,它能夠幫助我們將請求發送到內網指定端口並進行轉發。
stream { upstream my_backend { hash $remote_addr consistent; server backend1.example.com:443; server backend2.example.com:443; } server { listen 8443; proxy_pass my_backend; } }
三、NGINX 內網穿透的應用實例
1. 將內網服務部署到公網
我們可以通過後端的 upsteam 模塊,將內網服務器的端口綁定到外網的端口上,實現內網服務器訪問公網的能力:
upstream local_backend { server 127.0.0.1:8080; } server { listen 80; location / { proxy_pass http://local_backend; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Nginx-Proxy true; } }
2. 內網穿透 Websocket 服務
Websocket 是一種前端通信協議,它能夠與服務器進行實時的數據通信。我們可以通過 stream 模塊將 websocket 服務部署到公網,並將 websocket 服務的請求進行轉發。
stream { upstream websocket { hash $remote_addr consistent; server backend:8080; } server { listen 443; proxy_pass websocket; } } server { listen 8080; root /var/www/html; index index.html; }
3. 內網穿透 SSH 服務
SSH 是一種遠程登錄協議,它能夠在不同的設備之間進行加密的遠程登錄。我們可以通過 stream 模塊將內網服務器的 SSH 服務穿透到公網,並進行轉發。
stream { upstream ssh { hash $remote_addr consistent; server backend:22; } server { listen 2222; proxy_pass ssh; } }
四、總結
NGINX 的內網穿透技術已經被廣泛應用於不同的場合,可以幫助我們將內網服務器暴露出來,方便外部的訪問。在實現上,upstream 和 stream 模塊都是非常重要的技術點,它們可以幫助我們更加方便地進行 NGINX 內網穿透的實現。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/248268.html