Làm cách nào để kết nối với localhost này từ một máy tính khác trên cùng mạng?


171

Tôi hiện đang làm việc trên một dự án và tôi muốn thử nghiệm nó trên hai máy tính xách tay ở nhà, nơi một máy tính xách tay kết nối với localhost. Tôi đang sử dụng XAMPP. Làm thế nào để tôi làm điều này?

Câu trả lời:


283

Điều đó chắc chắn là có thể. Chúng ta sẽ có một trường hợp chung với Apache ở đây.

Giả sử bạn là một người hâm mộ Symfony2 lớn và bạn muốn truy cập trang web symfony của mình tại http://symfony.local/ 4 máy tính khác nhau (máy tính chính lưu trữ trang web của bạn, cũng như máy Mac, Windows và Linux được kết nối (không dây hoặc không) máy tính chính.

Phác thảo chung:

nhập mô tả hình ảnh ở đây


1 Thiết lập máy chủ ảo :

Trước tiên bạn cần thiết lập một máy chủ ảo trong httpd-vhosts.conftệp apache của bạn . Trên XAMP , bạn có thể tìm thấy tệp này tại đây : C:\xampp\apache\conf\extra\httpd-vhosts.conf. Trên MAMP , bạn có thể tìm thấy tệp này ở đây : Applications/MAMP/conf/apache/extra/httpd-vhosts.conf. Bước này chuẩn bị máy chủ Web trên máy tính của bạn để xử lý symfony.localcác yêu cầu. Bạn cần cung cấp tên của Máy chủ ảo cũng như thư mục gốc / chính của trang web của bạn. Để làm điều này, thêm dòng sau vào cuối tập tin đó. Bạn cần thay đổi DocumentRootbất cứ nơi nào thư mục chính của bạn. Ở đây tôi đã lấy /Applications/MAMP/htdocs/Symfony/làm gốc của trang web của tôi.

<VirtualHost *:80>
    DocumentRoot "/Applications/MAMP/htdocs/Symfony/"
    ServerName symfony.local
</VirtualHost>

2 Định cấu hình tệp máy chủ của bạn :

Để máy khách (trình duyệt của bạn trong trường hợp đó) hiểu được ý symfony.localnghĩa thực sự của nó, bạn cần chỉnh sửa tệp máy chủ trên máy tính của mình. Mỗi khi bạn nhập URL trong trình duyệt, máy tính của bạn sẽ cố gắng hiểu ý nghĩa của nó! symfony.localkhông có nghĩa gì cho máy tính. Vì vậy, nó sẽ cố gắng phân giải tên symfony.localthành một địa chỉ IP. Nó sẽ làm điều này bằng cách trước tiên nhìn vào tệp máy chủ trên máy tính của bạn để xem liệu anh ta có thể khớp địa chỉ IP với địa chỉ bạn đã nhập trong thanh địa chỉ hay không. Nếu không thể, thì nó sẽ hỏi máy chủ DNS . Mẹo ở đây là nối các phần sau vào tệp máy chủ của bạn.

  • Trên MAC , tập tin này nằm trong /private/etc/hosts;
  • Trên LINUX , tập tin này nằm trong /etc/hosts;
  • Trên WINDOWS , tập tin này nằm trong \Windows\system32\private\etc\hosts;
  • Trên WINDOWS 7 , tập tin này nằm trong \Windows\system32\drivers\etc\hosts;
  • Trên WINDOWS 10 , tập tin này nằm trong \Windows\system32\drivers\etc\hosts;

Hosts file

##
# Host Database
# localhost is used to configure the loopback interface
##
#...
127.0.0.1           symfony.local

Từ giờ trở đi, mỗi khi bạn gõ symfony.local trên máy tính này, máy tính của bạn sẽ sử dụng giao diện loopback để kết nối với symfony.local. Nó sẽ hiểu rằng bạn muốn làm việc trên localhost (127.0.0.1).

3 Truy cập symfony.localtừ một máy tính khác :

Cuối cùng chúng tôi cũng đến câu hỏi chính của bạn đó là:

