Регулярное выражение NGINX не работает согласно ожиданиям - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь создать дополнительный URL-адрес, который перенаправляет трафик на определенный порт.Например: если мой URL-адрес / a / status, он должен быть перенаправлен на 127.0.0.1:8800/status.

Я попытался настроить регулярное выражение URL, но, похоже, он не работает.Ниже приведены выводы:

location /
    {
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header Access-Control-Allow-Origin *;
        proxy_pass http://127.0.0.1:8800;
        include /etc/nginx/proxy_params;
    }

Для приведенного выше кода, URL / статус, перенаправляет трафик на порт 8800 правильно.Однако, с кодом ниже, есть проблемы.

location /a/
    {
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header Access-Control-Allow-Origin *;
        proxy_pass http://127.0.0.1:8800;
        include /etc/nginx/proxy_params;
    }

URL / a / status не перенаправляет на порт 8800. Я также попытался использовать регулярное выражение, как показано ниже, но не сработало:

location ~* ^/(.+)/$
    {
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header Access-Control-Allow-Origin *;
        proxy_pass http://127.0.0.1:8787;
        include /etc/nginx/proxy_params;
    }

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Попробуйте эту конфигурацию:

location ^~ /a/status {
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If- 
    Modified-Since,Cache-Control,Content-Type,Range';
    add_header Access-Control-Allow-Origin *;
    proxy_pass http://127.0.0.1:8800;
    include /etc/nginx/proxy_params;
}
0 голосов
/ 23 сентября 2019

Вы можете сделать это так:

server {
  listen 80;
  server_name test.com;

  # considering /a/status
  # if you want to for any prefix go with "location ~ \/(.+)\/status"
  location = /a/status {
    # there are ways to dynamically rewrite depending on prefix, comment if that part is needed as well
    rewrite ^ /status last;
  }

  location = /status {
    proxy_pass http://127.0.0.1:8800; 
  }
}

server {
  listen 8800;
  location / {
    return 201;
  }
}

когда мы свернем его, мы увидим, что он идет на сервер 8800:

# curl -I localhost/a/status -H "host: test.com"
HTTP/1.1 201 Created
Server: nginx/1.12.2
Date: Mon, 23 Sep 2019 14:08:53 GMT
Content-Type: application/octet-stream
Content-Length: 0
Connection: keep-alive
...