Apache VirtualHost tidak melayani halaman

6

Saya memiliki nama domain yang ditautkan dengan alamat ip saya di rumah. Namun, saya ingin menggunakan server / ip yang sama untuk menampilkan lebih dari satu situs web.

Saya tidak bisa membuat Virtual Host bekerja.

Conf.d / virtual.conf saya adalah:

NameVirtualHost 192.168.10.151:80

Situs saya tersedia / www.mydomain.com adalah:

Listen 80
<VirtualHost *>
        ServerAdmin     [email protected]
        ServerName      www.mydomain.com
        ServerAlias     mydomain.com

        #Indexes and Directory Root
        DirectoryIndex  index.html index.php
        DocumentRoot    /media/BigDisk/www/www.mydomain.com/

        # Log Files
        ErrorLog        /media/BigDisk/www/www.mydomain.com/logs/error.log
        CustomLog       /media/BigDisk/www/www.mydomain.com/logs/access.log combined
</VirtualHost>

Dan situs itu diaktifkan menggunakan a2ensite dan apache dimuat ulang tanpa peringatan atau kesalahan, tetapi ketika saya pergi ke www.mydomain.comsaya tidak mendapatkan apa-apa ("Opps! Google Chrome tidak dapat terhubung ...").

Apa yang saya lakukan salah?

Pembaruan: Mulai ulang hasil Apache dalam hal ini:

malfist@webhost:~$ sudo /etc/init.d/apache2 restart
[sudo] password for malfist:
 * Restarting web server apache2                                                                                                                       apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
Malfist
sumber

Jawaban:

5

Periksa Resolusi Nama

Pertama menggunakan nslookupatau digatau hostuntuk memeriksa bahwa www.mydomain.com poin di IP-address eksternal statis router Anda.

Periksa konfigurasi router

Kemudian periksa apakah router Anda memiliki penerusan port yang dikonfigurasikan sehingga permintaan yang tiba pada port 80 di antarmuka eksternal diteruskan ke port 80 di alamat IP pribadi server Anda.

Periksa batasan ISP

Kemudian periksa apakah Syarat dan Ketentuan ISP Anda memungkinkan Anda untuk menjalankan layanan HTTP. Beberapa ISP memblokir koneksi HTTP masuk.

LAN! = Internet

Terakhir, ingatlah bahwa jika Anda menguji ini dari dalam LAN Anda, Anda memerlukan alamat IP yang berbeda untuk www.mydomain.com, Anda dapat menambahkan 192.168.10.151 www.mydomain.comke file host Anda (mis. /etc/hostsAtau C:\WINDOWS\system32\drivers\etc\hosts). Seperti yang ditunjukkan oleh Malfist dalam komentar: jika router mendukung refleksi-NAT, ini tidak perlu.


Memperbarui:

Periksa log kesalahan Apache (semuanya)

"Tidak dapat terhubung" menyarankan masalah konektivitas IP dasar daripada masalah konfigurasi Apache vhost. Yang terakhir lebih cenderung menghasilkan respons HTTP 404 atau 500. Jika permintaan mencapai Apache Anda akan melihat entri di log kesalahan. Jika tidak ada entri di sana, itu adalah indikator yang baik bahwa Apache tidak menerima permintaan apa pun.

Tindak lanjut peringatan dan kesalahan yang dilaporkan oleh Apache

NameVirtualHost *: 80 tidak memiliki VirtualHosts

Lihat kesalahan konfigurasi yang umum

Beberapa baris NameVirtualHost akan menghasilkan peringatan "NameVirtualHost *: 80 tidak memiliki VirtualHosts". Apache akan mengabaikan arahan kedua dan menggunakan baris NameVirtualHost yang didefinisikan pertama. Ini tampaknya terjadi ketika seseorang menggunakan beberapa file konfigurasi host virtual dan tidak mengerti bahwa Anda hanya perlu mendefinisikan baris NameVirtualHost tertentu satu kali. Seperti di atas, ini dapat terjadi pada file debian ports.conf, terutama setelah peningkatan.

