6.1.3 Cấu hình máy chủ nhúng (embedded server)
Bạn đã thấy cách thiết lập cổng cho servlet container bằng cách cấu hình server.port. Tuy nhiên, điều tôi chưa đề cập là điều gì sẽ xảy ra nếu bạn thiết lập server.port thành 0, như dưới đây:
server:
port: 0Mặc dù bạn đã thiết lập rõ ràng server.port là 0, nhưng máy chủ không khởi động trên cổng 0. Thay vào đó, nó sẽ khởi động trên một cổng bất kỳ được chọn ngẫu nhiên mà hiện đang khả dụng. Điều này rất hữu ích khi chạy các bài kiểm thử tích hợp tự động để đảm bảo rằng các bài kiểm thử chạy song song sẽ không xung đột do dùng chung một cổng cố định.
Tuy nhiên, có nhiều thứ cần cấu hình cho máy chủ nhúng ngoài chỉ mỗi cổng. Một trong những nhu cầu phổ biến nhất là cấu hình để máy chủ có thể xử lý các yêu cầu HTTPS. Để làm điều đó, việc đầu tiên bạn cần làm là tạo một keystore bằng cách sử dụng tiện ích dòng lệnh keytool đi kèm với JDK, như sau:
keytool -keystore mykeys.jks -genkey -alias tomcat -keyalg RSABạn sẽ được hỏi một số câu hỏi về tên và tổ chức của mình, phần lớn là không quan trọng. Nhưng khi được hỏi mật khẩu, hãy nhớ những gì bạn đã chọn. Trong ví dụ này, tôi chọn mật khẩu là letmein.
Tiếp theo, bạn cần thiết lập một vài thuộc tính để bật HTTPS trong máy chủ nhúng. Bạn có thể cấu hình tất cả chúng qua dòng lệnh, nhưng điều đó sẽ rất bất tiện. Thay vào đó, bạn nên cấu hình trong tệp application.properties hoặc application.yml. Trong application.yml, các thuộc tính có thể như sau:
server:
port: 8443
ssl:
key-store: file:///path/to/mykeys.jks
key-store-password: letmein
key-password: letmeinỞ đây, thuộc tính server.port được thiết lập là 8443, một lựa chọn phổ biến cho các máy chủ HTTPS trong quá trình phát triển. Thuộc tính server.ssl.key-store nên được thiết lập đến đường dẫn chứa file keystore đã tạo. Trong ví dụ này, nó được chỉ định bằng file: để tải từ hệ thống file, nhưng nếu bạn đóng gói nó bên trong file JAR của ứng dụng, bạn có thể dùng classpath: để tham chiếu đến nó. Cả hai thuộc tính server.ssl.key-store-password và server.ssl.key-password đều phải được thiết lập bằng mật khẩu bạn đã nhập khi tạo keystore.
Với các thuộc tính này, ứng dụng của bạn sẽ lắng nghe các yêu cầu HTTPS trên cổng 8443. Tùy theo trình duyệt bạn đang sử dụng, bạn có thể thấy cảnh báo rằng trình duyệt không thể xác minh danh tính máy chủ. Điều này không có gì đáng lo khi bạn chạy ứng dụng từ localhost trong môi trường phát triển.
