Avatar billede mergelspir Seniormester
15. februar 2024 - 12:49 Der er 8 kommentarer

Best Practice: .htaccess vs Tomcat's rewrite.config ?

Hvad er "best practice" for placering af rewrite rules i et Tomcat miljø?
Hvad er fordele/ulemper ved de to muligheder (.htaccess vs Tomcat's rewrite.config)?

Indtil nu har jeg følgende betragtninger:
1) Så vidt jeg kan se, er der reglerne næsten men ikke 100% identiske.
2) Der er flere tutorials for .htaccess
3) Tomcat skal ikke restartes, når man ændrer i .htaccess

Så i øjeblikket hælder jeg mest til .htaccess.
På den anden side har man vel lavet rewrite.config i Tomcat af en god grund.

Hvilken løsning har I valgt, og hvorfor?
Alle kommentarer er velkomne.
Avatar billede arne_v Ekspert
15. februar 2024 - 15:21 #1
Dette her er langt udenfor mit ekspertise område og det er sikkert derfor at jeg ikke forstår spørgsmålet.

--(HTTP)--[port 80]httpd
--(HTTPS)--[port 443]httpd

bruger .htaccess (hvis enablet).

--(HTTP)--[port 8080]Tomcat
--(HTTPS)--[port 8443]Tomcat

bruger Tomcat rewrite (hvis enablet).

--(HTTP/HTTPS)--[port 80/443]httpd--(AJP)--[port 8009]Tomcat
--(HTTP/HTTPS)--[port 80/443]httpd--(HTTP/HTTPS)--[port 8080/8443]Tomcat

vil så vidt jeg ved bruge .htaccess for URL som ikke forwardes til Tomcat og Tomcat rewrite for URL som forwardes til Tomcat. Og at have samme directory served af både httpd og Tomcat er en uacceptabel sikkerhedsrisiko.

Det er almindeligt at lave noget URL rewrite for alt der forwardes til Tomcat, men det er en global rewrite ikke en directory .htaccess ting.

Så jeg mangler nogle brikker til puslespillet.
Avatar billede mergelspir Seniormester
15. februar 2024 - 21:18 #2
Ad #1)
Konteksten for mit spørgsmål er rewrite af URL'er

Ifølge supportafdelingen på mit webhotel gælder følgende regler for Tomcat:
"Proxy rules take precedence so in case root URL '/' is proxied there will be no attempt of reading .htaccess"
og videre:
"you may remove the proxy setting and play with htaccess."

Jeg forstår det således, at enten bruger man Tomcat rewrite eller også bruger man .htaccess.
Avatar billede arne_v Ekspert
15. februar 2024 - 21:56 #3
Hvis man forwarder alt til Tomcat så er der ingen brug af .htaccess. Det passer fint med min forståelse.

Og den løsning og Tomcat rewrite synes at være det sikre valg.

Jeg ved ikke hvilket scenarie de har i tankerne med snakken om  at ændre proxy reglen.

Det er åbenlyst at hvis man forwarder /javastuff/* til Tomcat så vil /staticstuff/* ikke blive forwardet og vil fint kunne bruge .htaccess.

Det er også åbenlyst at hvis man forwarder /*.jsp til Tomcat så vil /*.html ikke blive forwardet til Tomcat og vil fint kunne bruge .htaccess.

Men hvis Tomcat træ og det der serves af httpd ikke overlapper i directory struktiur, så er det jo ikke specielt interessant:
- Java stuff rewrites via Tomcat
- static stuff rewrites via .htaccess
men medmindre du har specielle behov (f.eks. meget store filer til download) så kan jeg ikke se nogen fordel ved den løsning fremfor at forwarde alt til Tomcat og bruge Tomcat rewrite.

Hvis Tomcat træ og det der serves af httpd overlapper i directory struktur, så er det muligt at man kan få .htaccess til at virke med Tomcat URL - jeg ved det ikke, men hvis /foobar har en .htaccess og /*.jsp forwardes til Tomcat, så er det muligt at Apache for /foobar/bla.jsp vil checke /foobar .htaccess inden der forwardes til Tomcat. Men det er efter min mening uinteressant - jeg vil kraftigt fraråde et sådant setup. Store potentielle sikkerhedsproblemer. Tomcat og httpd har forskellige konventioner og det kan gå galt hvis de server hinandens filer. Måske vil Tomcat sende indholdet af .htaccess filer til user. Måske vil httpd sende indholdet af /WEB-INF/* til user.

Jeg er ret sikker på det er det rigtige valg for dig at forwarde alt og så bruge Tomcat rewrite. Det er jo tilsyneladende også deres default.

Hvis du har meget store filer til download, så:
- Tomcat og de store filer  i separate directories
- forward /javastuff/* til Tomcat
- map /staticstuff/* til de store filers directory
- brug Tomcat rewrite for Tomcat
- brug .htaccess for de store filer
Avatar billede mergelspir Seniormester
16. februar 2024 - 11:56 #4
De statiske filer, jeg har, er i det væsentlige:
1) Billeder
2) CSS'er
3) JavaScript
De bliver alle cached af Cloudflare, så de bør ikke udgøre noget problem, selvom de ligger i Tomcats træ.
Avatar billede arne_v Ekspert
16. februar 2024 - 14:27 #5
Tomcat server static content fint.

Men Tomcat er ikke designet til at serve static content men til at serve dynamic content.

Så traditionelt anbefaler man Apache eller nginx til meget store filer.

Og med meget store filer tænker jeg >1 GB.

JPG/PNG, CSS og JS er helt uproblematisk.
Avatar billede mergelspir Seniormester
16. februar 2024 - 16:25 #6
Mine statiske filer er alle under 1MB.
Til gengæld er der ~25.000 af dem.
Avatar billede arne_v Ekspert
16. februar 2024 - 16:56 #7
Det er en del statisk indhold.

Men som man siger "Premature optimization is the root of all evil". Jeg ville starte med at lade Tomcat serve dem - og hvis det viser sig at være et performance problem, så prøve om det performer bedre hvis de serves direkte af Apache.
Avatar billede mergelspir Seniormester
16. februar 2024 - 17:31 #8
De er hostet af Tomcat og de er cached af Cloudflare. Det har de været i mange år, og det fungerer fint.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester