2012-09-09 48 views
40

Giờ đã đi vào vòng kết nối theo mọi hướng dẫn tôi có thể tìm thấy trên mạng.Cách chạy nhiều trang web trên một trường hợp apache

Tôi muốn có hai trang web chạy trên một ví dụ apache duy nhất, một cái gì đó như thế này - 192.168.2.8/site1 và 192.168.2.8/site2

Tôi đã đi vòng quanh trong vòng tròn, nhưng đồng Hiện nay tôi có hai tập tin conf trong 'sites-available (symlinked để sites-enabled) trông giống như this-

<VirtualHost *:2000> 

ServerAdmin [email protected] 
ServerName site1 
ServerAlias site1 

# Indexes + Directory Root. 
DirectoryIndex index.html 
DocumentRoot /home/user/site1/ 

# CGI Directory 
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/ 

Options +ExecCGI 

# Logfiles 
ErrorLog /home/user/site1/logs/error.log 
CustomLog /home/user/site1/logs/access.log combined 

</VirtualHost> 

<VirtualHost *:3000> 

ServerAdmin [email protected] 
ServerName site2 
ServerAlias site2 

# Indexes + Directory Root. 
DirectoryIndex index.html 
DocumentRoot /home/user/site2/ 

# CGI Directory 
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/ 

Options +ExecCGI 

# Logfiles 
ErrorLog /home/user/site2/logs/error.log 
CustomLog /home/user/site2/logs/access.log combined 

</VirtualHost> 

http.conf trông giống như this-

NameVirtualHost *:2000 
NameVirtualHost *:3000 

Tại thời điểm này tôi nhận được này sai sót

[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results 

Ports.conf trông như thế này - (mặc dù không có hướng dẫn đã đề cập đến bất kỳ cần phải chỉnh sửa này)

NameVirtualHost *:80 

Listen 80 
<IfModule mod_ssl.c> 
# If you add NameVirtualHost *:443 here, you will also have to change 
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl 
# to <VirtualHost *:443> 
# Server Name Indication for SSL named virtual hosts is currently not 
# supported by MSIE on Windows XP. 
Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
Listen 443 
</IfModule> 

Có ai có thể đưa ra một số hướng dẫn đơn giản để chạy chương trình này không? Mọi hướng dẫn tôi đã tìm thấy đều nói rằng hãy làm theo một cách khác và mỗi hướng dẫn dẫn đến các lỗi khác nhau. Tôi rõ ràng đang làm điều gì đó sai nhưng đã không tìm thấy lời giải thích rõ ràng về những gì có thể.

Chỉ muốn một trang web có thể truy cập trên cổng 2000 và cổng còn lại có thể truy cập trên cổng 3000 (hoặc bất kỳ thứ gì, chỉ cần chọn các cổng đó để kiểm tra).

Tôi đang chạy Ubuntu Server 12.04 ...

=============

EDIT

Tiếp theo một 'hướng dẫn' ...

Bây giờ tôi đã thiết lập này trong sites-available:

<VirtualHost *:80> 
    DocumentRoot "/home/user/site1/" 
    ServerName 192.168.2.10/site1 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/home/user/site2/" 
    ServerName 192.168.2.10/site2 
</VirtualHost> 

đã thiết lập này trong apache2.conf:

ServerName site1 
ServerName site2 

đã bổ sung này để ports.conf:

Listen 192.168.2.10:80 

==============

EDIT

tại Nó hoạt động, tôi đặt tệp này vào tệp conf trong trang web được bật:

<VirtualHost *:81> 
    DocumentRoot "/home/user/site1/" 
    ServerName site1 
</VirtualHost> 

<VirtualHost *:82> 
    DocumentRoot "/home/user/site2/" 
    ServerName site2 
</VirtualHost> 

Tôi có điều này trong cổng.conf:

Listen *:80 
Listen *:81 
Listen *:82 

Tôi có điều này trong apache2.conf:

ServerName site1 
ServerName site2 

Tôi không tìm thấy điều này trong bất kỳ hướng dẫn nào Tôi chỉ làm việc này qua cả ngày dùng thử và lỗi nên tôi không biết đây có phải là giải pháp tốt hay không. Nhưng ít nhất là làm việc như thế nào tôi muốn nó ngay bây giờ.

+0

Dường như với tôi bạn cần chỉ định tên máy chủ ảo trong NameVirtualHost. –

+0

Chúc mừng, tôi đã thử nhiều thứ dọc theo những dòng đó, bạn có thể cụ thể hơn về những gì tôi nên thử đặt trong đó không? – Exbi

+0

Sau một ngày cố gắng để làm việc này, cuối cùng tôi đã tình cờ gặp câu trả lời lol. Tôi cảm thấy kiệt quệ về tinh thần, tôi sẽ đi ngủ. Tôi nghi ngờ giải pháp hack apache dodgy của tôi sẽ được quan tâm đến bất cứ ai, nhưng tôi sẽ chỉnh sửa nó vào cuối câu hỏi của tôi. – Exbi

Trả lời

62

Câu hỏi của bạn đang trộn một vài khái niệm khác nhau. Bạn bắt đầu nói rằng bạn muốn chạy các trang web trên cùng một máy chủ bằng cách sử dụng cùng một tên miền, nhưng trong các thư mục khác nhau. Điều đó không yêu cầu bất kỳ thiết lập đặc biệt nào. Một khi bạn nhận được các tên miền duy nhất đang chạy, bạn chỉ cần tạo các thư mục theo docroot đó.

Dựa trên phần còn lại của câu hỏi của bạn, những gì bạn thực sự muốn làm là chạy các trang web khác nhau trên cùng một máy chủ với tên miền riêng của chúng.

Tài liệu tốt nhất bạn sẽ tìm thấy về chủ đề là tài liệu virtual host trong hướng dẫn sử dụng apache.

Có hai loại máy chủ ảo: dựa trên tên và dựa trên IP. Tên dựa trên cho phép bạn sử dụng một địa chỉ IP duy nhất, trong khi dựa trên IP yêu cầu một IP khác nhau cho mỗi trang web. Dựa trên mô tả của bạn ở trên, bạn muốn sử dụng máy chủ ảo dựa trên tên.

Lỗi ban đầu bạn nhận được là do bạn đang sử dụng các cổng khác với đường dây NameVirtualHost. Nếu bạn thực sự muốn có trang web được phân phát từ các cổng khác với 80, bạn sẽ cần có mục nhập NameVirtualHost cho mỗi cổng.

Giả sử bạn đang bắt đầu từ đầu, điều này đơn giản hơn nhiều so với vẻ bề ngoài.

Điều đầu tiên bạn cần làm là cho apache biết rằng bạn sẽ sử dụng máy chủ ảo dựa trên tên.

NameVirtualHost *:80 

Bây giờ apache mà biết những gì bạn muốn làm, bạn có thể thiết lập các định nghĩa vhost của bạn:

<VirtualHost *:80> 
    DocumentRoot "/home/user/site1/" 
    ServerName site1 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/home/user/site2/" 
    ServerName site2 
</VirtualHost> 

Lưu ý rằng bạn có thể chạy như nhiều trang web mà bạn muốn trên cùng một cổng. Các ServerName là khác nhau là đủ để nói với Apache mà vhost để sử dụng. Ngoài ra, chỉ thị ServerName luôn là tên miền/tên máy chủ và không bao giờ nên bao gồm đường dẫn.

Nếu bạn quyết định chạy các trang web trên một cổng khác với 80, bạn sẽ luôn phải bao gồm số cổng trong URL khi truy cập trang web. Vì vậy, thay vì đi http://example.com bạn sẽ phải đi đến http://example.com:81

+0

bạn có thể vui lòng xây dựng trường hợp cho các cổng khác hơn 80. Tôi thực sự nhận được bối rối trong việc thực hiện điều này. :) – user79307