Alamat sudah digunakan: make_sock: tidak dapat mengikat ke alamat 0.0.0.0:80

Beberapa program lain sudah mendengarkan pada port 80. Gunakan netstat -anpuntuk mencari tahu apa, lalu hentikan.

Alat diagnostik

Ethernet Sniffer

Saya akan menggunakan sniffer jaringan (mis. Tcpdump atau wireshark) pada server Apache untuk melihat permintaan HTTP yang masuk - jika tidak ada, maka Anda tahu ini masalah konektivitas IP.


Pembaruan 2:

Wget

Alat diagnostik lain yang bagus adalah menjalankan ini di server

 wget --header="Host: www.mydomain.com" -O - http://localhost

Ini adalah jenis output yang harus Anda lihat

[root @ mybox logs] # wget --header = "Host: foo.bar" -O - http: // localhost
--2011-09-01 18: 56: 08-- http: // localhost /
Menyelesaikan localhost ... 127.0.0.1
Menghubungkan ke localhost | 127.0.0.1 |: 80 ... terhubung.
Permintaan HTTP terkirim, menunggu respons ... 200 OK
Durasi: 125 [teks / html]
Menyimpan ke: `STDOUT '

 0% [] 0 --.- K / s <html>
 <head>
  <title> mybox </title>
 </head>
 <body>
  <h1> mybox </h1>
  <p> Tidak ada yang terlihat, bergeraklah </p>
 </body>
</html>
100% [====================================>] 125 --.- K / s dalam 0s

2011-09-01 18:56:08 (10,8 MB / s) - `- 'disimpan [125/125]

[root @ mybox logs] # tail -n 1 access_log
127.0.0.1 - - [01 / Sep / 2011: 18: 56: 08 +0100] "DAPATKAN / HTTP / 1.0" 200 125 "-" "Wget / 1.11.4 Red Hat dimodifikasi"

Tambahkan -Sopsi untuk wgetmelihat tajuk respons server.

Jika Anda mendapatkan sesuatu seperti "koneksi ditolak", Apache tidak mendengarkan pada port 80.

Netstat

Output dari netstat -anpharus termasuk

tcp        0      0 :::80        :::*       LISTEN      12345/httpd
RedGrittyBrick
sumber
Router saya mendukung refleksi NAT, sehingga saya dapat menunjuk ke IP publik saya dan router tidak memiliki masalah. Entri DNS untuk domain sudah benar, dan ISP saya tidak peduli. Saya menjalankan dengan baik (domain tunggal pada laptop) sampai saya memutuskan untuk melakukan Virtual Host, dan sekarang tidak berfungsi.
Malfist
Jawaban diperbarui.
RedGrittyBrick
Saya menjalankan versi chrome yang berbeda di tempat kerja, dan memberikan pesan kesalahan, "tcp_error", dan "koneksi ditolak". Apakah itu menjelaskan lagi? Saya tahu entri IP / DNS benar, karena saya memiliki port 8080 dialihkan ke kotak lain di dalam LAN, dan saya bisa mencapainya dengan baik.
Malfist
"koneksi ditolak" menunjukkan masalah dalam konfigurasi router Anda. Jika Apache dikonfigurasi secara normal dan sedang mendengarkan pada port 80, server Anda tidak akan menolak koneksi. Sudahkah Anda memeriksa log kesalahan dan menggunakan sniffer jaringan seperti yang saya sarankan?
RedGrittyBrick
Perute memperbolehkan koneksi sampai saya beralih apache ke host virtual, dan jika saya kembali konfigurasi apache, halaman berhasil diselesaikan.
Malfist
1
NameVirtualHost  *:80

Hal ini /etc/apache2/ports.conf. Jika Anda menghapusnya atau berkomentar dan memulai kembali Apache, peringatan itu hilang.

carlos
sumber
1

Saya menghabiskan waktu berjam-jam untuk ini dan yang perlu saya lakukan adalah melepaskan alamat ip saya jika konfigurasi eth0 ke bawah. Itu menjadi statis, sekarang mengenali nama host virtual saya.

Redbike
sumber