Konfigurasikan nginx untuk jboss / tomcat

26

Untuk meneruskan lalu lintas ke JBoss / TomCat pada port 80 menggunakan Apache kami biasa menginstal dan mengkonfigurasi mod_jk.

Apakah ada yang setara dengan nginx? Pada dasarnya ingin semua lalu lintas port 80 diteruskan ke JBoss.

Kev
sumber
Anda dapat memeriksa posting blog saya tentang konfigurasi Nginx sebagai proxy terbalik untuk Tomcat . Ini mungkin menarik bagi Anda, sebagai contoh menyertakan beberapa penyesuaian tambahan sebagai konten caching hanya untuk pengguna yang tidak masuk dan mengarahkan ulang untuk bahasa yang berbeda.
Vladimir Grichina

Jawaban:

17

Untuk nginx checkout dokumen mereka di sini . Dukungan proxy sudah ada di dalamnya.

Dalam contoh di bawah ini dari situs mereka, Anda akan melihat bahwa lalu lintas port 80 spesifik sedang dikirim ke wadah servlet tunggal yang berjalan di port 8080.

Perhatikan bahwa jika Anda ingin menjalankan beberapa kontainer servge backend (untuk penyeimbangan beban, penskalaan, dll ...) Anda harus melihat Modul Upstream Fair yang akan mengirimkan lalu lintas ke server backend yang paling tidak sibuk. Ini tidak dikirim oleh defaul dengan nginx.

server {
  listen          80;
  server_name     YOUR_DOMAIN;
  root            /PATH/TO/YOUR/WEB/APPLICATION;
  location / {
    index index.jsp;
  }
  location ~ \.do$ {
    proxy_pass              http://localhost:8080;
    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;
  }                                                                                                       
  location ~ \.jsp$ {
    proxy_pass              http://localhost:8080;
    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;
  }
  location ^~/servlets/* {
    proxy_pass              http://localhost:8080;
    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;
  }
}
Ryan Cox
sumber
3

Cara lain untuk melakukannya seperti dijelaskan di halaman wiki LikeApache .

server {
    listen myhost:80;
    server_name  myhost;
    location / {
        root /path/to/myapp/public;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_pass http://myapp:8080;
    }
}

Saya juga telah mengujinya juga dengan / myapp alih-alih root dan berfungsi juga, menempatkan lokasi / myapp dan proxypass http: // myapp: 8080 / myapp ;

Juga, konfigurasi ini memetakan semuanya ke aplikasi Java, yang berguna ketika Anda memiliki URL bagus yang dipetakan oleh kerangka kerja MVC seperti Struts.

Marc Climent
sumber
2

Anda tidak harus menggunakan mod_jk, Anda dapat menggunakan mod_proxy, yaitu melewati lalu lintas melalui HTTP, bukan AJP. Jika nginx memiliki kemampuan proksi, itu seharusnya bekerja dengan baik.

skaffman
sumber
7
Masalah dengan proxy adalah bahwa itu lebih lambat dari mod_jk / fastcgi / ajp
Adam Gent
2

Sekarang ada ajp_module yang cukup segar untuk nginx . Saya tidak punya pengalaman dengan itu, tapi saya pikir lengket sesi dan terutama koneksi backend yang persisten cukup membantu untuk Tomcat. Kedua metode (proksi http atau proksi ajp) sayangnya tidak fleksibel untuk permintaan yang berjalan lama (komet) atau transfer file besar (unggahan).

https://github.com/yaoweibin/nginx_ajp_module#readme

lighttpd BTW memiliki modul proxy umum yang dapat menangani pengkodean FCGI, HTTP, CGIS, dan AJP13. Ini terlihat seperti pendekatan yang lebih baik (tapi saya pikir dari membacanya memiliki keterbatasan yang sama sehubungan dengan pola permintaan / respons panjang / besar yang tidak khas).

http://redmine.lighttpd.net/wiki/1/Docs:ModProxyCore

eeckes
sumber