Làm cách nào để chuyển hướng tên miền phụ sang một cổng khác trên cùng một máy chủ?


67

Tôi có một số tên miền phụ tôi muốn chuyển hướng đến các cổng cụ thể trên cùng một máy chủ. Nói tôi có

dev.mydomain.com 

Tôi muốn dev.mydomain.comchuyển hướng trong suốt mydomain.com:8080và tôi muốn giữ tên miền phụ ban đầu là url của trình duyệt.

Làm cách nào để làm điều này với Apache 2.2? Tôi có Apache 2.2 chạy trên cổng mặc định 80. Tôi không thể tìm ra cấu hình ghi để có được điều này xảy ra.

Tôi đã thiết lập dev.mydomain.comđể giải quyết trong DNS tới mydomain.com.

Đây là một máy chủ phát triển mạng nội bộ có địa chỉ IP không thể định tuyến nên tôi không quá quan tâm đến việc khai thác và bảo mật sẽ làm tổn hại đến máy chủ đối mặt công khai.

Câu trả lời:


69

Giải pháp

Đây là những gì cuối cùng tôi đã nghĩ ra sau khi được Miles Erickson đặt đúng hướng. Tôi muốn thanh địa chỉ phản ánh tên miền / tên miền ban đầu của yêu cầu chứ không phải máy chủ và cổng được chuyển hướng, nhưng anh ấy đã đưa tôi đi đúng hướng để Google đưa ra giải pháp bằng cách sử dụng VirtualHostvà cuối cùng tôi đã tìm thấy giải pháp bao gồm việc sử dụng mod_proxy.

<VirtualHost *:80>
    ServerAdmin me@mydomain.com
    ServerName dev.mydomain.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8888/
    ProxyPassReverse / http://localhost:8888/
</VirtualHost>

7
Đối với tất cả mọi người câu trả lời này không làm việc cho, hãy nhớ rằng bạn phải kích hoạt mods mod_proxycũng như proxy_http.
matewka

9

Giả sử rằng dev.mydomain.com có ​​thể được phân giải thành IP của mydomain.com, bạn có thể thêm phần sau vào httpd.conf của mình:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev.mydomain.com
    redirect / http://mydomain.com:8080/
</VirtualHost>

Tài liệu liên quan của Apache:

  1. Hướng dẫn tạo máy chủ ảo dựa trên tên
  2. Core , bao gồm VirtualhostNameVirtualhost
  3. Chuyển hướng

Câu hỏi liên quan: Chuyển hướng Apache dựa trên tên máy chủ

(Lưu ý: phiên bản gốc của câu trả lời này đã gợi ý không chính xác việc sử dụng RedirectMatch, như @ChrisS đã chỉ ra một cách hữu ích, không thể phân tích phần tên miền của URL.)


1
hãy xem câu trả lời tự cung cấp của tôi cho những gì tôi thực sự đã sử dụng, đó là ý tưởng của Virtualhost với mod_proxy để bảo vệ máy chủ ban đầu thay vì thực hiện chuyển hướng. Đây là một máy chủ nội bộ nên tôi không quan tâm đến bảo mật hoặc khai thác mod_proxy.

1
Tìm thấy nhiều đề xuất khác nhưng điều này cuối cùng đã có hiệu quả với tôi trên Windows Server 2008 R2 / Apache 2.2.25.
HPWD

1
Vấn đề với giải pháp này là ở anh trai bạn, bạn không ở lại miền đầu tiên, bạn nhận được 302 đến lần thứ hai.
Pleymor

7

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

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

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

<VirtualHost *:80>
        ServerAdmin admin@example.com
        ServerName subdomain.example.com
        ServerAlias subdomain.example.com
        ProxyRequests Off

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

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

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart

3
Có sự khác biệt cần thiết giữa điều này và câu trả lời được chấp nhận?
kasperd

1
Hầu hết mọi người quên thêm sudo a2enmod proxy_httpđể họ gặp khó khăn khi chạy đúng cách. Ngoài ra, tôi cố gắng đưa ra toàn bộ quá trình từ đầu đến cuối theo trình tự để giúp chính xác hơn. Cảm ơn câu hỏi của bạn.
MAK Ripon

1
+1 vì đề cập đến "ProxyRequests Off"
Sebastian

1
Điều này chỉ không làm việc cho tôi. 'sudo a2enmod subomain.domain.com.conf' nói "LRI: Mô-đun xyz không tồn tại!" Nó có phải được đề cập trong cấu hình 'mặc định' không?
Dirk Schumacher

2
Sửa lỗi trong việc đăng ký tên miền phụ sudo a2ensite sub.yourdomain.com
Ali Azhar

5

Thêm vào cấu hình vhost chính của bạn các dòng sau:

ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/

Lưu ý rằng điều này đòi hỏi mod_proxy trên Apache.


Đây không phải là một chuyển hướng; nó ủy nhiệm kết nối. Việc kích hoạt mod_proxy có thể cực kỳ dễ khai thác nếu bạn không cẩn thận cấu hình nó. Tôi rất muốn giới thiệu chống lại điều này.
Chris S

4
Anh ấy không muốn chuyển hướng, theo OP của anh ấy. Anh ta muốn URL gốc vẫn ở thanh địa chỉ; điều này có nghĩa là sử dụng mod_proxy hoặc mod_rewrite và tốt hơn hết là tránh mod_rewrite.
thích nghi

4

Bạn đang tìm mod_rewrite. Đây là liên kết đến tài liệu của Apache , bao gồm nhiều ví dụ cho các cấu hình cơ bảnnâng cao ..

Và nếu bạn không thể tự mình giải thích tài liệu, hãy thử thêm tài liệu này vào httpd.conf:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC]        
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]    

Và nếu đó không phải là một ví dụ rõ ràng, thì đây cũng là một liên kết đến hướng dẫn cho người mới bắt đầu mod_rewrite .


1
Tôi đang chia sẻ lưu trữ. Viết lại là lựa chọn duy nhất. Tôi có thể tạo tệp .htaccess, nhưng không phải là proxy hoặc máy chủ ảo.
abalter
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.