- Các
hosts
tập tin chỉ dành cho độ phân giải tên máy chủ
- Các trình duyệt , trong trường hợp không trực tiếp xác định các cổng: ví dụ
<hostname>:<port>
, giá trị mặc định cho cổng80
Kịch bản vấn đề điển hình
- các ứng dụng thường đặt máy chủ của họ thành cùng một địa chỉ IP mặc định
127.0.0.1
aka localhost
(được xác định trong tệp máy chủ) .
để tránh xung đột giữa các máy chủ hiện có / đang chạy khác, ứng dụng thường cho phép bạn thay đổi cổng, nhưng không phải là địa chỉ IP.
2a. Nếu bạn có thể thay đổi địa chỉ IP của máy chủ thành địa chỉ khác trong không gian địa chỉ dành riêng cho loopback 127.0.0.0/8
, thì có lẽ bạn sẽ không cố gắng đặt cổng trong tệp máy chủ.
Giải pháp có thể
Bạn có thể giải quyết vấn đề này bằng cách sử dụng Windows bao gồm công cụ Mạng netsh
làm proxy cổng.
Tổng quat
example.app
| <--browser defaults to port 80
+--> example.app:80
| <--Hostname resolution by Hosts File
+--> 127.65.43.21:80
| <--Link by netsh Utility
+--> 127.0.0.1:8081
Hành động
- Bắt đầu máy chủ của bạn trên
localhost:8081
- Thêm "DNS cục bộ" trong tệp máy chủ dưới dạng một dòng mới
127.65.43.21 example.app
- Bất kỳ địa chỉ miễn phí trong mạng
127.0.0.0/8
có thể được sử dụng.
- Lưu ý: Tôi giả sử
127.65.43.21:80
không bị chiếm bởi dịch vụ khác.
- Bạn có thể kiểm tra với
netstat -a -n -p TCP | grep "LISTENING"
- thêm cấu hình mạng sau với tiện ích
lệnh Netsh
netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
- Truy cập máy chủ tại
http://example.app
Lưu ý:
- Những sửa đổi lệnh / tệp này cần được thực thi với quyền Quản trị viên
- Netsh portproxy cần các thư viện ipv6 thậm chí chỉ để sử dụng v4tov4, thông thường chúng cũng sẽ được bao gồm theo mặc định, nếu không thì cài đặt chúng bằng lệnh sau:netsh interface ipv6 install
Bạn có thể thấy mục bạn đã thêm bằng lệnh:
netsh interface portproxy show v4tov4
Bạn có thể xóa mục nhập bằng lệnh sau:
netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21
Liên kết đến Tài nguyên:
Lưu ý: câu trả lời này là một bản sao câu trả lời của tôi được thảo luận trong câu hỏi / câu trả lời tương tự này trên stackoverflow.