Bagaimana cara membuat Apache Web Server mendengarkan pada dua port yang berbeda?

45

Saya ingin Server Web Apache yang telah saya instal di rumah untuk mendengarkan pada port 80 dan port 8080.

Saya telah menambahkan Listen 8080ke httpd.conf dan memulai kembali layanan Apache tetapi server tampaknya tidak mendengarkan pada 8080. Meninju di http: // localhost: 8080 kali dan tidak menampilkan index.html saya tetapi http: / / localhost akan menampilkan index.html saya.

Bagaimana cara membuatnya mendengarkan 80 dan 8080?

Owen
sumber
Mengapa Anda pikir itu tidak mendengarkan pada port 8080? Mungkin juga bermanfaat untuk mengirim cuplikan konfigurasi Anda.
David Z
1
Apakah Anda me-restart Apache setelah mengedit http.conf?
Dana the Sane
@ David Sudah saya perbarui pertanyaan saya untuk menunjukkan mengapa saya pikir itu tidak mendengarkan pada 8080. Tidak memiliki akses ke httpd.conf sekarang. @Dana - ya.
Owen

Jawaban:

63

Instalasi standar apache Debian akan memiliki fragmen konfigurasi berikut:

Dengarkan 80

<IfModule mod_ssl.c>
    # Host virtual berbasis nama SSL belum didukung, oleh karena itu tidak
    Pernyataan # NameVirtualHost di sini
    Dengarkan 443
</IfModule>

Ini memberitahu apache untuk mendengarkan pada port 80 dan mendengarkan port 443 jika mod_ssl dikonfigurasi. Dalam kasus Anda, Anda ingin:

Listen 80
Listen 8080

Anda harus memastikan Anda menjalankan restart, bukan operasi ulang di apache untuk itu memperhatikan arahan Dengarkan baru. Yang paling aman untuk dilakukan adalah menghentikan apache, pastikan itu mati dan mulai lagi.

Jika konfigurasi ini tidak berhasil, periksa file log apakah ada pesan kesalahan. Anda bisa menggunakan "netstat -lep --tcp" untuk melihat apakah ada sesuatu yang mendengarkan pada port 8080. Akhirnya, jika semuanya tidak berfungsi, coba jalankan apache di bawah strace untuk melihat apakah ia mencoba mengikat ke port itu dan gagal, tetapi tidak mencatat masalah.

David Pashley
sumber
1
Di Apache 2.4 di mana fragmen konfigurasi ini dapat ditemukan? Terima kasih.
Luís de Sousa
2
Menjawab pertanyaan saya sendiri: /etc/apache2/ports.conf.
Luís de Sousa
7

Jawaban ini besar, tetapi mereka meninggalkan kemungkinan bahwa Owen telah benar-benar melakukan ini sudah ( "Saya telah menambahkan Listen 8080") bisa berarti persis apa yang terdengar seperti (yaitu, apa yang telah menyarankan David).

Jika Anda sudah melakukan ini dan masih merasa tidak berfungsi, pastikan bahwa Anda telah mengkonfigurasi arahan Anda dengan benar untuk setiap subdomain yang mungkin Anda miliki, termasuk yang default (jika sudah dikonfigurasi secara manual untuk mendengarkan: 80 tepat setelah nama).

Anda mungkin memiliki arahan seperti ini:

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

Anda perlu mengubahnya ke <VirtualHost *:8080>atau <VirtualHost *:*>.

msanford
sumber
Saya curiga ini masalah saya. Saya pikir punya direktif <VirtualHost *: 80>. Saya harus memeriksa ini.
Owen
1
Jika Anda tidak memiliki host virtual, Anda akan disajikan konten dari DocumentRoot global, yang mungkin akan memberi Anda index.html standar, halaman indeks direktori, kesalahan 404 atau 403. Itu tidak akan habis.
David Pashley
2
Kedengarannya seperti Anda memiliki firewall di tempat yang menjatuhkan paket diam-diam.
msanford
Ternyata, itu masalah firewall.
Owen
5

Langkah 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) untuk mendengarkan pada port 80 dan mendengarkan port 443 jika mod_ssl dikonfigurasi.

Listen 80
Listen 8080

Langkah 2

#su - service httpd restart

Langkah 3

$ netstat -lntp

(Tidak semua proses dapat diidentifikasi, info proses yang tidak dimiliki tidak akan ditampilkan, Anda harus menjadi root untuk melihat semuanya.)

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       
Rajat
sumber
0

Anda juga mungkin ingin memeriksa untuk melihat apakah Anda telah mengaktifkan SELinux. Konfigurasi SELinux default mungkin tidak memungkinkan Anda untuk menjalankan Apache pada port non-standar. Berikut adalah situs yang menunjukkan kepada Anda jika Anda menjalankan SELinux dan cara menonaktifkannya, jika Anda tidak ingin atau menggunakan fitur-fiturnya. http://www.crypt.gen.nz/selinux/disable_selinux.html


sumber
Atau Anda bisa membiarkan SELinux aktif, jika Anda menggunakan sistem SELinux modern, lihat bagaimana port diberi label dengan port semanage -l. melihat danwalsh.livejournal.com/9275.html yang berjudul "Aku ingin daemon apache saya untuk mendengarkan pada port yang berbeda tetapi SELinux adalah mencegah hal itu, apa yang harus saya lakukan?"
rev
0

Anda mungkin perlu mengonfigurasi situs port 8080 agar ini berfungsi. Baca dokumentasi untuk Apache Virtual Host . Setiap 'situs' dapat diatur untuk menerima koneksi pada port tertentu (dan ip, dll). Apakah Anda memiliki host virtual di http.conf yang hanya dikonfigurasikan untuk port 80?

Selain itu, Anda dapat mengonfirmasi bahwa server mendengarkan pada 8080 menggunakan netstat -nlpdan mencari entri pada port itu.

Dana si Sane
sumber
1
Tidak, ini tidak benar. Jika Anda ingin apache mendengarkan pada port, Anda perlu menggunakan arahan Listen.
David Pashley
1
Yah, itu mungkin agak benar - banyak orang membuat vhosts seperti <VirtualHost *: 80>, dan dalam hal ini Anda perlu mengubahnya menjadi <VirtualHost *: *> atau membuat vhost lain untuk port 8080. (Tentu saja, Dengarkan arahan juga diperlukan)
David Z
@ David Pashley, Penulis menyatakan bahwa arahan Listen telah ditambahkan.
Dana the Sane
0

Dengan asumsi linux dijalankan netstat -lntpsebagai root seperti yang Anda lihat apakah apache mendengarkan pada 8080 atau tidak. Ini akan membantu Anda mengidentifikasi jika masalahnya adalah apache tidak mendengarkan atau jika ada faktor eksternal (mis. Firewall, selinux dll) untuk apache membuat waktu koneksi habis.

Jason Tan
sumber