Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Is there a way in apache to limit the amount of users that can view a site in a certain month? I'd need to do this for individual vhosts.

Something along the lines of:

<VirtualHost *:80>
    ServerName website.com
    DocumentRoot "/var/www/website.com/public"
    **MONTHLY_USER_LIMIT** = 5000
</VirtualHost>

Is there anything in Apache that does this (or nginx) ?

Thanks!

share|improve this question
    
Interesting, but I don't see the point. Are you worried about server strain? You could change the max concurrent tcp connections: /proc/sys/net/core/somaxconn/ for concurrent connections and proc/sys/net/core/netdev_max_backlog for packet queue. –  tjameson Apr 4 '11 at 17:13
    
This depends heavily on how you define a "user". One connection? One Keep-Alive connection? One "page view"? –  nickgrim Apr 4 '11 at 19:13
    
It would be one unique IP (I understand that this could be several users within an organization) - would this have to be done in code? Or is there any way of doing it with a webserver? –  kron Apr 5 '11 at 10:38
    
@tjameson - it's not a concern of server strain. It is to do with billing on a user/month basis. –  kron Apr 5 '11 at 10:38
add comment

2 Answers

No, but you could configure the access log to go to a program that does the counting and then turns off a site. You'd have to make it resilient to apache restarts.

share|improve this answer
add comment

This is quite trivial if you're using something like PHP with Apache. You could implement the count manually on a per user basis using cookies (optimally), or if they have cookies disabled use something clever. This type of stuff belongs in a PHP script.

It seems that with a setup like yours, you probably have a user/password hash for authentication, so when they log in, log it. Every time they start a new session, log it. If they reach 5000 sessions, return a 401 error or something explaining that they have exceeded their per-month allotment of views.

If this truly is on a per-user basis, a server-side script would make the most sense. You don't even need to have a database, a simple text file will do the trick.

I'm pretty sure that a PHP script can access what host it is being accessed on (just look at the URL).

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.