Làm cách nào để khiến Apache Web Server lắng nghe trên hai cổng khác nhau?


45

Tôi muốn một máy chủ web Apache tôi đã cài đặt ở nhà để nghe trên cổng 80 và cổng 8080.

Tôi đã thêm Listen 8080vào httpd.conf và khởi động lại các dịch vụ Apache nhưng máy chủ dường như không nghe trên 8080. Đột nhập http: // localhost: 8080 lần và không hiển thị index.html của tôi nhưng http: / / localhost sẽ hiển thị index.html của tôi.

Làm thế nào để tôi làm cho nó nghe 80 và 8080?


Tại sao bạn nghĩ rằng nó không nghe trên cổng 8080? Nó cũng có thể hữu ích để đăng đoạn trích cấu hình của bạn.
David Z

1
Bạn đã khởi động lại Apache sau khi chỉnh sửa http.conf?
Dana the Sane

@David Tôi đã cập nhật câu hỏi của mình để cho biết lý do tại sao tôi nghĩ rằng nó không nghe trên 8080. Không có quyền truy cập vào httpd.conf ngay bây giờ. @Dana - vâng.
Owen

Câu trả lời:


63

Một bản cài đặt Debian tiêu chuẩn của apache sẽ có đoạn cấu hình sau:

Nghe 80

<IfModule mod_ssl.c>
    # Máy chủ ảo dựa trên tên SSL chưa được hỗ trợ, do đó không
    Câu lệnh # NameVirtualhost tại đây
    Nghe 443
</ IfModule>

Đây là nói với apache để nghe trên cổng 80 và nghe cổng 443 nếu mod_ssl được cấu hình. Trong trường hợp của bạn, bạn muốn:

Listen 80
Listen 8080

Bạn cần đảm bảo rằng bạn chạy khởi động lại, không phải là hoạt động tải lại trên apache để nó chú ý đến các chỉ thị Nghe mới. Điều an toàn nhất để làm là ngừng apache, đảm bảo nó đã chết và bắt đầu lại.

Nếu cấu hình này không hoạt động, kiểm tra các tệp nhật ký cho bất kỳ thông báo lỗi. Bạn có thể sử dụng "netstat -lep --tcp" để xem có gì nghe trên cổng 8080. Cuối cùng, nếu mọi thứ khác không hoạt động, hãy thử chạy apache theo strace để xem liệu nó có cố liên kết với cổng đó không và có bị lỗi không, nhưng không đăng nhập vấn đề.


1
Trong Apache 2.4, đoạn cấu hình này có thể được tìm thấy ở đâu? Cảm ơn.
Luís de Sousa

2
Trả lời câu hỏi của riêng tôi : /etc/apache2/ports.conf.
Luís de Sousa

7

Những câu trả lời này rất hay, nhưng chúng bỏ qua khả năng Owen đã thực sự làm điều này rồi ("Tôi đã thêm Listen 8080") có thể có nghĩa chính xác những gì nó nghe giống như (nghĩa là những gì David đã đề xuất).

Nếu bạn đã thực hiện điều này và vẫn thấy nó không hoạt động, hãy đảm bảo rằng bạn đã định cấu hình chính xác các lệnh của mình cho từng tên miền phụ mà bạn có thể có, bao gồm cả tên miền mặc định (nếu nó được cấu hình theo cách thủ công để nghe: 80 ngay sau tên).

Bạn có thể có một chỉ thị như thế này:

<VirtualHost *:80>
 ServerName michaelsanford.com
 etc…
</VirtualHost>

Bạn cần thay đổi điều đó thành <VirtualHost *:8080>hoặc <VirtualHost *:*>.


Tôi nghi ngờ đây là vấn đề của tôi. Tôi nghĩ rằng có một lệnh <Virtualhost *: 80>. Tôi sẽ phải kiểm tra điều này.
Owen

1
Nếu bạn không có máy chủ ảo, bạn sẽ được cung cấp nội dung từ DocumentRoot toàn cầu, có thể sẽ cung cấp cho bạn một index.html tiêu chuẩn, trang chỉ mục thư mục, lỗi 404 hoặc 403. Nó sẽ không hết thời gian.
David Pashley