Làm thế nào bây giờ tôi có thể truy cập trang web của mình thông qua một máy tính khác?

Vâng, điều này bây giờ dễ dàng! Chúng ta chỉ cần nói với các máy tính khác làm thế nào họ có thể tìm thấy symfony.local! Chung ta se lam như thê nao?

3a Lấy địa chỉ IP của máy tính lưu trữ trang web :

Trước tiên chúng ta cần biết địa chỉ IP trên máy tính lưu trữ trang web (địa chỉ chúng tôi đã làm việc từ khi bắt đầu). Trong nhà ga, trên MACLINUX loại ifconfig |grep inet, trên WINDOWSloại ipconfig. Giả sử địa chỉ IP của máy tính này là 192.168.1.5 .

3b Chỉnh sửa tệp máy chủ trên máy tính mà bạn đang cố truy cập trang web từ đó. :

Một lần nữa, trên MAC , tập tin này nằm trong /private/etc/hosts; trên LINUX , trong /etc/hosts; và trên WINDOWS , trong \Windows\system32\private\etc\hosts(nếu bạn đang sử dụng WINDOWS 7 , tệp này nằm trong \Windows\system32\drivers\etc\hosts) .. Bí quyết bây giờ là sử dụng địa chỉ IP của máy tính mà chúng tôi đang cố gắng truy cập / nói chuyện với:

##
# Host Database
# localhost is used to configure the loopback interface
##
#...
192.168.1.5         symfony.local

4 Cuối cùng hãy tận hưởng kết quả trong trình duyệt của bạn

Bây giờ bạn có thể vào trình duyệt của mình và gõ http://symfony.localđể xem trang web của bạn trên các máy tính khác nhau! Lưu ý rằng bạn có thể áp dụng chiến lược tương tự nếu bạn là người dùng OSX để kiểm tra trang web của bạn trên Internet Explorer thông qua Virtual Box (nếu bạn không muốn sử dụng máy tính Windows). Điều này được giải thích rất hay trong Chế tạo môi trường thử nghiệm Windows / IE của bạn trên OSX .


Bạn cũng có thể truy cập localhost của mình từ thiết bị di động

Bạn có thể tự hỏi làm thế nào để truy cập trang web localhost của bạn từ một thiết bị di động. Trong một số trường hợp, bạn sẽ không thể sửa đổi tệp máy chủ (iPhone, iPad ...) trên thiết bị của mình (loại trừ bẻ khóa).

Vậy thì, giải pháp sau đó là cài đặt một máy chủ proxy trên máy chủ lưu trữ trang web và kết nối với proxy đó từ iphone của bạn. Nó thực sự được giải thích rất tốt trong các bài viết sau và không lâu để thiết lập:

Trên máy Mac, tôi khuyên bạn nên: Kiểm tra trang web Mac OS X bằng tên máy chủ cục bộ trên thiết bị di động : Sử dụng SquidMan làm proxy. Đó là một giải pháp miễn phí 100%. Một số người cũng có thể sử dụng Charles làm máy chủ proxy nhưng đó là 50 đô la.

Trên Linux, bạn có thể điều chỉnh Mac OS theo cách trên bằng cách sử dụng Squid làm máy chủ proxy.

Trên Windows, bạn có thể làm điều đó bằng cách sử dụng Fiddler . Giải pháp được mô tả trong bài sau: Giám sát lưu lượng iPhone với Fiddler


Chỉnh sửa 23/11/2017: Này, tôi không muốn sửa đổi tệp Máy chủ của mình

@Dre. Bất kỳ cách nào có thể để truy cập trang web từ một máy tính khác bằng cách không chỉnh sửa tệp máy chủ theo cách thủ công? giả sử tôi có 100 máy tính muốn truy cập trang web

Đây là một câu hỏi thú vị và vì nó liên quan đến câu hỏi OP, hãy để tôi giúp.

Bạn sẽ phải thực hiện một thay đổi trên mạng của mình để mọi máy đều biết trang web của bạn được lưu trữ ở đâu. Hầu hết các bộ định tuyến hàng ngày không làm điều đó vì vậy bạn sẽ phải chạy Máy chủ DNS của riêng mình trên mạng của mình.

