nginx - regex получает для нескольких местоположений

Создание regex получает для нескольких местоположений.

Древовидная структура:

/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

Эта конфигурация nginx работает:

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:/;
    }

попытка присоединиться к тем местоположениям в один PCRE regex

    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

Я читал о пользовательском dir, местоположении, сообщении SF и все еще не могу выяснить, как сделать это.

Что я должен добавить или изменить, где я должен посмотреть? (Я почти вне идей),

0
задан 13 April 2015 в 03:02
1 ответ

Сопоставление выполняется с нормализованным URI, а не с корневым путем.

Итак, это

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

Должно быть

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

и теперь он работает.

2
ответ дан 4 December 2019 в 13:50

Теги

Похожие вопросы