Thứ ba, 08/09/2015 | 00:00 GMT+7

Cách tối ưu hóa cài đặt Tomcat của bạn trên Ubuntu 14.04

Tomcat là một triển khai phổ biến của công nghệ Java Servlet và JavaServer Pages. Nó được phát hành bởi Apache Software Foundation theo giấy phép nguồn mở Apache phổ biến. Các tính năng mạnh mẽ, giấy phép thuận lợi và cộng đồng tuyệt vời khiến nó trở thành một trong những dịch vụ Java tốt nhất và được ưa thích nhất.

Tomcat luôn yêu cầu tinh chỉnh bổ sung sau khi cài đặt. Đọc bài viết này để tìm hiểu cách tối ưu hóa cài đặt Tomcat của bạn để nó chạy an toàn và hiệu quả.

Bài viết này tiếp tục chủ đề chạy Tomcat trên Ubuntu 14.04, và giả sử rằng bạn đã đọc Cách cài đặt Apache Tomcat 7 trên Ubuntu 14.04 qua Apt-Get trước đó .

Yêu cầu

Hướng dẫn này đã được thử nghiệm trên Ubuntu 14.04. Cài đặt và cấu hình được mô tả sẽ tương tự trên các version HĐH hoặc HĐH khác, nhưng các lệnh và vị trí của file cấu hình có thể khác nhau.

Đối với hướng dẫn này, bạn cần :

Tất cả các lệnh trong hướng dẫn này phải được chạy với quyền user không phải root. Nếu cần có quyền truy cập root cho lệnh, nó sẽ được đặt trước sudo .

Cung cấp yêu cầu trên cổng HTTP tiêu chuẩn

Như bạn có thể đã nhận thấy, Tomcat lắng nghe trên cổng TCP 8080 theo mặc định. Cổng mặc định này xuất hiện chủ yếu vì thực tế là Tomcat chạy dưới tomcat7 user không có quyền . Trong Linux, chỉ những user có quyền như root được phép nghe trên các cổng dưới 1024 trừ khi được cấu hình khác. Vì vậy, bạn không thể chỉ cần thay đổi cổng lắng nghe của Tomcat thành 80 (HTTP).

Vì vậy, nhiệm vụ đầu tiên của việc tối ưu hóa cài đặt Tomcat của bạn là giải quyết vấn đề trên và đảm bảo các ứng dụng web Tomcat của bạn có trên cổng HTTP tiêu chuẩn.

Cách đơn giản nhất (nhưng không nhất thiết là cách tốt nhất) để giải quyết vấn đề này là tạo firewall (iptables) - chuyển tiếp từ cổng TCP 80 sang cổng TCP 8080. Điều này có thể được thực hiện bằng lệnh iptables :

  • sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

Để đặt luật iptables này vĩnh viễn, hãy kiểm tra bài viết Cách cài đặt firewall bằng IPTables trên Ubuntu 14.04 trong phần Lưu cấu hình Iptables của bạn .

Để loại bỏ luật iptables này, bạn chỉ cần thay thế cờ -A để thêm luật bằng cờ -D để xóa luật trong lệnh trên như sau:

  • sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

Việc chuyển tiếp lưu lượng đơn giản như vậy không phải là tối ưu từ quan điểm bảo mật hoặc hiệu suất. Thay vào đó, một phương pháp hay là thêm một web server , chẳng hạn như Nginx, trước Tomcat. Lý do cho điều này là Tomcat chỉ là một Java servlet với các chức năng cơ bản của một web server trong khi Nginx là một web server điển hình, mạnh mẽ, đầy đủ chức năng. Dưới đây là một số lợi ích quan trọng của việc sử dụng Nginx làm server giao diện user :

  • Nginx an toàn hơn Tomcat và có thể bảo vệ nó khỏi các cuộc tấn công khác nhau một cách hiệu quả. Trong trường hợp cập nhật bảo mật khẩn cấp, việc cập nhật web server Nginx frontend dễ dàng hơn, nhanh hơn và an toàn hơn nhiều so với việc phải lo lắng về thời gian chết và các vấn đề tương thích liên quan đến nâng cấp Tomcat.
  • Nginx phục vụ truy cập HTTP và HTTPS hiệu quả hơn với sự hỗ trợ tốt hơn cho nội dung tĩnh, bộ nhớ đệm và SSL.
  • Nginx được cấu hình dễ dàng để nghe trên bất kỳ cổng nào, bao gồm cả 80 và 443.

