Sử dụng số cổng trong tệp máy chủ Windows


189

Sau khi cài đặt TeamViewer, tôi đã thay đổi cổng wamperver thành 8080, vì vậy địa chỉ là http://localhost:8080.

Đối với tệp máy chủ được đặt tại C: \ WINDOWS \ system32 \ driver \ etc \, tôi cũng đã thực hiện thay đổi như dưới đây

TRƯỚC
127.0.0.1 www.example.com

SAU
127.0.0.1:8080 www.example.com

Khi tôi truy cập www.example.com, nó không chuyển hướng đến máy chủ của tôi, làm cách nào để khắc phục?


Bạn cần máy chủ HTTP NGNIX hoặc Apache làm máy chủ proxy để chuyển tiếp các yêu cầu http đến ứng dụng phù hợp -> lắng nghe cổng cụ thể (hoặc thực hiện với CNAME cung cấp cho công ty Hosting)
Musa


Có thể xem lại điều này và chuyển câu trả lời được chấp nhận sang câu trả lời Netsh? Tôi đã kết thúc ở đây khi cố gắng tìm ra cách ánh xạ các tên miền .test vào hình ảnh docker của tôi cục bộ trên Windows 10 và câu trả lời Netsh hoạt động như một cơ duyên!
Jereme 14/2/19

Câu hỏi là: bạn đang cố gắng chuyển hướng toàn bộ máy chủ đến một cổng duy nhất (?!) Hay chỉ là cổng 80 (của máy chủ đó) sang cổng 8080? Hầu hết các câu trả lời ở đây là về cách chuyển hướng (hoặc ít nhất là cố gắng chuyển hướng ... ;-) cổng 80 của máy chủ sang cổng 8080 của "localhost" của bạn. Ví dụ: https://www.example.comphải đến cổng 8080? hoặc theo mặc định 443? (như thường lệ) Điều đó có nghĩa là: bạn có muốn một https cũng được chuyển hướng đến cổng 8080 của localhost của bạn không? Hoặc bạn không quan tâm ở tất cả những nơi này sẽ được chuyển hướng?
ilias iliadis

Câu trả lời:


193

Các hoststập tin là dành cho máy chủ tên chỉ có độ phân giải (trên Windows cũng như trên Unix-like hệ thống). Bạn không thể đặt số cổng ở đó và không có cách nào để thực hiện những gì bạn muốn với cấu hình cấp hệ điều hành chung - trình duyệt là thứ chọn cổng để chọn.

Vì vậy, sử dụng dấu trang hoặc một cái gì đó như thế.
(Một số phần mềm tường lửa / định tuyến có thể cho phép chuyển hướng cổng ra, nhưng điều đó thực sự không giống như một tùy chọn hấp dẫn cho việc này.)


6
Làm thế nào để sử dụng dấu trang, bạn có thể dẫn chúng tôi đến một liên kết hoặc một số tài liệu hoặc hướng dẫn về điều này
adham dwikat

@Jereme: bạn nên nói điều đó với OP, tôi không thể làm gì về điều đó
Mat

1
@Mat Điều đó thật tuyệt phải không? Tôi chỉ muốn những người khác nhìn thấy điều này biết để cuộn xuống một chút và cho nó một shot. Tôi đã kết thúc ở đây khi cố gắng tìm ra cách ánh xạ các tên miền .test vào hình ảnh docker của tôi cục bộ trên Windows 10 và câu trả lời Netsh hoạt động như một cơ duyên!
Jereme 14/2/19

169

Những gì bạn muốn có thể đạt được bằng cách sửa đổi tệp máy chủ thông qua ứng dụng Fiddler 2 .

Thực hiện theo các bước sau:

  1. Cài đặt Fiddler2

  2. Điều hướng đến menu Fiddler2: - Công cụ > HOSTS .. (Bấm để chọn)

  3. Thêm một dòng như thế này: -

    localhost:8080 www.mydomainname.com

  4. Lưu tệp và sau đó kiểm tra www.mydomainname.comtrong trình duyệt.


