nginx 多条路径(太多)

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 是昵称。

问题是客户数量增长很快。那么,有没有办法让这个配置更有效率?有没有办法创建数组?

谢谢!

答案1

您可以使用这个location块:

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

这里我们使用正则表达式将客户编号捕获到$customerid变量中,然后在alias语句中使用该变量。

正则表达式是匹配不同类型文本字符串的一种非常强大的方法,因此您可以轻松地调整它以覆盖更长的数字等。

答案2

您的配置看起来……很奇怪。首先,nginx 中的别名与 apache 中的别名不同。 http://nginx.org/docs/http/ngx_http_core_module.html#alias 你应该使用 root 来代替,如果我理解得没错的话 http://nginx.org/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 等等。所以最好有这样的 URIhttp://example.com/users/random_customer_name 配置就是这么简单:

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

相关内容