Hãy giả vờ rằng bạn có một bộ định tuyến (192.168.1.1). Bộ định tuyến này có máy chủ DHCP và phân bổ địa chỉ IP cho 100 máy trên mạng.

Bây giờ, giả sử bạn có, giống như trên, trên cùng một mạng, một máy 192.168.1.5có trang web của bạn. Chúng tôi sẽ gọi máy đó pompei.

$ echo $HOSTNAME
pompei

Giống như trước, mà máy pompeitại 192.168.1.5chạy một máy chủ HTTP phục vụ trang web của bạn symfony.local.

Đối với mọi máy để biết rằng symfony.localđược lưu trữ trên pompeichúng ta sẽ cần một Máy chủ DNS tùy chỉnh trên mạng để biết nơi symfony.localđược lưu trữ. Các thiết bị trên mạng sau đó sẽ có thể phân giải tên miền được cung cấp bởi pompeinội bộ.

3 bước đơn giản.

Step 1: DNS Server

Thiết lập Máy chủ DNS trên mạng của bạn. Hãy pompeisử dụng để thuận tiện và sử dụng một cái gì đó như dnsmasq .

Dnsmasq cung cấp Domain Name System (DNS) forwarder , ... .

Chúng tôi muốn pompeichạy DNSmasq để xử lý các yêu cầu DNS Hey, pompei, where is symfony.localvà trả lời Hey, sure think, it is on 192.168.1.5 but don't take my word for it.

Hãy tiếp tục cài đặt dnsmasq, tập tin cấu hình dnsmasq thường /etc/dnsmasq.confphụ thuộc vào môi trường của bạn.

Cá nhân tôi sử dụng no-resolvvà máy chủ google server=8.8.8.8 server=8.8.8.4.

* Lưu ý: * LUÔN LUÔN khởi động lại DNSmasq nếu sửa đổi tập tin / etc / hosts vì không có thay đổi nào có hiệu lực.

Step 2: Firewall

Để hoạt động, pompeicần phải cho phép các gói 'miền' đến và đi, đi từ và đến cổng 53. Tất nhiên! Đây là các gói DNS và nếu pompeikhông cho phép chúng, không có cách nào để máy chủ DNS của bạn có thể truy cập được. Hãy tiếp tục và mở cổng đó 53. Trên linux, bạn sẽ sử dụng một cách cổ điển iptablescho việc này.

Chia sẻ những gì tôi nghĩ ra nhưng rất có thể bạn sẽ phải đi sâu vào tường lửa của mình và hiểu rõ mọi thứ.

#
# Allow outbound DNS port 53
#
 iptables -A INPUT -p tcp --dport 53 -j ACCEPT
 iptables -A INPUT -p udp --dport 53 -j ACCEPT

 iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

 iptables -A INPUT -p udp --sport 53 -j ACCEPT
 iptables -A INPUT -p tcp --sport 53 -j ACCEPT

 iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
 iptables -A OUTPUT -p udp --sport 53 -j ACCEPT

Step 3: Router

Nói với bộ định tuyến của bạn rằng máy chủ dns của bạn đang bật 192.168.1.5. Hầu hết thời gian, bạn chỉ có thể đăng nhập vào bộ định tuyến của mình và thay đổi thủ công rất dễ dàng.

Vậy là xong, Khi bạn đang ở trên một máy và yêu cầu symfony.local, nó sẽ yêu cầu bạn DNS Server nơi symfony.localđược lưu trữ, và ngay sau khi nó đã nhận được câu trả lời của nó từ máy chủ DNS, sau đó sẽ gửi đúng yêu cầu HTTP tới pompeitrên 192.168.1.5.

Tôi cho bạn chơi với cái này và tận hưởng chuyến đi. 2 bước này là hướng dẫn chính, vì vậy bạn sẽ phải gỡ lỗi và dành vài giờ nếu đây là lần đầu tiên bạn thực hiện. Hãy nói rằng đây là một cắn mạng tiên tiến hơn, có chính máy chủ DNS, máy chủ DNS thứ cấp, vv . Chúc may mắn!


