Как в nginx перенаправить роуты?

Как в nginx перенаправить все роуты в начале которых /api на сервер чтобы они обрабатывались там а остальные на ангуляр?
  • Вопрос задан
  • 1671 просмотр
Решения вопроса 1
AirWorker
@AirWorker
Node.js full stack web dev
> а остальные на ангуляр?

вообще не понял, при чем тут ангуляр, но не суть...

Вот часть реального конфига:

server {
  listen  80;
  server_name example.com;

  location /all.css {
    root /srv/vek-node/static;
  }
  location /all.css.map {
    root /srv/vek-node/static;
  }
  location /img {
    root /srv/vek-node/static;
  }
  location /vendors {
    root /srv/vek-node/static;
  }
  
  location /media {
    alias /var/www/vek_staging/media;
  }

  location /catalog/metal {
    rewrite ^ http://metal.example.com$request_uri? permanent;
  }

  location /admin {
      uwsgi_read_timeout 600;
      client_max_body_size 30m;
      include /etc/nginx/uwsgi_params;
      uwsgi_pass unix:/run/uwsgi/app/vek_staging/socket;
  }

  location /static {
    alias /var/www/vek_staging/static;
  }

  location / {
    include /etc/nginx/proxy_params;
    proxy_read_timeout 120;
    proxy_pass http://127.0.0.1:3331;
  }
}


1) Первые четыре директивы location задают раздачу контента из папки static, при этом uri не содержит /static/. Здесь переопределяется root.
2) Пятая директива location задают раздачу контента из папки media, при этом uri начинается с /media/. Здесь используется директива alias.
3) Шестой location - все что начинается с /catalog/somesubpart - редиректим на поддомен, с таким же uri.
4) location /admin - передаем запрос uwsgi-приложению (Django)
5) location / - все остальное проксируем на 127.0.0.1:3331 (Node.js)

Пример довольно показательный, используются почти все популярные фишки.

UPD: первые четыре директивы location определяются довольно тупо - это плата за их распознавание без префикса. Но в реале это ничем не грозит - я генерирую этот конфиг галпом, конкретно gulp-nunjucks. Реальный конфиг примерно в 2 раза больше.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@buhantsev
Например так я думаю:

location / {
    index index.php;
    try_files $uri $uri/ /index.php?$args;

    location ~ api$ {
      try_files $uri $uri/ /api.php?$args;
    }
  }


ну и следом (если это php конечно) что то типа того:

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php5-service.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $2;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы