2011-12-04 17 views
10

Tôi đọc về điều này trên hướng dẫn Tomcat here và một số câu hỏi SO. Và tôi nghĩ tôi cũng làm điều tương tự. Nhưng theo một cách nào đó không thể quản lý để thành công.Cách đặt đường dẫn ngữ cảnh trong Tomcat để người dùng có thể nhập trang web mà không cần thêm tên thư mục được triển khai?

Trước hết tôi phải nói rằng ứng dụng của tôi được triển khai trên máy chủ Tomcat được chia sẻ mà tôi không có quyền kiểm soát. Tôi chỉ cần thả tệp .war của mình và nó được triển khai.

Tôi đã cố gắng đóng gói đơn đăng ký của mình là ROOT.war nhưng không hoạt động. Các quản trị viên nói với tôi để gói nó như bất cứ điều gì tên tôi muốn và họ sẽ chăm sóc nó. tôi đóng gói nó như my-application.war và nó đã được triển khai nhưng tôi phải nhập http://my-host/my-application để có được đến trang web.

Sau khi liên hệ với quản trị họ nói với tôi rằng họ đã đặt một elemnt bối cảnh trong máy chủ của tôi trong tập tin cấu hình Tomcat như:

<Context path="" docBase="path of my-application deployed folder"/> 

được cho là để thiết lập my-ứng dụng như ứng dụng mặc định cho tất cả các yêu cầu đến my-host. Nhưng nó đã không và bất cứ khi nào tôi nhập http://my-host tôi nhận được:

HTTP Status 404 -/The requested resource (/) is not available 

Nhưng một lần nữa khi tôi nhập http://my-host/my-application nó tất cả hoạt động tốt. Bất kỳ đề xuất về những gì có thể sai là chắc chắn đánh giá cao.

Cập nhật:
Tôi cố gắng để làm theo các bước được mô tả trong tài liệu hướng dẫn tomcat trên how to make the application default. 3 cách được mô tả và tôi đã thử cả ba cách và có thể triển khai thành công ứng dụng của tôi như ROOT trên localhost.

Tôi cũng đã cố gắng tạo lại sự cố mà tôi đang gặp phải trên máy chủ từ xa để tôi có thể tìm lý do và báo cáo vấn đề đó cho quản trị viên. Tôi thấy vài vấn đề.

  1. Trong server.xml đoạn mà quản trị viên đã gửi cho tôi autoDeploydeployOnStartUp được thiết lập là true, trong khi họ phải là sai lầm nếu xác định một cách rõ ràng yếu tố bối cảnh trong server.xml. Điều này sẽ gây ra việc triển khai kép tạo thư mục ROOT và một thư mục có tên tệp .war. Xóa .war sẽ xóa thư mục tương ứng của nó và hủy hợp lệ ứng dụng nhưng ROOT vẫn còn và phải được xóa thủ công và yêu cầu khởi động lại Tomcat. Cho đến khi khởi động lại, mọi triển khai ROOT.war sẽ thất bại.
  2. Tôi đã tìm ra một số lý do ngăn ROOT.war triển khai. Có thể là ROOT.xml tồn tại trong conf/{cơ-name}/{host-name} hoặc một thư mục ROOT tồn tại trong appBase của chủ nhà hoặc như tôi mô tả ở trên một ứng dụng ROOT từ việc triển khai trước đó là không undeployed và đòi hỏi Tomcat khởi động lại .

Dù bằng cách nào tôi không thể xác định chính xác những gì chính xác ngăn ROOT.war triển khai vì yêu cầu quyền truy cập vào tệp nhật ký Tomcat và tệp conf để kiểm tra các trường hợp tôi đã mô tả ở trên.

Ngoài ra, tôi thấy quản trị viên của tôi dường như không có khả năng duy trì máy chủ Tomcat và tìm sự cố. Vì vậy, tôi quyết định đi với một máy chủ Tomcat chuyên dụng sau khi đấu tranh với một chia sẻ.

+0

Tomcat có được sử dụng độc lập và phân phối HTTP hoặc có máy chủ khác xử lý và giao tiếp với Tomcat qua AJP không? Có vẻ như có một số máy chủ ảo đang diễn ra. Điều đó có được định nghĩa trong 'server.xml' chính của Tomcat hay được thực hiện dưới dạng tệp cấu hình cụ thể của máy chủ lưu trữ riêng biệt trong' conf/Catalina' không? – laz

+0

Tôi vừa thử thêm đường dẫn ngữ cảnh vào tệp server.xml của tomcat và nó đã chuyển hướng giống như một nhà vô địch. Tất cả những gì tôi đã làm là đặt docBase = "my-application" chứ không phải là đường dẫn tuyệt đối hay bất cứ thứ gì như thế. Trong mã mẫu của bạn ở trên, đó là "đường dẫn của thư mục triển khai ứng dụng của tôi" có nghĩa là gì? –

+0

Ngoài ra, bạn có quyền truy cập vào toàn bộ phần tử có chứa phần tử không? Tùy thuộc vào cài đặt của nó, nó có thể ngăn không cho cài đặt ngữ cảnh hoạt động như bạn mong đợi. –

Trả lời

4

thường, điều này có thể được thực hiện bằng các bước sau:

  • Xác định một tập tin bối cảnh ROOT.xml trong conf/Catalina/localhost
  • Tên webapp WAR của bạn “ROOT.war” hoặc có chứa thư mục “ROOT ”

