2012-02-11 32 views
6

Grails có biết gì về các tên miền phụ (ví dụ: subdomain.domain.com) không? Tôi không thấy nó được thảo luận trong manual. Đây có phải là vấn đề máy chủ ứng dụng/máy chủ web hoàn toàn không? Có thể được gắn vào bộ điều khiển grails, hoặc tĩnh hoặc động?Grails and Subdomains

Trả lời

10

Không quan trọng máy chủ nào được truy cập cho ứng dụng web java.

  1. Giả sử bạn có nhiều khách hàng được phân tách trên một máy chủ, ví dụ: customer1.yourhost.com, customer2.yourhost.com, v.v. và tất cả khách hàng sẽ có cùng chức năng.

    Trong trường hợp đơn giản nhất tôi propse, mà bạn chỉ cần sử dụng viết một bộ lọc, mà sẽ luôn luôn đặt một số biến yêu cầu, như thế này:

    def filters = { 
        all(controller:'*', action:'*') { 
         before = { 
          if (request.serverName.contains(".")) { 
           def clientName = 
            request.serverName.substring(0, request.serverName.indexOf(".")) 
    
           request.currentClient = Client.findByClientName(clientName) // e.g. 
          } 
         } 
        } 
    } 
    

    Sau đó ở bất cứ nơi nào bạn có thể kiểm tra request.currentClient cho subdomain truy cập hiện tại .

    Tuy nhiên nếu nó trở nên phức tạp hơn, hãy xem xét một số plugin nhiều bên thuê cho grails.

  2. Nếu bạn muốn có các chức năng khác nhau cho từng tên miền phụ, ví dụ: help.yourhost.com và www.yourhost.com, tôi sẽ đề nghị bạn viết các ứng dụng grails độc lập. Sau đó bạn thiết lập một máy chủ NGINX để chuyển hướng các yêu cầu đó đến ứng dụng thích hợp đang chạy trên máy chủ ứng dụng của bạn.

+0

Cảm ơn bạn đã giải quyết vấn đề và hiển thị các giải pháp khác nhau. Bạn có cơ hội có bất kỳ suy nghĩ nào liên quan đến việc chia nhỏ tên miền phụ cho https không, do đó người dùng có secure.mydomain.com ở chế độ SSL không? Bảo mật kênh lõi bảo mật mùa xuân (http://grails-plugins.github.com/grails-spring-security-core/docs/manual/guide/single.html#17%20Channel%20Security) dường như bị giới hạn tại đây. – Ray

+0

Vì vậy, bạn có www.mydomain.com và muốn chuyển sang secure.mydomain.com, khi người dùng đăng nhập? Tôi thấy vấn đề lớn nhất khi đặt cookie cho máy chủ lưu trữ khác nhau secure.mydomain.com. Tuy nhiên, mặc dù tôi chưa thử, nhưng đủ để cấu hình bảo mật mùa xuân để chuyển hướng đến một URL tuyệt đối bằng cách đặt 'grails.plugins.successHandler.defaultTargetUrl' thành giá trị thích hợp? – Chris

+0

Nhu cầu hiện tại của tôi là đảm bảo an toàn cho trang web trong quá trình thanh toán sản phẩm/dịch vụ, nơi tôi xử lý thẻ tín dụng. Sau khi xử lý xong, hãy quay lại URL không phải SSL. Cách trang web hiện được thiết kế, người dùng đang đăng nhập bằng giỏ hàng của mình, chỉ để xem giảm giá anh ta nhận được. Từ đó, tôi đi đến SSL sau khi anh ta kiểm tra với giỏ hàng của mình, và sau đó khi xử lý visa/mc được thu thập/thực hiện, hãy quay trở lại không phải SSL. – Ray

0

Nơi duy nhất tôi biết về tên miền phụ đang được xem xét là dành cho độ phân giải của người thuê khi sử dụng plugin nhiều người thuê. Xem http://tinyurl.com/6tuxwvs.

1

Chúng tôi chạy một vài ứng dụng Grails trên một máy chủ lưu trữ bằng nhiều miền phụ khác nhau. Trong mọi trường hợp, chúng tôi sử dụng Apache để truy cập máy chủ Tomcat và sử dụng mod jk hoặc proxy chuyển tiếp để xử lý các ứng dụng cho ứng dụng Grails khác nhau. Hầu hết nó là khá thẳng về phía trước, những gì chúng tôi đã không tìm ra là chạy các ứng dụng ở cấp cơ sở cho các miền khác nhau, ví dụ - http://app1.domain.com thay vì http://app1.domain.com/app1

+2

Để cấu hình như bối cảnh gốc, bạn sẽ cần phải thay đổi Config.groovy để sử dụng grails.app.context = "/" –