Chuyển tiếp cổng của Vagrant không hoạt động [đã đóng]


108

Tôi đang gặp phải một vấn đề nhỏ ở cuối hướng dẫn Bắt đầu chovagrant . Tôi đang làm việc trên hộp cơ sở CentOS có Apache2 đang chạy (cấp phép qua Puppet). Tôi đã thiết lập chuyển tiếp cổng cho các yêu cầu web bằng dòng sau trong Vagrantfile:

 config.vm.forward_port "web", 80, 4567

Nhưng khi tôi yêu cầu cổng đó, họ không thành công. Lỗi được Safari báo cáo là "Safari không thể mở trang" http: // localhost: 4567 / ” do máy chủ đột ngột ngắt kết nối.'

Tôi đã làm một vagrant reloadvà thấy "[mặc định] - web: 80 => 4567 (bộ điều hợp 1)" trong cuộn, vậy tôi nên bắt đầu khắc phục sự cố này ở đâu? Cảm ơn.


1
Nói gì curl -v 'http://localhost:4567/'? Đôi khi Safari hơi quá giỏi trong việc ẩn thông báo lỗi.
Steve Losh

2
Ngoài ra, curl 'http://localhost:80'bản thân máy ảo có hoạt động không? Nếu không, vấn đề không phải là chuyển tiếp cổng.
Steve Losh

4
@Steve Losh curltừ bên trong máy ảo đang hoạt động. curltừ máy chủ cho tôi (52) Empty reply from server.
Hank Gay

Người lang thang tải lại giúp tôi về câu hỏi tương tự ...
haudoing

Đối với tôi trường hợp của symfony 3: - khi chạy sudo php bin / console server: chạy khiến máy chủ chạy trên 127.0.0.1:8000 thì tôi không thể truy cập từ trình duyệt web, cuộn trong máy ảo đã truy cập được. Khi chạy sudo php -S 0.0.0.0:8000 trong thư mục web, tôi có thể truy cập 127.0.0.1:8082/app_dev.php . Không hiểu tại sao điều này xảy ra, nhưng hoạt động.
Darius.V

Câu trả lời:


80

Tôi sẽ biến điều này thành một câu trả lời thực tế thay vì chỉ là những bình luận khác.

Điều đầu tiên: hãy thử curl 'http://localhost:80'từ bên trong máy ảo. Nếu điều đó không hoạt động, thì chắc chắn đó không phải là cổng chuyển tiếp.

Tiếp theo: thử curl -v 'http://localhost:4567/' từ máy chủ của bạn. Curl có thể cung cấp cho bạn một thông báo lỗi tốt hơn Safari.

Tôi muốn kiểm tra xem không có tường lửa nào được thiết lập hạn chế quyền truy cập vào cổng 80. Vagrant VM (Ubuntu) mặc định không đi kèm với thiết lập tường lửa, nhưng bạn nói rằng bạn đang sử dụng thứ khác, vì vậy nó có thể đáng giá để kiểm tra.

Nếu không phải vậy, hãy thử tạo một cái gì đó khác với Apache được liệt kê trên cổng 80. Python vận chuyển với một máy chủ HTTP đơn giản mà bạn có thể sử dụng - hãy chuyển đến thư mục với index.htmlvà chạy sudo python -m SimpleHTTPServer 80, sau đó thử đánh điều đó bằng cuộn tròn từ cả hai hộp. Nếu điều đó hoạt động, thì có thể đó là sự cố cấu hình Apache. Tôi không có đủ kinh nghiệm với Apache để giúp đỡ nếu trường hợp đó xảy ra (tôi sử dụng nginx).


14
Về cơ bản, tôi thích RedHat và iptables. Tôi đã kiểm tra để đảm bảo chính sách mặc định ACCEPTdành cho các kết nối đến, nhưng không chú ý đến chuỗi quy tắc tùy chỉnh của RedHat, có REJECTquy tắc nhận tất cả là quy tắc cuối cùng trong chuỗi. tl; dr Tôi đã có một bức tường lửa cản đường và chỉ không nhận thấy.
Hank Gay

Cảm ơn! Quy tắc tường lửa lén lút đó là nguyên nhân gây ra sự cố của tôi trên RHEL 5.5.
Roosh

Tôi in lại bình luận của Robert bên dưới vì đó là một cách đơn giản để kiểm tra: Chạy service iptables stopdưới quyền root để nhanh chóng loại trừ sự cố tường lửa Khách. Bật lại sau nếu cần.
Arnaud Meuret

