2009-02-26 39 views
17

Tôi có hai ứng dụng, một là www.myexample.com, một là blog.myexample.com. Tôi đang sử dụng PHP và Apache.Cách chuyển hướng các yêu cầu miền phụ khác nhau đến cổng khác nhau

Bây giờ, tôi muốn để www.myexample.com chạy trên cổng 82 của máy của tôi và blog.myexample.com trên cổng 83, trên cùng một máy. Làm thế nào để cấu hình các apache và/hoặc các kịch bản PHP để khi các yêu cầu cho các yêu cầu được phục vụ đúng cách?

Chỉnh sửa: Cảm ơn mọi người đã phản hồi, nhưng tôi sợ tôi không hiểu rõ câu hỏi-- xấu của tôi!

Điều tôi thực sự muốn là mô phỏng điều kiện nhờ đó www.myexample.com và blog.myexample.com được đặt trên các máy khác nhau. Vì vậy, khi có yêu cầu, máy chủ cổng (máy chủ lưu trữ www.myexample.com) sẽ kiểm tra xem đây có phải là yêu cầu cho www.myexample.com hoặc cho blog.myexample.com và thực hiện các định tuyến lại cần thiết hay không.

Cách thực hiện việc này? Cảm ơn.

+0

Ummmm ... TẠI SAO? Bạn có biết về lưu trữ ảo dựa trên tên không? – derobert

+0

Thứ hai @ derobert's "why". Vui lòng giải thích. – matpie

+0

Tôi đã cập nhật câu hỏi, xin lỗi vì đã không đăng câu hỏi hay ở địa điểm đầu tiên – Graviton

Trả lời

35

tôi sẽ cho rằng bạn có lý do riêng của mình về việc muốn hai địa điểm (wwwblog) để chạy trên các cổng khác nhau - và trong các quá trình khác nhau. Nếu đây không phải là những gì bạn dự định, ví dụ: bạn không muốn có hai quy trình riêng biệt, sau đó có các cổng khác nhau có thể không phải là những gì bạn dự định: sử dụng VirtualHost thay vào đó, để đồng lưu trữ hai miền trong cùng một phiên bản apache + php trên cổng 80. Nếu không, hãy đọc tiếp.

Giả sử rằng bạn có hai quy trình apache + php đang nghe trên máy chủ cục bộ: 82 và localhost: 83 tương ứng, đưa ra quy trình thứ ba, apache chỉ hoạt động như một proxy ngược. Có trường hợp apache proxy ngược lại lắng nghe các yêu cầu đến trên cổng 80 từ internet, với hai định nghĩa máy chủ ảo. Đầu tiên định nghĩa máy chủ ảo, www, sẽ chuyển tiếp yêu cầu tới localhost: 82, trong khi định nghĩa máy chủ ảo thứ hai, blog, sẽ chuyển tiếp yêu cầu tới locahost: 83, ví dụ:

NameVirtualHost *:80 

# www 
<VirtualHost *:80> 
    ServerName www.myexample.com 
    ProxyPass    /  http://localhost:82/ 
    ProxyPassReverse  /  http://localhost:82/ 
</VirtualHost> 

# blog 
<VirtualHost *:80> 
    ServerName blog.myexample.com 
    ProxyPass    /  http://localhost:83/ 
    ProxyPassReverse  /  http://localhost:83/ 
</VirtualHost> 
+1

FYI, điều này rất tốt cho công việc phát triển với nhiều trang web. Tôi sử dụng Visual Studio và nó được thiết lập để làm việc với máy chủ tích hợp, yêu cầu số cổng. Nếu bạn thiết lập dự án của mình để sử dụng cổng tĩnh, bạn có thể cài đặt apache và sử dụng cấu hình này để trỏ tên miền vào các cổng đó, chuyển tên miền vào tệp lưu trữ của bạn và các trang web được đặt tên tất cả trỏ đến các cổng khác nhau trên địa phương của bạn máy, nhưng có tên có thể đọc được. Rất tiện dụng. – jvenema

+1

Trên các cửa sổ, tôi cũng phải bật mod_proxy_http trước khi nó hoạt động. – Kato

+0

sử dụng linux 'sudo a2enmod proxy_http' Và lưu ý về cảnh báo bảo mật liên quan đến các proxy chuyển tiếp trên trang Apache http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#access – Lex

0

Off đỉnh mũ của tôi:

Listen 82 
Listen 83 
NameVirtualHost 1.2.3.4 # Use your server's IP here 

<VirtualHost www.myexample.com:82> 
# Configure www.myexample.com here 
</VirtualHost> 

<VirtualHost blog.myexample.com:83> 
# Configure blog.myexample.com here 
</VirtualHost> 
5

tôi sử dụng proxy cho loại điều .

Trong ví dụ của tôi, tôi có apache 1.3 chạy trên cổng 80, nhưng tôi cần kho svn để chạy trên apache 2.2 và tôi không muốn nhập: 82 vào cuối tên miền mỗi lần. Vì vậy, tôi đã chuyển hướng proxy trên apache 1.3 (cổng 80):

<VirtualHost *:80> 
    ServerName svn.mydomain.com 
    ServerAlias svn 
    ServerAdmin [email protected] 

    <IfModule mod_proxy.c> 
    ProxyPass/http://svn:82/ 
    </IfModule> 
</VirtualHost> 
0

Một câu trả lời hoàn chỉnh nhiều đến thế này sẽ làm điều gì đó như thế này cho phép bạn thiết lập một cổng proxy đó là những gì được loosly mô tả ở trên.

ServerName localhost

<Proxy *> 
    Order deny,allow 
    Allow from localhost 
</Proxy> 

ProxyRequests   Off 
ProxyPreserveHost  On  

ProxyPass    /  http://localhost:10081/ 
ProxyPassReverse  /  http://localhost:10081/ 
ProxyPassReverseCookiePath/ http://localhost:10081/ 

+0

" ProxyPassReverseCookiePath là gì " tốt cho? –

2

Run dòng sau trên thiết bị đầu cuối (ghi rõ tên miền của bạn và tên miền phụ một cách chính xác)

sudo nano /etc/apache2/sites-available/subdomain.domain.com.conf 

Dán mã và biến đổi sau đây theo yêu cầu của bạn

<VirtualHost *:80> 
     ServerAdmin [email protected] 
     ServerName subdomain.domain.com 
     ServerAlias subdomain.domain.com 
     ProxyRequests Off 

     #ProxyPass/http://localhost:8080/ 
     <Location /> 
       ProxyPreserveHost On 
       ProxyPass http://domain.com:8080/ 
       ProxyPassReverse http://domain.com:8080/ 
     </Location> 
    # Uncomment the line below if your site uses SSL. 
    #SSLProxyEngine On 
</VirtualHost> 

Chạy các dòng sau vào thiết bị đầu cuối (ghi rõ tên miền của bạn và tên miền phụ một cách chính xác)

sudo a2enmod proxy 
sudo a2enmod proxy_http 
sudo a2enmod subdomain.domain.com.conf 
sudo service apache2 restart 
+0

Tôi đoán "sudo a2enmod subdomain.domain.com.conf" nên là "sudo a2ensite subdomain.domain.com.conf" ở đây, vì chúng ta cần phải kích hoạt site subdomain.domain.com.conf (không phải là một module). –

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