Назад | Перейти на главную страницу

nginx несколько путей (слишком много)

Я получил эту рабочую конфигурацию nginx:

server {
  listen 80;

  server_name mydomain.com;
  root /var/www/mydomain/wordpress;

  index index.html index.php;

  location /customer1 {
    alias /var/www/mydomain/customers/custumer1;
  }

  location /customer2 {
    alias /var/www/mydomain/customers/custumer2;
  }
...
  location /customerN {
    alias /var/www/mydomain/customers/custumerN;
  }

где customer1 ... customerN - псевдонимы.

проблема в том, что клиенты быстро растут. Итак, есть ли способ сделать эту конфигурацию более эффективной? есть ли способ создавать массивы?

Спасибо!

Ваша конфигурация выглядит ... странно. Прежде всего, псевдоним в nginx отличается от псевдонима в apache. http://nginx.org/ru/docs/http/ngx_http_core_module.html#alias Вы должны использовать вместо этого root, если я вас правильно понял http://nginx.org/ru/docs/http/ngx_http_core_module.html#root

Если URI клиента похожи на http://example.com/random_customer_name

Тогда у вас должно получиться что-то вроде этого:

location / {
    root /var/www/mydomain/customers;
    try_files $uri $uri/ @php;
}

location @php {
    root /var/www/mydomain/wordpress;
    # I think you need some proxying to apache or php-pfm here
}

Но у него есть некоторые очевидные проблемы, такие как пользователь с именами wp-login, wp-admin и так далее. Так что лучше иметь URI вроде http://example.com/users/random_customer_name И конфиг будет таким простым:

location /users {
    root /var/www/mydomain/customers;
}

Вы можете использовать это location блок:

location ~ ^/customer(?<customerid>[0-9])$ {
    alias /var/www/mydomain/customers/customer$customerid;
}

Здесь мы используем регулярное выражение для ввода номера клиента в $customerid переменной, а затем используйте переменную в alias заявление.

Регулярные выражения - очень мощный метод сопоставления текстовых строк различного типа, поэтому вы можете легко адаптировать его для покрытия более длинных чисел и т. Д.