Tuy nhiên, tôi nghi ngờ bạn sẽ có thể thực hiện điều đó trên một phiên bản Tomcat được chia sẻ. Chỉ một ứng dụng có thể chạy dưới dạng ứng dụng mặc định. Công ty lưu trữ có thể sẽ không cho phép nó như là nếu không ứng dụng nào họ sẽ cho phép là mặc định trong số nhiều người chia sẻ cùng một cá thể Tomcat?

Xem liên kết này: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

+0

Cảm ơn bạn đã tham khảo. Nhưng tôi không có quyền kiểm soát đối với hầu hết các phần mà bài báo đề xuất. Và tôi nghĩ rằng quản trị viên đã thiết lập bối cảnh một phần như tôi đã đề cập. – doctrey

+0

Nếu quản trị viên đã đặt đường dẫn ngữ cảnh của bạn ... có câu trả lời của bạn, bạn không thể thực hiện việc này mà không yêu cầu người dùng truy cập vào một số "thư mục" như http // myapp.com/myapp. Cách duy nhất bạn có thể vượt qua điều này là yêu cầu quản trị viên triển khai bạn như ROOT.war hoặc chiến tranh của bạn được chỉ ra từ ROOT.xml. –

+0

@Bob Theo [ở đây] (http://wiki.apache.org/tomcat/HowTo#How_do_I_make_my_web_application_be_the_Tomcat_default_application.3F) phương pháp tôi mô tả ở trên được cho là đặt ứng dụng làm mặc định. Mặc dù tôi không rõ ràng về việc nó sẽ ghi đè lên ứng dụng ROOT và trở thành ROOT mới hay nó chỉ hoạt động như mặc định cho các ứng dụng không được gán cho ROOT và bất kỳ bối cảnh nào khác đã được xác định. . – doctrey

3

Các Tomcat Wiki có section trên đặt các ứng dụng vào bối cảnh mặc định. Tuy nhiên, để thực hiện điều này, nó ngụ ý một số điều khiển đối với máy chủ Tomcat có thể không thực hiện được trong ngữ cảnh dùng chung mà bạn mô tả.

Nếu bạn có khả năng cài đặt các hệ thống khác trên máy chủ, một giải pháp thay thế sẽ là sử dụng máy chủ proxy như NGINX. Đây là cách phức tạp hơn chỉ đơn giản là đặt tên tập tin chiến tranh của bạn ROOT.war, nhưng đôi khi nó là lựa chọn duy nhất.

Nếu bạn có nginx nghe trên máy chủ và bạn có url của riêng bạn, bạn sử dụng HttpProxyModule với thiết như:

server { 
     listen   80; 
     server_name  my.domain.com; 
     location/{ 
      proxy_pass    http://my-host/my-application; 
      proxy_set_header  X-Real-IP $remote_addr; 
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header  Host $http_host; 
     } 
    } 

Ngoài ra để làm công việc này, bạn phải sở hữu "my.domain.com" url nó sẽ cần phải tách biệt với tất cả mọi người đang sử dụng cho máy chủ Tomcat được chia sẻ.

Phần nginx của giải pháp là miễn phí, nhưng nếu bạn cần đăng ký url mới và sau đó sử dụng một cái gì đó như no-ip.com để chuyển hướng nó đến máy chủ tomcat, nó sẽ tốn tiền.

+0

Tôi nghĩ rằng tôi thích gắn bó với cấu hình Tomcat để có được kết quả. Dù sao cũng cảm ơn bạn. – doctrey

+0

Vâng, tôi đã đoán. Giải pháp này thực sự là nhiều hơn cho một kịch bản mà bạn có rất nhiều trang web và rất nhiều URL để chuyển hướng. Nhưng tôi nghĩ nó có thể hữu ích cho ai đó. –

+0

Nó làm việc cho tôi. Cảm ơn vì tiền hỗ trợ. Tôi đã thực sự khó chịu bởi "ngữ cảnh" của mọi ứng dụng ở cuối URL. – alfredocambera

5

Trong câu hỏi của bạn, bạn nói rằng các quản trị viên thiết lập các bối cảnh như:

<Context path="" docBase="path of my-application deployed folder"/> 

Căn cứ ý kiến ​​trên, tôi sẽ đề nghị cố gắng sử dụng tương con đường của ứng dụng của bạn chứ không phải là tuyệt đối đường dẫn.

Tôi cố gắng này trên máy chủ tomcat của tôi với:

<Context path="/" docBase="my-application/" /> 

và đó đã làm các trick.

Phần tử Máy chủ chứa phần tử Ngữ cảnh thực sự thiết lập một số tham số cũng có thể ảnh hưởng đến ngữ cảnh. Nếu đó là cài đặt mặc định thì ngữ cảnh tương đối chỉ cần trỏ đến thư mục webapps. Nếu nó đã được thay đổi, kết quả có thể khác nhau.

+0

Tôi đã thử với đường dẫn tương đối chỉ trong trường hợp đường dẫn tuyệt đối của _appBase_ và _docBase_ có một số xung đột nhưng đó không phải là vấn đề mà nó có vẻ. – doctrey

+0

Bạn đã tiết kiệm rất nhiều thời gian cho tôi. Cảm ơn bạn rất nhiều. – dementiev

+0

Tôi đã cố gắng cung cấp đường dẫn tương đối thay vì cho đường dẫn tuyệt đối, nhưng máy chủ tomcat không chạy .. –

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