Đẹp trả lời. Tôi đã theo dõi phần cuối cùng cho đến khi tôi nhận được "Giám sát lưu lượng iPhone với Fiddler". Nó trỏ đến trang chủ Fiddler. Đây phải là liên kết: con805tdev.blogspot.com/2009/01/ từ
helpse

Tôi đã sửa đổi tệp máy chủ nhưng vấn đề là tôi cũng có máy chủ IIS đang chạy nên "localhost" hoặc "127.0.0.1" của tôi đang trỏ đến máy chủ IIS làm cách nào để thay thế nó bằng máy chủ xamp?
Uzair Ali

1
@ Bấm bất kỳ cách nào có thể để truy cập trang web từ một máy tính khác bằng cách không chỉnh sửa hosttệp theo cách thủ công? giả sử tôi có 100 máy tính muốn truy cập trang web
Drenyl

1
@Dre Có, bạn sẽ phải thực hiện thay đổi trên mạng của mình để mọi máy đều biết trang web của bạn được lưu trữ ở đâu. Tôi đã thêm thông tin vào cuối câu trả lời. Mong rằng sẽ giúp.
Mick

1
Giải thích tuyệt vời!
Người chăn cừu

25

Để thử nghiệm trên cả hai máy tính xách tay trên cùng một mạng không dây và trên internet, bạn có thể sử dụng một dịch vụ như http://localhost.run/ hoặc https://ngrok.com/


3
localhost.run làm việc như bùa mê. Máy chủ của tôi đang chạy trên cổng 8000 và chỉ thay đổi dòng lệnh từ 80 thành 8000.
Isuru

3
Ồ thật tuyệt vời ... nó thực sự hoạt động ở một lần duy nhất ... cảm ơn @tommyvn
Jabongg

Cách dễ dàng hơn để thiết lập NGROK hơn là cập nhật tệp máy chủ cục bộ. +1
BlackHatSamurai

Giải pháp dễ dàng để kiểm tra nhanh
shamila

15

Với điều kiện cả hai máy nằm trong cùng một nhóm làm việc, hãy mở cmd.exetrên máy bạn muốn kết nối, nhập ipconfigvà ghi chú IP tại IPv4 Addressđường dây.

Sau đó, trên máy bạn muốn kết nối, sử dụng http:// + the IP of the target machine.

Nên làm vậy.


3
Điều này sẽ hoạt động nếu cổng 80 là cổng cho ứng dụng (thông thường là vậy) nhưng hãy nhớ rằng chúng ta có thể sử dụng một cổng khác. Điều đó có nghĩa là http: // + IP của máy mục tiêu + ": PORT_NUMBER"
ggderas

Đây là giải pháp đơn giản mà tôi đang tìm kiếm. @Codrin Eugeniu: Vui lòng xem xét để kết hợp đề xuất ": PORT_NUMBER" vào câu trả lời của bạn như được đề cập bởi ggderas. Đối với tôi điều này là cần thiết khi tôi kết nối qua cổng 8088 bằng cách sử dụng Apache Superset.
Ohumeronen

8

Trên Mac OS X:

  1. Trong thiết bị đầu cuối, hãy chạy ifconfig | grep 192.để lấy IP bên trong của máy trên mạng hiện tại. Nó có thể là một cái gì đó như192.168.1.140

  2. Bắt đầu một máy chủ. Ví dụ, node server.jscó thể bắt đầu một máy chủ trên một số cổng.

  3. Trên điện thoại của bạn, hãy truy cập 192.168.1.140:3000hoặc bất kỳ cổng nào máy chủ của bạn đang chạy.


6

Công cụ này đã tiết kiệm cho tôi rất nhiều, vì tôi không có quyền của Quản trị viên trên máy của mình và đã cài đặt nodejs. Vì một số lý do, cấu hình trên mạng của tôi không cho phép tôi truy cập vào các máy khác mà chỉ trỏ IP trên trình duyệt.

# Using a local.dev vhost
$ browser-sync start --proxy

