Điểm:1

Đã đặt chuyển hướng tên miền phụ Apache sang tên miền phụ khác

lá cờ fr

Tôi đang cố gắng thiết lập hai tên miền phụ, cho mộtb Trong tên miền.com. Tôi sử dụng hai tệp .conf, trông khá giống với các thay đổi đối với ServerName và ProxyPass:

<VirtualHost *:80>
        ServerName a.domain.com #This was added as a try for a fix. 
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>

        ServerName a.domain.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/a

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        #Proxies

        ProxyPass        /        https://a.domain.com:8444/
        ProxyPassReverse /        https://a.domain.com:8444/
        ProxyPass        /a/      https://a.domain.com:8444/
        ProxyPassReverse /a/      https://a.domain.com:8444/
        ProxyPass        /b/      https://b.domain.com:8445/
        ProxyPassReverse /b/      https://b.domain.com:8445/

</VirtualHost>

Điều này đang được thực hiện trong môi trường thử nghiệm của tôi, sao chép thứ gì đó tương tự như thứ hiện đang được sản xuất. Trong/etc/hosts, tôi đã thêm a.domain.comb.domain.com đến 127.0.0.1. DNS trong sản xuất có bản ghi cho những gì a.domain.comb.domain.com là cùng một IP (tôi cũng đã làm điều này trong máy mà tôi đang thử nghiệm cái này).

Cũng lưu ý rằng tôi không phục vụ bất kỳ nội dung nào từ thư mục gốc của họ. Tôi đã thêm rằng cố gắng khắc phục sự cố được nêu trong tiêu đề. Có một html đơn giản trong cả hai thư mục.

Vấn đề thực tế là gì?

Đơn giản, khi cố gắng a.domain.com, kết quả là ứng dụng web từ máy chủ cục bộ:8444, như mong đợi. Khi cố gắng b.domain.com, kết quả cũng là máy chủ cục bộ:8444, thay vì máy chủ cục bộ:8445. Cả hai a.confb.conf được bật và nếu tôi tắt a.conf, sau đó tôi nhận được chính xác máy chủ cục bộ:8445. Nếu tôi cũng cố gắng như a.domain.com/b, chuyển hướng sẽ giải quyết trở lại a.domain.com.

Tôi đã đọc một số câu hỏi và hướng dẫn, và hầu hết chúng đều có thứ gì đó hoạt động như trong cấu hình của tôi hoặc thêm NameVirtualHost, mà tôi hiểu là không cần thiết cho phiên bản Apache của tôi.Tôi cũng đã thêm Tên máy chủ vào cổng 80 vì tôi nghĩ rằng có lẽ yêu cầu cho b đã được phù hợp bởi a.conf vì chúng có cùng một IP, nhưng điều đó cũng không hiệu quả.

Tôi đang thiếu gì ở đây? Có phải thứ gì đó với mod_proxy mà tôi dường như đang bỏ qua không? Nếu có thể, tôi muốn giữ một tệp cho mỗi ứng dụng web. Cảm ơn!

Đây là trên Ubuntu 18.04.2, Apache 2.4 (mod_proxy và mod_ssl), Tomcat 9. Bất kỳ thông tin nào khác mà bạn muốn, tôi sẽ cố gắng hết sức để cung cấp.

CẬP NHẬT

Đã thử với cấu hình này. Cùng một kết quả không mong muốn.

<VirtualHost *:80>
        ServerAlias a.domain.com
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>

        ServerName a.domain.com
        ServerAdmin webmaster@localhost

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        #Proxies

        Redirect /b https://b.domain.com

        <Location />
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

        <Location /a>
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

</VirtualHost>

CẬP NHẬT

Ok, tôi chỉ tìm thấy một cái gì đó rất khó chịu. Nếu tôi nhập bằng trình duyệt của mình vào một trong hai a.domain.com hoặc b.domain.com, cả hai quyết tâm a.domain.com. Đó là vấn đề tôi mô tả ban đầu. NHƯNG nếu cố gắng https://a.domain.com hoặc https://b.domain.com, cả hai đều phân giải đến đúng máy chủ: một đến 8444b đến 8445.

Vì điều này rất khó chịu, tôi sẽ dừng lại và phân tích điều này sau một thời gian.

CẬP NHẬT

Sau một thời gian dài kìm hãm, tôi đã thử một số điều chỉnh ngẫu nhiên khác chỉ để xem điều gì đã xảy ra và một lần nữa không có gì hoạt động như mong đợi, ngoại trừ khi sử dụng HTTPS. Tôi đã cài đặt Postman để xem những gì được gửi trong yêu cầu và phát hiện ra rằng trong Postman, cả HTTP và HTTPS đều sử dụng Máy chủ chính xác. Thậm chí tốt hơn/tệ hơn: Phản hồi thực tế hiển thị các trang chào mừng khác nhau cho a.domain.comb.domain.com, nghĩa là các cấu hình của tôi đang hoạt động bình thường khi tôi sử dụng Postman.