Nếu bạn bị thuyết phục về những lợi ích trên, trước tiên hãy đảm bảo bạn đã xóa luật iptables trước đó và sau đó cài đặt Nginx bằng lệnh:

  • sudo apt-get install nginx

Sau đó, chỉnh sửa cấu hình khối server mặc định của Nginx ( /etc/nginx/sites-enabled/default ) bằng editor yêu thích của bạn như sau:

  • sudo nano /etc/nginx/sites-enabled/default

Tìm kiếm location / phần chỉ định cách tất cả các yêu cầu sẽ được phân phát và đảm bảo nó trông giống như sau:

/ etc / nginx / sites-enable / default
location / {     proxy_pass http://127.0.0.1:8080/; } 

Chỉ thị proxy_pass ở trên nghĩa là tất cả yêu cầu phải được chuyển tiếp đến IP local 127.0.0.1 trên cổng TCP 8080 nơi Tomcat lắng nghe. Đóng file và khởi động lại Nginx bằng lệnh:

  • sudo service nginx restart

Sau đó, hãy thử truy cập Tomcat bằng cách kết nối với IP của Server tại cổng HTTP tiêu chuẩn trong trình duyệt của bạn. URL phải có dạng http:// your_server's_ip . Nếu mọi thứ hoạt động tốt, trang mặc định của Tomcat sẽ được mở. Nếu không, hãy đảm bảo bạn đã loại bỏ luật iptables và Tomcat đã được cài đặt đúng theo yêu cầu của bài viết này.

Bảo mật Tomcat

Bảo mật Tomcat có lẽ là nhiệm vụ quan trọng nhất thường bị bỏ qua. May mắn là chỉ trong một vài bước, bạn có thể có một cài đặt Tomcat khá an toàn. Để theo dõi phần này của bài viết, bạn nên cài đặt và cấu hình Nginx trước Tomcat như đã mô tả trước đó.

Xóa các ứng dụng web quản trị

Sự đánh đổi thông thường giữa chức năng và bảo mật cũng hợp lệ đối với Tomcat. Để tăng tính bảo mật, bạn có thể xóa các ứng dụng trình quản lý web và trình quản lý server lưu trữ mặc định. Điều này sẽ bất tiện vì bạn sẽ phải thực hiện tất cả các công việc quản trị, bao gồm cả triển khai ứng dụng web, từ dòng lệnh.

Loại bỏ các công cụ quản trị web của Tomcat rất tốt cho bảo mật vì bạn không phải lo lắng rằng ai đó có thể sử dụng sai chúng. Thực hành bảo mật tốt này thường được áp dụng cho các địa điểm production .

Các ứng dụng web quản trị được chứa trong gói tomcat7-admin của Ubuntu. Do đó, để loại bỏ chúng, hãy chạy lệnh:

  • sudo apt-get remove tomcat7-admin

Hạn chế quyền truy cập vào ứng dụng web quản trị

Nếu bạn chưa gỡ bỏ các ứng dụng web quản trị, như đã đề xuất ở phần trước, thì ít nhất ta có thể hạn chế quyền truy cập vào chúng. URL của chúng phải là http:// your_servlet_ip /manager/http:// your_servlet_ip /host-manager/ . Nếu bạn thấy lỗi 404 Not Found tại các URL này, điều đó nghĩa là chúng đã bị xóa và bạn không phải làm gì cả. Tuy nhiên, bạn có thể đọc hướng dẫn sau để tìm hiểu cách tiếp tục với các tài nguyên nhạy cảm khác mà bạn có thể cần bảo vệ.

Đến đây, Nginx đang chấp nhận các kết nối trên cổng 80 để bạn có thể truy cập tất cả các ứng dụng web tại http:// your_servlet_ip từ mọi nơi. Tương tự, Tomcat lắng nghe trên cổng 8080 trên phạm vi global , tức là http:// your_servlet_ip :8080 , nơi bạn có thể tìm thấy các ứng dụng tương tự. Để cải thiện bảo mật, ta sẽ hạn chế các tài nguyên có sẵn trên cổng 80 thông qua Nginx. Ta cũng sẽ làm cho Tomcat và cổng 8080 tiếp xúc của nó chỉ khả dụng local cho server và Nginx.

Mở file cấu hình khối server mặc định /etc/nginx/sites-enabled/default :

  • sudo nano /etc/nginx/sites-enabled/default

Sau chỉ thị server_name nhưng ở trên vị trí root mặc định ( location / ), hãy thêm phần sau và thay thế your_local_ip bằng địa chỉ IP máy tính local của bạn:

/ etc / nginx / sites-enable / default
... location /manager/ {     allow your_local_ip;     deny all;     proxy_pass http://127.0.0.1:8080/manager/; } ... 

Bạn nên áp dụng hạn chế tương tự cho ứng dụng host-manager bằng cách thêm một đoạn cấu hình khác trong đó trình manager được thay thế bằng host-manager như sau ( , thay your_local_ip bằng địa chỉ IP local của bạn):

/ etc / nginx / sites-enable / default
... location /host-manager/ {     allow your_local_ip;     deny all;     proxy_pass http://127.0.0.1:8080/host-manager/; } ... 

Sau khi bạn khởi động lại Nginx, quyền truy cập vào ngữ cảnh web của managermanager host-manager sẽ chỉ bị giới hạn ở địa chỉ IP local của bạn:

  • sudo service nginx restart

Bạn có thể kiểm tra nó bằng cách mở trong trình duyệt http:// your_servlet_ip /manager/http:// your_servlet_ip /host-manager/ . Các ứng dụng sẽ có sẵn, nhưng nếu bạn cố gắng truy cập vào các URL giống nhau bằng proxy công cộng hoặc một máy tính khác, thì bạn sẽ thấy lỗi 403 Forbidden.

Hơn nữa, như một biện pháp bổ sung, bạn cũng có thể xóa tài liệu và ví dụ của Tomcat bằng lệnh:

  • sudo apt-get remove tomcat7-docs tomcat7-examples

Xin lưu ý Tomcat vẫn lắng nghe các kết nối bên ngoài trên cổng TCP 8080. Do đó, Nginx và các biện pháp bảo mật của nó có thể dễ dàng bị bỏ qua. Để giải quyết sự cố này, hãy cấu hình Tomcat chỉ nghe trên giao diện local 127.0.0.1. Vì mục đích này, hãy mở file /etc/tomcat7/server.xml bằng editor yêu thích của bạn:

  • sudo nano /etc/tomcat7/server.xml

Thêm address="127.0.0.1" trong phần cấu hình Connector như sau:

/etc/tomcat7/server.xml
... <Connector address="127.0.0.1" port="8080" protocol="HTTP/1.1"     connectionTimeout="20000"     URIEncoding="UTF-8"     redirectPort="8443" /> ... 

Sau đó khởi động lại Tomcat để cài đặt mới có hiệu lực:

  • sudo service tomcat7 restart

Làm theo các bước trên sẽ đảm bảo bạn có mức bảo mật tốt, cơ bản cho Tomcat.

Tinh chỉnh cài đặt JVM

Đương nhiên, các nguyên tắc tinh chỉnh của Máy ảo Java (JVM) phổ biến cũng có thể áp dụng cho Tomcat. Mặc dù điều chỉnh JVM tự nó là một khoa học, nhưng có một số thực hành tốt, cơ bản mà ai cũng có thể dễ dàng áp dụng:

  • Kích thước heap tối đa, Xmx , là bộ nhớ tối đa mà Tomcat có thể sử dụng. Nó phải được đặt thành một giá trị để lại đủ bộ nhớ trống cho chính Server chạy và bất kỳ dịch vụ nào khác mà bạn có thể có trên Server. Ví dụ: nếu Server có 2 GB RAM, thì có thể an toàn để phân bổ 1 GB RAM cho xmx. Tuy nhiên, xin lưu ý bộ nhớ thực tế mà Tomcat sử dụng sẽ cao hơn một chút so với kích thước của Xmx .
  • Kích thước heap tối thiểu, Xms , là dung lượng bộ nhớ được cấp phát khi khởi động. Nó phải bằng giá trị xmx trong hầu hết các trường hợp. Do đó, bạn sẽ tránh phải chạy quá trình cấp phát bộ nhớ tốn kém vì kích thước của bộ nhớ được cấp phát sẽ không đổi mọi lúc.
  • Bộ nhớ nơi các lớp được lưu trữ vĩnh viễn, MaxPermSize , sẽ cho phép Tomcat tải các lớp ứng dụng của bạn và để lại bộ nhớ dự phòng từ giá trị Xmx cho việc khởi tạo các lớp này. Nếu bạn không chắc các lớp ứng dụng của bạn yêu cầu bao nhiêu bộ nhớ, thì bạn có thể đặt MaxPermSize thành một nửa kích thước của Xmx như ban đầu - 512 MB trong ví dụ của ta .

Trên Ubuntu 14.04, bạn có thể tùy chỉnh các tùy chọn JVM của Tomcat bằng cách chỉnh sửa file /etc/default/tomcat7 . Vì vậy, để áp dụng các thủ thuật trên, vui lòng mở file này bằng editor yêu thích của bạn:

  • sudo nano /etc/default/tomcat7

Nếu bạn đã làm theo hướng dẫn cài đặt của Tomcat từ các yêu cầu , bạn sẽ thấy dòng sau:

/ etc / default / tomcat7
... JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC" ... 

Với điều kiện Server có 2 GB RAM và bạn muốn phân bổ khoảng 1 GB cho Tomcat, dòng này phải được thay đổi thành:

/ etc / default / tomcat7
... JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xms1024m -Xmx1024m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC" ... 

Để cài đặt này có hiệu lực, bạn phải khởi động lại Tomcat:

  • sudo service tomcat7 restart

Cấu hình JVM ở trên là một khởi đầu tốt, nhưng bạn nên theo dõi log của Tomcat ( /var/log/tomcat7/catalina.out ) để biết các sự cố, đặc biệt là sau khi khởi động lại Tomcat hoặc triển khai. Để theo dõi log , hãy sử dụng lệnh tail như sau:

  • sudo tail -f /var/log/tomcat7/catalina.out

Nếu bạn chưa quen với tail , bạn phải nhấn tổ hợp Ctrl-C trên bàn phím để dừng gắn đuôi log .

Tìm kiếm các lỗi như OutOfMemoryError . Một lỗi như vậy sẽ cho biết bạn phải điều chỉnh cài đặt JVM và cụ thể hơn là tăng kích thước Xmx .

Kết luận

Đó là nó! Đến đây bạn đã bảo mật và tối ưu hóa Tomcat chỉ trong một vài bước đơn giản làm theo. Những tối ưu hóa cơ bản này được khuyến khích , không chỉ cho production , mà ngay cả cho các môi trường thử nghiệm và phát triển tiếp xúc với Internet.


Tags:

Các tin liên quan

Cách cài đặt Mailpile trên Ubuntu 14.04
2015-08-21
Cách cài đặt CouchDB và Futon trên Ubuntu 14.04
2015-08-10
Cách thiết lập firewall với UFW trên Ubuntu 14.04
2015-08-05
Cách đánh giá độ trễ HTTP theo chuẩn với wrk trên Ubuntu 14.04
2015-07-21
Cách cài đặt và sử dụng Command Line Cheat Sheets trên Ubuntu 14.04
2015-07-21
Cách cài đặt và sử dụng CFEngine Community Edition trên Ubuntu 14.04
2015-07-17
Cách cài đặt và cấu hình Riak2 với Python3 trên Ubuntu 14.04
2015-07-14
Cách cài đặt Solr 5.2.1 trên Ubuntu 14.04
2015-07-14
Cách thiết lập R trên Ubuntu 14.04
2015-07-13
Cách triển khai ứng dụng Rails với Git Hooks trên Ubuntu 14.04
2015-07-09