34
Đây là một giải pháp tồi. Bạn cần phải có Fiddler chạy mọi lúc.
James Huckabone

48
@JamesHuckabone: Bạn có giải pháp nào tốt hơn không? chúng tôi thích điều đó
Rajat Gupta

16
Tôi nhận được Lỗi 400 Yêu cầu xấu khi tôi sử dụng phương pháp này
Sam

3
Điều này dường như không còn hoạt động. Thử nó với cả hai Fiddler2 và fiddler4
basher

1
@basher U vẫn có thể tạo kịch bản cho nó tại Rules.js của Fiddler. Chức năng của máy chủ lưu trữ trên Fiddler KHÔNG phải là các tệp lưu trữ Windows, đây là một cách giải trí của các tên đó để làm cho chúng dễ dàng hoạt động. Giống như Autoresponders, chỉ là một tập hợp con của những gì bạn có thể thực hiện kịch bản trực tiếp. Nếu bạn không thể làm gì với menu, hãy viết kịch bản.
m3nda

157

Tôi quản lý để đạt được điều này bằng cách sử dụng Windows bao gồm công cụ Mạng netsh.

Như Mat chỉ ra: Tệp máy chủ chỉ dành cho độ phân giải tên máy chủ, do đó, sự kết hợp của cả hai đã tạo ra mánh khóe cho tôi.

Thí dụ


Tổng quat

example.app:80
 |                           <--Link by Hosts File
 +--> 127.65.43.21:80
       |                     <--Link by netsh Utility
       +--> localhost:8081

Hành động

  • Bắt đầu máy chủ của tôi trên localhost:8081
  • Đã thêm "DNS cục bộ" của tôi 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( 127.x.x.x) có thể được sử dụng.
      • Lưu ý: Tôi giả sử127.65.43.21:80khô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
  • Bây giờ tôi có thể 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:


Điều này không làm việc cho tôi. Trong liên kết bạn đã hiển thị có nội dung "Ngoài ra, bạn không thể sử dụng 127.0.0.1 làm kết nối.".
Don Box

@DonBox: Nếu bạn cung cấp thêm một số chi tiết về thiết lập của mình, có lẽ tôi có thể giúp bạn. Sử dụng 127.0.0.1 làm địa chỉ kết nối về cơ bản là yêu cầu trong kịch bản trường hợp được trình bày bởi vì máy chủ bắt đầu tại localhost , theo mặc định nhiều chương trình khác. Nếu bạn có thể bắt đầu ở một địa chỉ khác mà bạn không cần toàn bộ cơ chế chuyển tiếp cổng, bạn chỉ cần sửa đổi tệp máy chủ ... Có lẽ, như chi tiết ở đây , bạn chưa cài đặt giao thức ipv6 : sử dụng lệnh sau để cài đặt họ:netsh interface ipv6 install
Pau Coma Ramirez

13
Đây phải là câu trả lời được chấp nhận vì các công cụ đã được cài đặt trong cài đặt Windows 10 cơ sở của tôi và điều này thực hiện chính xác những gì tôi cần. Tôi đã xem xét việc cài đặt apache và mod_proxy nhưng đây là một giải pháp tốt hơn nhiều.
Max Young

1
Không làm việc cho tôi. Netsh dường như chuyển tiếp địa chỉ, nhưng không phải là cổng.
steph643

2
Tôi sử dụng portainer của docker. Nó sử dụng localhost trên cổng 9000. Sửa đổi lệnh ở trên, tôi sử dụng portainer.local mà không phải chỉ định một cổng trên địa chỉ. Tôi đầu tiên, thêm 127.0.0.1làm địa chỉ để khớp portainer.localtrong tập tin máy chủ của tôi. Sau đó, tôi chạy: netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 Nhấn phím enter trong cmd / powershell để chạy nó. Sau đó, thoát Netsh bằng cách gõ exit. Trong trình duyệt, gõ http://portainer.localbây giờ sẽ đưa tôi đến nơi http://localhost:9000quen thuộc. Điều này làm việc như một cơ duyên đối với tôi.
EffectiX

14

