Nginx Reverse Proxy Help Streaming MP4 File [дубликат]

Порядок, в котором указаны взаимозависимые связанные библиотеки, неверен.

Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A зависит от библиотеки B, тогда libA ДОЛЖЕН появляться перед libB в флагах компоновщика.

Например:

// B.h
#ifndef B_H
#define B_H

struct B {
    B(int);
    int x;
};

#endif

// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}

// A.h
#include "B.h"

struct A {
    A(int x);
    B b;
};

// A.cpp
#include "A.h"

A::A(int x) : b(x) {}

// main.cpp
#include "A.h"

int main() {
    A a(5);
    return 0;
};

Создайте библиотеки:

$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o 
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o 
ar: creating libB.a
a - B.o

Скомпилируйте:

$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out

Чтобы повторить снова, порядок имеет значение!

12
задан anonymous-one 28 November 2013 в 00:39
поделиться

3 ответа

Мне удалось решить более общий случай, когда место перенаправления может быть любым внешним URL.

server {
    ...

    location / {
        proxy_pass http://backend;
        # You may need to uncomment the following line if your redirects are relative, e.g. /foo/bar
        #proxy_redirect / /;
        proxy_intercept_errors on;
        error_page 301 302 307 = @handle_redirects;
    }

    location @handle_redirects {
        set $saved_redirect_location '$upstream_http_location';
        proxy_pass $saved_redirect_location;
    }
}

Альтернативный подход, который ближе к тому, что вы описываете, рассматривается в ответе ServerFault на этот вопрос : https://serverfault.com/questions/641070/nginx-302-redirect-resolve-internally

2
ответ дан Community 26 August 2018 в 05:36
поделиться

Если вам нужно выполнить несколько переадресаций, измените решение Влада следующим образом:

1) Добавьте

recursive_error_pages on;

в location /.

2 ) Добавьте

  proxy_intercept_errors on;
  error_page 301 302 307 = @handle_redirect;

в раздел location @handle_redirects.

0
ответ дан drott 26 August 2018 в 05:36
поделиться

Вы можете использовать директиву proxy_redirect:

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

] Nginx все равно вернет 301/302 клиенту, но proxy_redirect изменит заголовок Location, и клиент должен сделать новый запрос к URL-адресу, указанному в заголовке Location.

Что-то вроде этого должен сделать последующий запрос обратно nginx:

proxy_redirect http://upstream:port/ http://$http_host/;

13
ответ дан Golu 26 August 2018 в 05:36
поделиться
Другие вопросы по тегам:

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