Comment prévenir le conflit d'étranglement nginx Avec mode de service?

Nous utilisons
http://wiki.nginx.org/HttpLimitReqModule
nginx Réguler la vitesse et constaté qu'il est conflit avec notre "

Mode de Maintenance

"Parce que les deux composants utilisent
http://www.w3.org/Protocols/rf ... .html
.

Quand l'étranglement est activé (de l'autre côté
http://wiki.nginx.org/HttpLimitReqModule
Directif), nginx Sert habituellement 503, Mais malheureusement, notre emplacement de mode de maintenance est utilisé, ce qui conduit à 302 Sur notre page de service posté sur Amazon S3.

302 Pour demande réglable - Pas le meilleur résultat

.

Je me demandais comment d'autres personnes résolvent ce problème? Devrais-je, par exemple, utiliser un autre code d'état pour notre page de service, mais si oui, quoi?

Idéalement, pour les demandes réglementées, je ne veux pas servir une page, seul un en-tête de réponse 503 - Il doit être plus facile que possible, car tout le point est d'empêcher la surcharge du serveur.

Pour référence, il s'agit d'une configuration. nginx, Que nous utilisons pour le "mode de service":

server {
...

# Redirect processing of 503 error pages into a named location:
error_page 503 @maintenance;

# "Maintenance Mode" is off by default - Use a nginx variable to track state.
set $maintenance off;

# Switch on "Maintenance Mode" if a certain file exists.
if (-f /var/www/mysite/shared/maintenanceON) {
set $maintenance on;
}

if ($maintenance = on) {
return 503; # 503 - Service unavailable
}

location @maintenance {
# Redirect the request to our maintenance page in Amazon S3.
rewrite ^(.*)$ [url=http://mysite.s3-website-us-east-1.amazonaws.com/]http://mysite.s3-website-us-east-1.amazonaws.com/[/url] break;
}
...
# Process the php files - pass to php-fpm.
location ~ \.php {
# Limit aggressive bots and crawlers to 30 requests per minute.
limit_req zone=bots;

fastcgi_pass 127.0.0.1:$fastcgi_port;
}
...
Invité:

Dominique

Confirmation de:

Pour «Maintenance Mode», utilisez un code d'état autre que 503.

Comment pouvons-nous voir clairement, les utilisateurs ne reçoivent pas vraiment 503, Lorsque vous utilisez toujours le "mode de maintenance", il n'y a donc aucune utilisation à partir de ce code d'état dans votre configuration. Venir avec un autre code (593?) Et utilisez-le.

Ou même mieux Miss Extra

location

Et juste envoyer

rewrite

Directement s'il y a un fichier de service.

    if (-f /var/www/mysite/shared/maintenanceON) {
rewrite ^(.*)$ [url=http://mysite.s3-website-us-east-1.amazonaws.com/]http://mysite.s3-website-us-east-1.amazonaws.com/[/url] redirect;
}

Alice

Confirmation de:

Commençant par nginx 1.3.15 Il y a une icône "
http://nginx.org/en/docs/http/ ... tatus
"Directive qui vous permet de spécifier le code de réponse HTTP, qui retournera le régulateur.

# Define a limit request zone called "bots" that will track requests by IP.
limit_req_zone $binary_remote_addr zone=bots:20m rate=15r/s;

# 429 = Too Many Requests
limit_req_status 429;

http statut 429 moyens "

Too Many Requests

"- Ce code a été adopté dans
http://tools.ietf.org/html/rfc6585#page-3
Codes d'état supplémentaires HTTP

. Utilisé, par exemple, sur
https://dev.twitter.com/docs/rate-limiting/1.1
.

(
https://serverfault.com/a/554748/21415
fonctionne aussi parce que dans ma configuration 503 Utilisé uniquement à l'intérieur nginx).

Pour répondre aux questions, connectez-vous ou registre