Fiddler2 -> Quy tắc -> Quy tắc tùy chỉnh

sau đó tìm hàm OnB BeforeRequest khi đặt tập lệnh tiếp theo vào cuối:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}

Thật vậy, Fiddler mạnh mẽ đến mức không thể chạy máy chủ web trên cổng 80 hay thậm chí Skype ... Trên Windows hoạt động tốt hơn trong Linux với Mono, ít nhất là các tính năng chụp, Linux không sử dụng Inet từ CLRL. Đây là một cách hay hơn để thực hiện mọi thứ trên Fiddler, vì nó có thể xuất với 1 tệp.
m3nda

3

Cách đơn giản nhất là sử dụng Ergo làm proxy ngược của bạn: https://github.com/cristianoliveira/ergo

Bạn đặt dịch vụ của mình và IP của nó: PORT và ergo định tuyến cho bạn :).

Bạn có thể đạt được điều tương tự bằng cách sử dụng nginxhoặc apachenhưng bạn sẽ cần phải định cấu hình chúng.


3
Ergo dường như là một dự án bạn đã làm việc (dựa trên tên người dùng). Nếu đó là trường hợp, bạn nên chỉ rõ hơn rằng bạn đang liên kết với sản phẩm đó. Xem câu trả lời này cũng như các câu trả lời khác.
Frank Tan

2

-Bạn có thể sử dụng bất kỳ địa chỉ miễn phí nào trong mạng 127.0.0.0/8, trong trường hợp của tôi cần điều này cho bình python và đây là những gì tôi đã làm: thêm dòng này vào tệp máy chủ (bạn có thể tìm thấy nó là windows trong: C: \ Windows \ System32 \ trình điều khiển \ vv):

127.0.0.5 flask.dev
  • Hãy chắc chắn rằng cổng là cổng mặc định "80" trong trường hợp của tôi, đây là cổng trong bình python: app.run("127.0.0.5","80")

  • Bây giờ hãy chạy mã của bạn và duyệt flask.dev


1

Nếu điều đang xảy ra là bạn có một máy chủ khác đang chạy trên localhost và bạn muốn đặt cho máy chủ mới này một tên máy chủ cục bộ khác như http://teamviewer/

Tôi nghĩ rằng những gì bạn đang thực sự tìm kiếm là chức năng Máy chủ ảo. Tôi sử dụng Apache vì vậy tôi không biết các trình nền web khác hỗ trợ việc này như thế nào. Có lẽ nó được gọi là Bí danh. Đây là tài liệu về Apache:

Ví dụ về máy chủ ảo Apache


1

Sử dụng Netsh với connectaddress = 127.0.0.1 không hiệu quả với tôi.

Mặc dù tìm kiếm ở khắp mọi nơi trên internet, tôi không thể tìm thấy giải pháp giải quyết vấn đề này cho tôi, đó là sử dụng connectaddress = 127.xxx (tức là bất kỳ địa chỉ 127. ipv4 nào, không phải 127.0.0.1) vì điều này dường như liên kết lại với localhost giống nhau nhưng không có giới hạn, do đó loopback hoạt động trong Netsh.


Tôi đề nghị bạn loại bỏ đoạn đầu tiên và đoạn cuối. Chỉ cần nói rằng các giải pháp hiện tại không hoạt động và bạn đã tìm thấy một giải pháp khác. Nếu không, câu trả lời của bạn trông rất giống một bình luận, vì vậy mọi người có thể đánh dấu nó là "không phải là một câu trả lời" và nó sẽ bị xóa.
StaceyGirl


0

Bạn cần máy chủ NGNIX hoặc Apache HTTP làm máy chủ proxy để chuyển tiếp các yêu cầu http đến ứng dụng phù hợp -> lắng nghe cổng cụ thể (hoặc thực hiện với CNAME cung cấp cho công ty Hosting). Đây là giải pháp mạnh mẽ nhất và đây chỉ là một cách thực sự dễ dàng để tiếp tục thêm tên miền phụ mới hoặc tự động thêm tên miền mới khi bản ghi DNS được trỏ vào máy chủ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.