创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-_]+) {
现在正在工作。