2
Âm thanh như bạn có một tường lửa tại chỗ đang thả các gói âm thầm.
msanford

Hóa ra, đó là một vấn đề tường lửa.
Owen

5

Bước 1

#vi httpd.conf
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
</IfModule>

httpd (apache) để nghe trên cổng 80 và nghe cổng 443 nếu mod_ssl được cấu hình.

Listen 80
Listen 8080

Bước 2

#su - service httpd restart

Bước 3

$ netstat -lntp

(Không phải tất cả các quy trình có thể được xác định, thông tin quy trình không thuộc sở hữu sẽ không được hiển thị, bạn sẽ phải root để xem tất cả.)

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:47027               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:80              0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:8080            0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      -                   
tcp        0      0 ::ffff:127.0.0.1:45100      :::*                        LISTEN      3149/java           
tcp        0      0 :::111                      :::*                        LISTEN      -                   
tcp        0      0 :::80                       :::*                        LISTEN      -                   
tcp        0      0 :::57173                    :::*                        LISTEN      3149/java           
tcp        0      0 :::18197                    :::*                        LISTEN      3149/java           
tcp        0      0 :::22                       :::*                        LISTEN      -                   
tcp        0      0 ::1:631                     :::*                        LISTEN      -                   
tcp        0      0 :::40832                    :::*                        LISTEN      3149/java           
tcp        0      0 ::ffff:127.0.0.1:6880       :::*                        LISTEN      3149/java       

0

Bạn cũng có thể muốn kiểm tra xem bạn đã bật SELinux chưa. Cấu hình SELinux mặc định có thể không cho phép bạn chạy Apache trên các cổng không chuẩn. Đây là một trang web cho bạn biết nếu bạn đang chạy SELinux và cách tắt nó, nếu bạn không muốn hoặc sử dụng các tính năng của nó. http://www.crypt.gen.nz/selinux/disable_selinux.html


Hoặc bạn có thể để lại Selinux, nếu bạn đang sử dụng hệ thống SELinux hiện đại, hãy xem cách các cổng được gắn nhãn với cổng semanage -l. xem danwalsh.livejournal.com/9275.html có tiêu đề "Tôi muốn daemon apache của tôi nghe trên một cổng khác nhưng SELinux đang ngăn chặn nó, tôi phải làm gì?"
rev

0

Bạn có thể cần cấu hình một trang web một cổng 8080 để làm việc này. Đọc qua tài liệu về Máy chủ ảo Apache . Mỗi 'trang web' có thể được thiết lập để chấp nhận kết nối trên các cổng cụ thể (và ip, v.v.). Bạn có máy chủ ảo trong http.conf chỉ được định cấu hình cho cổng 80 không?

Ngoài ra, bạn có thể xác nhận rằng máy chủ đang lắng nghe trên 8080 bằng cách sử dụng netstat -nlpvà tìm kiếm một mục trên cổng đó.


1
Không, điều này không đúng. Nếu bạn muốn apache nghe trên một cổng, bạn cần sử dụng lệnh Nghe.
David Pashley


1
Chà, điều đó có thể đúng - nhiều người tạo vhost như <Virtualhost *: 80> và trong trường hợp đó, bạn sẽ cần thay đổi nó thành <Virtualhost *: *> hoặc tạo một vhost khác cho cổng 8080. (Tất nhiên, Chỉ thị nghe cũng được yêu cầu)
David Z

@David Pashley, Tác giả tuyên bố rằng Chỉ thị Nghe đã được thêm vào.
Dana the Sane

0

Giả sử linux chạy netstat -lntpbằng root như bạn có thể thấy liệu apache có nghe trên 8080 hay không. Điều này sẽ giúp bạn xác định xem sự cố là apache không lắng nghe hay nếu có các yếu tố bên ngoài (ví dụ: tường lửa, selinux, v.v.) để apache khiến hết thời gian kết nối.

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.