# Using a local.dev vhost with PORT
$ browser-sync start --proxy local.dev:8001

# Using a localhost address
$ browser-sync start --proxy localhost:8001

# Using a localhost address in a sub-dir
$ browser-sync start --proxy localhost:8080/site1

http://www.browsersync.io/docs/command-line/


Tôi chạy một ứng dụng web trên localhost: 3000. Tôi đã sử dụng browser-sync start --proxy localhost:3000trong một vỏ riêng biệt. Trên một thiết bị khác được kết nối với mạng tôi gõ: ${computerIP}:3000nhưng tôi không thấy gì. Tôi đoán có một cái gì đó nhiều hơn tôi nên cung cấp.
Cá chép Ben

5

có thể là tường lửa của bạn đang ngăn bạn truy cập máy chủ web của localhost.
Đặt địa chỉ IP của cả hai bảo mật chống vi-rút bảo mật internet của máy tính của bạn làm địa chỉ IP an toàn nếu được yêu cầu.
Cách tìm địa chỉ IP của PC Windows của bạn: Bắt đầu> (Chạy) nhập vào: cmd (Enter)
(Điều này sẽ mở dấu nhắc lệnh hộp đen)
nhập ipconfig (Enter)
Giả sử máy chủ web Apache hoặc IIS của bạn được cài đặt trên PC của bạn : 192.168.0.3
và bạn muốn truy cập máy chủ web bằng máy tính xách tay của mình. (IP của máy tính xách tay là 192.168.0.5)
Trên PC của bạn, bạn nhập: http: // localhost / bên trong trình duyệt Firefox hoặc Internet Eplorer để truy cập dữ liệu của bạn trên máy chủ web.
Trên máy tính xách tay của bạn, bạn nhập http://192.168.0.3/ để truy cập máy chủ web trên PC.

Để tất cả những thứ này hoạt động, bạn cần cài đặt đúng máy chủ web (ví dụ: IIS, Apache, XAMP, WAMP, v.v.).

Nếu nó không hoạt động, hãy thử ping PC từ máy tính xách tay của bạn:
Mở lệnh propmt trên máy tính xách tay của bạn: Bắt đầu> cmd (Enter)
ping 192.168.1.3 (Enter)
Nếu ping không thành công, tường lửa sẽ chặn kết nối của bạn hoặc mạng của bạn Cáp bị lỗi. Khởi động lại modem hoặc chuyển đổi mạng và máy của bạn.
Đóng các chương trình như chương trình trò chuyện đang sử dụng cổng của bạn.
Bạn cũng có thể thử số cổng khác nhau: http: 192.168.0.3: 80 hoặc http: 192.168.0.3: 81 hoặc bất kỳ số ngẫu nhiên nào ở cuối


1
Cảm ơn tou @KarlosFontana - bạn cũng vừa trả lời câu hỏi của tôi. Tôi gặp sự cố khi kết nối iPhone với máy chủ mà tôi đã viết trên máy tính để bàn. IPhone đã được kết nối với WiFi của PC. Dòng cuối cùng của bạn đã trả lời câu hỏi của tôi :-)
Tommy

4

Đây là một lưu ý phụ nếu người ta vẫn không thể truy cập localhost từ các thiết bị khác sau khi làm theo các bước trên. Điều này có thể là do các apache port.conf đã được cấu hình để phục vụ cục bộ (127.0.0.1) và không ở bên ngoài.

kiểm tra như sau, (đối với Ubuntu apache2)

  $ cat /etc/apache2/ports.conf

nếu sau đây được đặt,

NameVirtualHost *:80  
Listen 127.0.0.1:80  

sau đó thay đổi nó trở lại giá trị mặc định

NameVirtualHost *:80  
Listen 80  

0

Nếu bạn đang ở trên Windows, hãy sử dụng ipconfig để lấy địa chỉ IPv4 cục bộ và sau đó chỉ định trong tệp cấu hình Apache của bạn: httpd.conf , như:

Listen: 10.20.30.40:80

Khởi động lại máy chủ Apache của bạn và kiểm tra nó từ máy tính khác trên mạng.

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.