nginx – 正则expression式捕获多个位置

创build多个位置的正则expression式捕获。

树结构:

/home/user/webapps/ ├── index.html <= content: root. ├── osqa │ ├── index.html <= content: osqa test A. │ ├── osqa <= django project │ │ ├── index.html <= content: osqa test B. │ │ └── osqa │ │ ├── settings.py │ │ └── wsgi.py │ ├── run │ └── static └── forum ├── index.html <= content: forum test A. ├── forum <= django project │ ├── index.html <= content: forum test B. │ └── forum │ ├── settings.py │ └── wsgi.py ├── run └── static 

这个nginxconfiguration工作正常:

 server { listen 8080; server_name localhost; root /home/user/webapps/; location /osqa/ { alias /home/user/webapps/osqa/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass h ttp://unix:/home/user/webapps/osqa/run/gunicorn.sock:/; } location /forum/ { alias /home/user/webapps/forum/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass h ttp://unix:/home/user/webapps/forum/run/gunicorn.sock:/; } 

试图将这些位置join到一个PCRE正则expression式中

  location ~ webapps\/(?P<app>[\w-_]+) { alias /home/user/webapps/$app/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass h ttp://unix:/home/user/webapps/$app/run/gunicorn.sock:/; } 

我得到:

 localhost:8080/osqa/osqa/ returns: osqa test B localhost:8080/osqa/ returns: 403 Forbidden localhost:8080 returns: osqa test A 

我期望的是:

 localhost:8080/osqa/osqa/ returns: osqa test B localhost:8080/osqa/ returns: django site localhost:8080 returns: root 

我读了关于用户目录 , 位置 , 顺丰岗位 ,仍然无法弄清楚如何做到这一点。

我应该添加或改变什么,我应该在哪里看? (我几乎没有想法)

匹配是针对规范化的URI而不是根path执行的。

所以这

 location ~ webapps\/(?P<app>[\w-_]+) { 

应该

 location ~ ^\/(?P<app>[\w-_]+) { 

现在正在工作。