2013-03-05 48 views
39

Tôi muốn triển khai máy chủ tomcat sao cho nó nghe trên hai cổng cùng một lúc (cả đối với giao thức http).Chạy máy chủ Tomcat trên hai cổng khác nhau

Chỉ cần đảm bảo rằng bạn hiểu yêu cầu sửa lỗi này, Chúng tôi chỉ có một cá thể máy chủ nhưng muốn nghe trên hai cổng cho giao thức HTTP. Ví dụ: ai cũng có thể truy cập vào các ứng dụng được triển khai trong máy chủ của tôi bằng số cổng 7080 và 8080

Có thể thực hiện điều đó không? Nếu có thể, chúng ta có thể đạt được điều này như thế nào?

+0

Stranegly Nếu Tôi thử nghiệm với cổng 8080,7080 nó đang hoạt động. Nếu tôi kiểm tra nó với 80 và 8080 nó không thành công. Tự hỏi tại sao? – Narendra

+0

Cổng 80 đã được sử dụng bởi một thứ khác, có thể là một Apache Web Servier chẳng hạn. – Magnilex

+1

Có bạn đúng. Đối với một số lý do lạ Skype của tôi bằng cách sử dụng cổng này 80. Một khi tôi đã giết quá trình Skype của tôi máy chủ đang chạy tốt. Cảm ơn câu trả lời của bạn. – Narendra

Trả lời

39

rất đơn giản, bạn chỉ cần xem qua tệp cấu hình conf/server.xml và thêm trình kết nối mới cho cổng bạn muốn. Ví dụ: nếu bạn có trình kết nối như vậy:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" 
      URIEncoding="UTF-8" /> 

Chỉ cần thêm trình kết nối mới như vậy, nhưng thay đổi thông số cổng. Đó là tất cả, khởi động lại và bạn đã hoàn tất.

+1

java.lang.Exception: Liên kết ổ cắm không thành công: [730048] Thường chỉ sử dụng một địa chỉ của từng địa chỉ cổng (giao thức/địa chỉ/cổng mạng). – Narendra

+2

@Narendra: Bạn có thay đổi cả tham số "cổng" và "redirectPort" không? Bạn đang sử dụng phiên bản tomcat nào? – Magnilex

+0

Tôi thấy rằng tôi không phải thay đổi tham số 'redirectPort', miễn là tôi đã sử dụng các giá trị' cổng' khác nhau. –

19

Có, có thể, tôi đã tự mình thử nghiệm nó. Chỉ cần chỉnh sửa server.xml (nằm trong thư mục có tên conf) như thế này:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" /> 
<Connector port="8081" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8444" /> 

chí thiết lập này Tomcat để nghe cả hai cổng và .

2

bạn có thể chỉ định các đoạn mã sau vào server.xml của bạn

<Service name="sample"> 

    <Connector port="81" protocol="HTTP/1.1" maxThreads="100" connectionTimeout="2000"/> 

    <Engine name="sample" defaultHost="sample"> 
     <Host name="myhostname" appBase="webapp2"> 
      <Context docBase="C:\websites\sample\" /> 
     </Host> 
    </Engine> 

</Service> 
+0

Tôi nhận được lỗi sau: java.lang.Exception: Liên kết ổ cắm không thành công: [730048] Chỉ cho phép sử dụng một địa chỉ của từng cổng (giao thức/địa chỉ/cổng mạng). – Narendra

+0

bạn đã thay đổi cổng từ 81 theo yêu cầu của bạn chưa. –

+0

Điều này không hoạt động Tôi nhận được nhiều ngoại lệ trong giao diện điều khiển của tôi nói rằng java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Không thể khởi tạo thành phần [StandardEngine [sample] .StandardHost [m yhostname] .StandardContext [null ]] ................. Gây ra bởi: org.apache.catalina.LifecycleException: Vùng chứa con không thành công khi bắt đầu – Narendra

1

Xin vui lòng, hãy chắc chắn trên đó người dùng mà bạn đang chạy Tomcat, vì nếu bạn muốn sử dụng nó trên bất kỳ cổng đặc quyền, bạn phải sử dụng nó dưới người dùng root.

Một điều bạn có thể làm là chuyển hướng cổng 80 đến 8080 bằng iptables. Something như thế này:

iptables -t nat -A PREROUTING -d 192.168.10.16 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 

Hy vọng nó giúp

+1

Tôi không nghĩ rằng câu trả lời này là câu hỏi ... –

+1

Tôi không hiểu tại sao không. Có lẽ anh ta cần sử dụng một cổng khác dưới 1024 và chỉ đưa ra cổng 7080 làm ví dụ. Câu trả lời khác cũng hợp lệ, và đây là một cách tiếp cận khác. – Cyberzoo

+1

Tôi thích câu trả lời này vì nó cũng đề cập đến các giải pháp tiềm năng mà iptables là phương pháp hợp lệ và chỉnh sửa máy chủ được định cấu hình trước chứ không phải (tôi có ứng dụng Dockerized không đúng cách có vấn đề này giải quyết ngắn gọn) – tjborromeo

11

Bạn có thể xác định 2 dịch vụ khác nhau trong /conf/server.xml.

Các ví dụ là như dưới đây,

<Service name="Catalina_2"> 
    <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" /> 
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" /> 
    <Engine name="Catalina_2" defaultHost="localhost"> 
     <Realm className="org.apache.catalina.realm.LockOutRealm"> 
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
     </Realm> 
     <Host name="localhost" appBase="webapps_2" unpackWARs="true" autoDeploy="true"> 
     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
       prefix="localhost_access_log." suffix=".txt" 
       pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
     </Host> 
    </Engine> 
    </Service> 


    <Service name="Catalina"> 
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
    <Engine name="Catalina" defaultHost="localhost"> 
     <Realm className="org.apache.catalina.realm.LockOutRealm"> 
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
     </Realm> 
     <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
       prefix="localhost_access_log." suffix=".txt" 
       pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
     </Host> 
    </Engine> 
    </Service> 

Note: Bạn có thể cần thiết để tăng kích thước tomcat heap.

1

chạy tomcat ở cổng khác. Chúng ta phải thay đổi bốn điều bên trong thẻ dịch vụ của file server.xml

  1. chúng ta phải thay đổi cổng không.như 8080-80
  2. chúng ta phải thay đổi redirectPort không như 8443-8444
  3. chúng ta phải thay đổi tên cơ như Catalina để Catalina_2
  4. chúng ta phải thay đổi tên appBase như webapps để webapps_1
Các vấn đề liên quan