Trong nhiều trường hợp, máy local (PC ở nhà, Windows + XAMPP) không có IP tĩnh, nằm sau NAT của nhà mạng nên không thể truy cập từ Internet.
Giải pháp gọn – nhanh – dân dev rất hay dùng là Reverse SSH Tunnel.
Bài này hướng dẫn từ A–Z, ví dụ thực tế:
👉 Public web local port 80 ra ngoài Internet thông qua VPS, dùng SSH.
Reverse SSH Tunnel cho phép:
8080)VPS:8080 sẽ được đẩy ngược về localLuồng thực tế:
Internet ↓ VPS_IP:8080 ↓ (SSH tunnel) LOCAL:127.0.0.1:80 ↓ Apache / Nginx / XAMPP
👉 Không cần:
127.0.0.1:80Mở file cấu hình SSH:
sudo nano /etc/ssh/sshd_config
Đảm bảo có (hoặc thêm):
AllowTcpForwarding yes GatewayPorts yes
GatewayPorts yesrất quan trọng
❌ Nếu không có → chỉ truy cập được từ localhost VPS
Restart SSH:
sudo systemctl restart ssh
vps_vnengineer (khuyến nghị)Trên máy local, mở:
nano ~/.ssh/config
Thêm:
Host vps_vnengineer
HostName VPS_IP
User root
Port 22
👉 Sau này chỉ cần gõ ssh vps_vnengineer cho gọn.
Chạy trên máy local:
ssh -f -N -g -R 0.0.0.0:8080:127.0.0.1:80 vps_vnengineer
ssh -f -N -g -R 0.0.0.0:8080:127.0.0.1:80 vps_vnengineer
| Thành phần | Ý nghĩa |
|---|---|
ssh vps_vnengineer | Local chủ động kết nối ra VPS |
-R | Reverse tunnel |
0.0.0.0:8080 | VPS mở cổng 8080 cho toàn Internet |
127.0.0.1:80 | Đẩy request về web local |
-f | Chạy nền |
-N | Không mở shell |
-g | Cho phép host ngoài truy cập |
curl http://localhost:8080
(chạy ở local → KHÔNG đúng)
curl http://localhost:8080
curl http://VPS_IP:8080
Nếu thấy HTML web local → Tunnel OK 🎉
Ví dụ:
htdocs/site1htdocs/site2Bạn cấu hình VirtualHost trên Apache local:
<VirtualHost *:80>
ServerName site1.local
DocumentRoot "D:/xampp/htdocs/site1"
</VirtualHost>
Sau đó truy cập:
http://VPS_IP:8080
👉 Apache local xử lý như bình thường.
screen / tmuxVPS_IP:8080✔️ Lệnh:
ssh -f -N -g -R 0.0.0.0:8080:127.0.0.1:80 vps_vnengineer
✔️ Đây là Reverse SSH Tunnel chuẩn chỉnh
✔️ Giải pháp gọn gàng để public web local ra Internet