![nginx 多条路径(太多)](https://linux22.com/image/690933/nginx%20%E5%A4%9A%E6%9D%A1%E8%B7%AF%E5%BE%84%EF%BC%88%E5%A4%AA%E5%A4%9A%EF%BC%89.png)
我得到了这个有效的 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;
}