Tor supports multiple hidden services by defining multiple HiddenServiceDir blocks in your torrc file. Each block creates a separate .onion address with its own cryptographic identity:
# /etc/tor/torrc - Multiple hidden services
# Service 1 - Main website
HiddenServiceDir /var/lib/tor/service_website/
HiddenServicePort 80 127.0.0.1:8080
HiddenServiceVersion 3
# Service 2 - API backend
HiddenServiceDir /var/lib/tor/service_api/
HiddenServicePort 80 127.0.0.1:8081
HiddenServiceVersion 3
# Service 3 - Admin panel
HiddenServiceDir /var/lib/tor/service_admin/
HiddenServicePort 80 127.0.0.1:8082
HiddenServiceVersion 3
HiddenServiceAuthorizeClient stealth admin1Each service gets its own directory with its own key pair and .onion address. After restarting Tor, check each directory's hostname file for the generated addresses. The admin panel example includes client authorization, making it invisible to anyone without the auth key.
You can define as many hidden services as your server resources allow, though each additional service consumes more memory and CPU for maintaining circuits and publishing descriptors.