Tôi nghĩ rằng tất cả thử thách này có thể chỉ là sự cố bộ đệm, nhưng trình duyệt thử nghiệm mà tôi lựa chọn (Firefox dev ed) được đặt thành không lưu nội dung vào bộ đệm. Tôi sẽ kiểm tra phản hồi bằng curl và các trình duyệt khác của tôi.

lá cờ kz
Bạn đề cập đến _caching_ ... hãy nhớ rằng các lệnh 301 được lưu vào bộ đệm liên tục (bởi trình duyệt và có thể là bộ đệm trung gian). Nếu trước đây bạn đã bỏ qua chỉ thị `ServerName a.domain.com` trong vHost:80 (và chỉ thị tương ứng cho `b.domain.com`), thì hãy chuyển hướng từ `http://b.domain.com/` sang ` https://a.domain.com` có thể đã được lưu trong bộ nhớ cache (tùy thuộc vào thứ tự bao gồm các tệp cấu hình của bạn). Vì vậy, vâng, chỉ thị đó thực sự là _essential_.
Jetto Martínez avatar
lá cờ fr
Vâng, nhận xét của bạn đến vào đúng thời điểm tôi đăng câu trả lời. Đó thực sự là bộ đệm. Tôi đã thiết lập trình duyệt của mình để không lưu vào bộ đệm bất kỳ thứ gì, nhưng nó đã được lưu vào bộ đệm. Tôi không chắc tại sao cấu hình này lại bị đặt lại. Với điều này cố định, tôi vẫn sẽ xem xét điều này. Cảm ơn!
Điểm:1
lá cờ fr

thủ phạm: bộ đệm.

Tại một thời điểm nào đó, cấu hình trình duyệt của tôi đã thay đổi (Có lẽ là một bản cập nhật?) và tôi có hơn 3GB bộ nhớ đệm, bao gồm các trang web thử nghiệm mà tôi đang cố gắng thiết lập làm tên miền phụ. Rất tiếc.

Sau khi xóa bộ đệm, một cảnh báo về chứng chỉ tự ký của tôi đã được nhắc khi nhấn các URL của tôi, như mong đợi. Sau khi chấp nhận rủi ro, tôi đã được chuyển hướng đến các trang web thích hợp. Điều này bằng cách sử dụng b.domain.com mà không cần thêm giao thức.

Để đảm bảo rằng điều này đang hoạt động, tôi đã thử nghiệm trong tất cả 7 trình duyệt khác của mình (Phải đảm bảo) và cuộn tròn có và không có giao thức và kết quả cũng như mong muốn.

Cuối cùng, cấu hình đã ổn. Tôi sẽ đăng nó ở đây trong trường hợp bạn cần Máy chủ Apache ủy quyền cho các phiên bản Tomcat cụ thể theo tên miền phụ, sử dụng proxy_mod cũng chuyển hướng ngay lập tức từ cổng 80 sang cổng 433.

<VirtualHost *:80>
        ServerName a.domain.com
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>
        
        ServerName a.domain.com
        ServerAdmin [email protected]

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        SSLEngine On
        SSLCertificateFile /etc/ssl/certs/DONT_USE_SELF_SIGNED.pem
        SSLCertificateKeyFile /etc/ssl/private/CERTS_IN_PRODUCTIve.key
        SSLVerifyClient none

        #Proxies
        ProxyRequests Off
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off

        #Redirections
        Redirect /b https://b.domain.com

        <Location />
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

        <Location /a>
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

</VirtualHost>

Vui lòng lưu ý rằng các cài đặt cho SSL Proxy và SSL là dành cho chứng chỉ Tự ký. Vui lòng đọc tài liệu liên quan cho từng tài liệu nếu bạn triển khai điều này cho môi trường sản xuất.Cũng lưu ý rằng đây là tập tin cấu hình cho a.domain.com. tương đương cho b.domain.com hoàn toàn giống nhau, với Tên máy chủ, Bí danh máy chủ, chuyển hướng, Vị trí và cổng của máy chủ cục bộ thích hợp.

lá cờ kz
Điểm nhỏ, nhưng bạn không cần `ServerName` _and_ `ServerAlias` nếu chúng đề cập đến cùng một _hostname_.
Jetto Martínez avatar
lá cờ fr
ghi nhận. Tên máy chủ là cái tôi nên giữ, phải không?
lá cờ kz
Vâng đúng vậy.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.