nginx: несколько корней документа с fastcgi

Если Вы хотите чистое решение для Apache bw_mod для Apache 2.0 и mod_bandwidth для Apache 1.3. Они могут отрегулировать пропускную способность Вашего сервера для ограничения использования пропускной способности.

Существует также mod_limitipconn, который препятствует тому, чтобы один пользователь установил много связей с Вашим сервером. mod_cband является другой опцией, но я никогда не использовал его.

Если Вы не хотите смешивать со своей установкой Apache, можно поместить прокси сквида перед Apache. Это дает Вам больше контроля также регулировкой.

Однако в большинстве случаев проблемой являются несколько больших объектов, когда Вы хотите ограничить пропускную способность на IP, и Вы хотите дать нормальное сообщение об ошибке, когда пользователь вытягивает слишком много данных, и Вы блокируете его. В этом случае могло бы быть легче записать Сценарий PHP и хранить информацию доступа во временной таблице в базе данных.

3
задан 2 October 2011 в 13:22
2 ответа

Когда вы меняете корни, вам необходимо настроить второе местоположение для перехода на php:

server {
  root /home/tman/dev/project/trunk/data;
  index index.php;

  # Use location ^~ to prevent regex locations from stealing requests
  location ^~ /sqlbuddy {
    root /srv/http;

    # This location will handle requests containing .php within /sqlbuddy
    # and will use the root set just above
    location ~* \.php {
      include fastcgi.conf;
      fastcgi_pass 127.0.0.1:9000;
    }
  }

  location ~* \.php {
    include fastcgi.conf;
    fastcgi_pass 127.0.0.1:9000;
  }
}

Кроме того, если вы не используете URL-адреса в стиле информации о пути, такие как /index.php/foo / bar, вы, вероятно, захотите изменить .php на .php $, чтобы привязать совпадение к концу uri.

10
ответ дан 3 December 2019 в 04:47

Причина в том, что Nginx выберет «лучшее» местоположение блок:

Исправьте меня, если я ошибаюсь. В настоящее время Nginx не поддерживает глобальную настройку fastcgi. Таким образом, вы должны либо переопределить fastcgi_pass :

    location /sqlbuddy {
        root /srv/http;
        index index.php;
    }
    location /sqlbuddy/.+\.php$ {
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi.conf;
    }

, либо вы можете проверить $ request_uri с помощью директивы if во втором месте :

    location ~ \.php$ {
        if ($request_uri ~ /sqlbuddy/.*$) {
            root /srv/http;
        }
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi.conf;
    }
2
ответ дан 3 December 2019 в 04:47

Теги

Похожие вопросы