Nếu bạn cần truy cập các port của mình từ ngoài Internet hoặc truy cập web của bạn, có nhiều công cụ bạn có thể sử dụng. Ví dụ: ngrok , pagekite …
Hoặc bạn có thể truy cập thông qua một máy chủ (server) nếu bạn có sẵn hoặc không muốn sử dụng các dịch vụ bên thứ 3 mất phí. Nó có thể hỗ trợ SSL và hoạt động sau NAT. Bài viết này sẽ hướng dẫn bạn tự build một service giống như ngork thông qua ssh tunnel.
Thiết lập máy chủ
Bạn sẽ cần một máy chủ nginx được cài đặt trên VPS của mình và một tên miền trỏ đến nó, chẳng hạn như dev.example.com
.
Sau đó thêm cấu hình nginx này (hoặc tương tự):
server { listen 80; server_name dev.example.com; rewrite ^ https://dev.example.com$request_uri? permanent; } server { listen 443 ssl http2; server_name dev.example.com; access_log off; error_log off; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Host $http_host; } ssl_certificate /path/to/ssl/dev.example.com/fullchain.pem; ssl_certificate_key /path/to/ssl/dev.example.com/privkey.pem; }
Phần thú vị là proxy_pass
. Nó sẽ trỏ dev.example.com
đến local port 8000
trên máy chủ.
Đảm bảo rằng dòng sau có trong /etc/ssh/sshd_config
và restart SSH server nếu cần:
GatewayPorts clientspecified
Thiết lập local
Bây giờ bạn cần tạo một đường hầm SSH giữa máy local của bạn và máy chủ.
Trên máy tính của bạn, hãy đặt chức năng này bên trong .bashrc
của bạn (hoặc .zshrc
nếu bạn đang sử dụng ZSH). Trong ví dụ này, me
là một user linux từ xa để truy cập SSH vào VPS.
function devtunnel { ssh -nNT -R "127.0.0.1:8000:localhost:${1}" me@dev.example.com }
Điều này sẽ chuyển tiếp cổng từ xa 8000
đến cổng local được chỉ định như một đối số; -n
ngăn việc đọc từ stdin, -N
có nghĩa là bạn không muốn thực hiện các lệnh từ xa, -T
vô hiệu hóa tty và -R
có nghĩa là chuyển tiếp cổng ngược lại.
Hoặc bạn không muốn cài đặt chức năng này trong terminal, bạn có thể chạy lệnh trực tiếp như sau:
ssh -nNT -R "127.0.0.1:8000:localhost:<port local>" me@dev.example.com
Sử dụng
Sau khi thiết lập này, việc hiển thị máy chủ phát triển cục bộ của bạn rất dễ dàng. Nếu bạn đang chạy máy chủ web ở local của mình trên cổng 3000
. Để có thể truy cập nó từ internet, hãy chạy lệnh này:
devtunnel 3000
Sau đó, bạn (hoặc người khác) có thể truy cập dev.example.com
để truy cập vào web đang chạy ở local của bạn.