I'm a long-time user of Trac. It's a Python based client-server application, which means you run it on the server, and the "clients" need nothing but a web browser to access it:
Example screenshot from one of my projects / Android clients (click images for larger variants)
It certainly matches your requirements:
- Creation of tickets: Sure. That's its main purpose.
- Ticket categorization: As the screenshot shows, in multiple ways: by component, ticket type, and more
- Ticket prioritization: Yepp (the screenshot indicates this by background colors: the cyan ones are low prio)
- Comments on tickets: Definitly. Even attachments are possible.
- Ticket tracking: Sure. Everybody involved can even get a mail sent when anything happens (new comment, ticket state changes, etc.)
- Gratis: Not only that, even open-source.
- User > 50: Let me count... My installation currently counts 203, so: check :)
- Server should run on Linux: That it does here (currently on Debian)
- Client should be a web-app: Yes. Just the browser is enough, so not even an additional installation required on the user's end. But if you insist, there are also alternative clients available – even for mobile devices, e.g. TracDroid or Trac Client on Android.
For a short intro, you might also wish to check the Trac article at Wikipedia.
While fully matching your requirements, Trac can do much more out-of-the-box: it contains a Wiki, and support for version control systems (source code). And you can cross-link between the components, to e.g. address a ticket in a SVN commit, or a revision in the ticket ("This is solved with revision:123"), or both from the Wiki, or... Well, you could also extend the functionality with one of the hundreds of addons available at Trac-Hacks.
Of course, the project site itself as well as Tac-Hacks are running Trac, so if you want to see a real live demo, just head there.