+1

@accssharma Theo mặc định apache (và tất cả các phần mềm máy chủ web khác) lắng nghe các kết nối trên cổng 80. Do đó, các trình duyệt được mã hóa để kết nối với cổng 80 khi yêu cầu trang web. Nếu bạn chạy một trang web trên một cổng khác với 80, người dùng của bạn sẽ luôn phải bao gồm số cổng khi yêu cầu trang web. Tôi khuyên bạn nên chống lại điều này. – bradym

+0

@accssharma Nếu bạn chọn để chạy một trang web trên một cổng khác với 80, bạn sẽ cần một dòng NameVirtualHost chỉ định cổng, sau đó VirtualHost container chỉ định cùng một cổng. Về cơ bản, sao chép những gì tôi đã có ở trên và thay thế 80 với cổng nơi bạn có ý định chạy trang web. – bradym

3

Có với Virtual Host bạn có thể có nhiều chương trình song song như bạn muốn:

mở

/etc/httpd/conf/httpd.conf

Listen 81 
Listen 82 
Listen 83 

<VirtualHost *:81> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site1/html 
    ServerName site1.com 
    ErrorLog logs/site1-error_log 
    CustomLog logs/site1-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site1/cgi-bin/" 
</VirtualHost> 

<VirtualHost *:82> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site2/html 
    ServerName site2.com 
    ErrorLog logs/site2-error_log 
    CustomLog logs/site2-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site2/cgi-bin/" 
</VirtualHost> 

<VirtualHost *:83> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site3/html 
    ServerName site3.com 
    ErrorLog logs/site3-error_log 
    CustomLog logs/site3-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site3/cgi-bin/" 
</VirtualHost> 

Khởi động lại apache

service httpd restart

Bây giờ bạn có thể tham khảo

site1:

http://<ip-address>:81/ 
http://<ip-address>:81/cgi-bin/ 

site2:

http://<ip-address>:82/ 
http://<ip-address>:82/cgi-bin/ 

Site3:

http://<ip-address>:83/ 
http://<ip-address>:83/cgi-bin/ 

Nếu con đường không hardcoded trong bất kỳ kịch bản sau đó trang web của bạn nên làm việc liên tục.

Các vấn đề liên quan