1
có cùng một vấn đề với một hình ảnh centos kỳ lạ; iptablesđã hạn chế hầu hết mọi thứ. Tôi đã làm theo hướng dẫn centos hữu ích này (giải pháp trong phần 3 Viết Bộ Quy tắc Đơn giản ) và nó hoạt động như một sự quyến rũ :)
GabLeRoux

đối với tôi curl đang làm việc bên trong vì vậy tôi cho phép kết nối mạng trong Vagrantfilevà lệnh ranvagrant reload
abhirathore2006

266

Tôi muốn thêm một lưu ý bổ sung rằng điều này thường do máy chủ trong máy ảo gây ra vì nó liên kết với 127.0.0.1, đó là vòng lặp. Bạn sẽ muốn đảm bảo rằng máy chủ được liên kết với0.0.0.0 tất cả các giao diện có thể truy cập nó.

Một số máy chủ ứng dụng tích hợp sẵn như máy chủ phát triển của Django và một số máy chủ Ruby được đặt mặc định 127.0.0.1theo mặc định, vì vậy đây là điều cần chú ý.

Ngoài ra, những gì Steve nói đều đúng: Đảm bảo rằng nó hoạt động từ bên trong máy ảo và thử một số máy chủ đơn giản khác để thử và tìm hiểu xem đó có phải là sự cố cấu hình hay không.


8
Đây là bản sửa lỗi cần thiết cho webrick chạy shotgun.
Ronze

Điều này giải quyết các vấn đề đối với tôi. Để ràng buộc Torquebox để 0.0.0.0 chạy nó với: torquebox chạy -b 0.0.0.0
Bartek Skwira

3
Đúng, đây là vấn đề. Cần liên kết với 0.0.0.0. Tôi tự hỏi liệu có cách nào mà Vagrant có thể tự động làm biến mất vấn đề này trong tương lai không?
CMCDragonkai

1
cùng một vấn đề với Sinatra và webrick: "thiết lập: bind" 0.0.0.0" giải quyết vấn đề này
pragmatic_programmer

đây là bản sửa lỗi cho tôi
sixty4bit

33

Tôi đã gặp vấn đề tương tự trên CentOS 6.3 w / NGINX và tìm thấy câu trả lời nằm trong iptables trên hộp vagrant.

Từ bash trên hộp lang thang, hãy làm theo các bước sau:

Đầu tiên liệt kê các quy tắc iptable hiện tại

iptables -L -v

Sau đó xóa các quy tắc hiện tại:

iptables -F

Cho phép kết nối SSH trên cổng tcp 22

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Đặt các chính sách mặc định cho chuỗi INPUT, FORWARD và OUTPUT

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Đặt quyền truy cập cho localhost

iptables -A INPUT -i lo -j ACCEPT

Chấp nhận các gói thuộc các kết nối đã thiết lập và liên quan

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Lưu các thiết lập

/sbin/service iptables save

Liệt kê các quy tắc đã sửa đổi

iptables -L -v

Xoay localhost: [port #] hoặc nhấn vào nó trong trình duyệt của bạn từ bên ngoài

Tìm thấy thêm thông tin về cấu hình iptable CentOS tại đây:

http://wiki.centos.org/HowTos/Network/IPTables

Chúc may mắn.


2
Cảm ơn vì đã viết cái này lên. Tôi đã gặp vấn đề này tương tự trên Fedora 18, vì vậy nó không dành riêng cho CentOS. Tôi hy vọng điều đó sẽ giúp ích cho người khác. :)
Benjamin Oakes

4
Đây là tôi trên CentOS. service iptables stop
Robert

2
iptables -Fmột mình đã làm điều đó cho tôi
code_monk

Tôi đã tìm thấy một giải pháp vững chắc cho vấn đề này với một số lệnh thực thi được liệt kê trong bài đăng trên blog này để giải quyết vấn đề tương tự techie-notebook.blogspot.com/2014/05/… Tôi đã phải thay thế đường dẫn của mình bằng các phần $ {os_path} như tôi đã làm. không có sẵn biến đó.
Joshua Fricke

27

Giải pháp tốt hơn cho tôi là vô hiệu hóa tường lửa

service iptables stop
chkconfig iptables off

+1 Làm việc cho tôi. Để sử dụng phiên bản VirtualBox cục bộ, tôi không cần tường lửa.
Eduardo

cái này là thứ tốt nếu bạn muốn một sửa chữa tạm thời
brrystrw

0

Tôi cũng muốn thêm một ghi chú khác như Mitchell. nếu trường hợp của tôi, tôi chuyển tiếp nó đến 6789 từ 80

$ curl -v http://localhost:6789

Và tôi đã

<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>

Sau đó, tôi sử dụng địa chỉ IP để thay thế, nó nhận được thông báo html chính xác.

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.