Apache không tôn trọng chỉ thị ServerName cho một trang web cụ thể


9

Tôi đã có một vài trang web được định cấu hình là Virtualhosts bằng Apache đã hoạt động tốt trong một thời gian. Gần đây tôi đã thay đổi tên máy chủ của máy chủ thành một trong những tên miền đang được phục vụ và cũng đã thêm nó vào / etc / hosts chỉ vào địa chỉ IP bên ngoài của máy chủ.

Vì tôi đã làm điều đó, việc truy cập tên miền từ máy tính xách tay của tôi đưa tôi đến mặc định "Nó hoạt động!" trang. Nếu tôi xóa 000 mặc định khỏi / etc / apache2 / sites-enable /, nó sẽ hiển thị đúng trang web. Đang cố gắng truy cập trang web với 'www.' tiền tố đưa tôi đến đúng trang web cho dù có mặc định 000 hay không trong trang web được kích hoạt.

Dựa trên tất cả những điều đó, tôi đoán rằng cấu hình mặc định đang phục vụ trang mặc định vì cách tôi đã định cấu hình tên máy chủ hoặc / etc / hosts (hoặc cả hai), nhưng tôi không thể tìm ra cách tắt nó trong khi để lại các cài đặt như chúng là. Mọi góp ý đều được chào đón!

Chỉnh sửa - Cấu hình Virtualhost hiện tại của tôi trông như thế này:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@domain.com

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

Tóm lại: Tôi có một số Virtualhost được thiết lập và đây là cái duy nhất không hoạt động đúng. Tôi có thể truy cập http://www.domain.com tốt, nhưng http://domain.com đưa tôi đến mặc định "Nó hoạt động!" Của Apache trang. Nếu tôi tắt cấu hình 000 mặc định, nó sẽ hiển thị trang thích hợp. Điều này chỉ bắt đầu xảy ra sau khi tôi đặt tên máy chủ của máy chủ thành domain.com và thêm một dòng vào / etc / hosts trỏ domain.com vào địa chỉ IP bên ngoài của máy chủ. Tôi muốn rời khỏi đó nếu có thể.

Chỉnh sửa: Tôi đã chạy apache2ctl -Skể từ khi /usr/sbin/apache2 -Sđưa cho tôi "apache2: tên người dùng xấu $ {APACHE_RUN_USER}". Đây là đầu ra:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK

tên miền.com đang được sử dụng trên tệp httpd.conf chính là ServerName? hoặc apache2ctl.conf bạn dường như đang sử dụng Ubuntu để nó có thể khác tên.
Giải thưởng

Câu trả lời:


12

Mất câu hỏi này vào ngày khác.

Khi bạn có bộ chứa <Virtualhost> không có thành phần ServerName, nó sẽ sử dụng tên máy chủ mặc định. Vì 000 mặc định có thể không có thành phần ServerName và là bảng chữ cái đầu tiên được bao gồm, đó là lý do tại sao nó trả lời cho hostname.com và không cho phép tên máy chủ được khai báo rõ ràng của bạn hoạt động.


Tôi thấy, có cách nào khắc phục điều đó? Tôi muốn cấu hình mặc định xử lý bất kỳ tên miền nào chưa được xử lý, nhưng tôi không muốn nó xử lý tên miền cụ thể đó.
John Debs

cung cấp cho nó một tên miền khác với tên miền được sử dụng trong cấu hình hoặc đổi tên thành zzz-default để nó được gọi sau cùng.
karmawhore

Được rồi, tôi nghĩ rằng tôi hiểu tất cả bây giờ. Tôi đã thử zzz-default nhưng đó không phải là hành vi chính xác mà tôi muốn. Thiết lập ServerName example.comtrong cấu hình mặc định hoạt động tuyệt vời, mặc dù. Cảm ơn!
John Debs

4

Bạn có lệnh NameVirtualhost *: 80 ở đâu đó không?

Thử:

/usr/sbin/apache2 -S

Điều đó sẽ cho bạn biết làm thế nào apache phân tích tệp cấu hình. Bạn có cấu hình có IP thực tế hay tất cả đều có dấu * không? Bạn có thiếu cái nào không: 80? Apache không thích trộn lẫn chúng.

Bạn có mặc định ServerName domain.com hoặc ServerAlias ​​domain.com không?


Vâng, tôi đã có nó trong /etc/apache2/posts.conf. Tôi sẽ thêm một bản tóm tắt cho câu hỏi hy vọng làm cho nó rõ ràng hơn.
John Debs

Cấu hình mặc định 000 của tôi không bị ảnh hưởng, nó không có chỉ thị ServerName hoặc ServerAlias.
John Debs

NameVirtualhost không được dùng nữa.
Sam


0

Điều này đã làm việc:

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

khi tôi mắc lỗi đánh máy, nó KHÔNG hoạt động (lệnh ServerName hai lần):

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

Khi tôi có lệnh ServerName hai lần, nó tiếp tục phân giải đến trang đầu tiên được liệt kê (không hiển thị ở đây).

hy vọng điều này sẽ giúp ai đó ...


0

Tôi đã gặp một vấn đề tương tự và đã khắc phục nó bằng cách đặt rõ ràng Tên máy chủ trong tệp httpd.conf chính, thay vì để apache tự động tìm ra nó. Tôi giả sử rằng những gì apache quyết định giống như vhost của tôi (được xác định sau), do đó, cái mặc định "đã thắng", ghi đè cài đặt vhost.

Tôi chỉ đặt httpd.conf ServerName thành tên máy chủ mà máy có, tôi sẽ không bao giờ phục vụ các trang web cho.

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.