@Rollex

Proxy_pass в Nginx — как работать с переменными?

Необходимо получать файл по ссылке с другого домена
https://site1.ru/link/pDK9VJacsrb9bway?no=2 - это основной сайт, а хотелось бы получать файл по зеркальному сайту https://site2.ru/link/pDK9VJacsrb9bway?no=2

Конфиг основного сайта:
server {
        root /var/www/site1.ru/public;
        index index.php index.html;
        server_name site1.ru;

        location / {
            try_files $uri /index.php$is_args$args;
        }

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }


Конфиг зеркального сайта:

server {
        index index.php index.html;
        server_name site2.ru;

        location / {
        root /var/www/site2.ru;
        }

location /link/ {
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass https://site1.ru:443/;
}

С таким конфигом отлично работает api https://site2.ru/api/node3?access_token=nyV0Wv142G... (спасибо dodo512 )
а вот ссылка на файл https://site2.ru/link/pDK9VJacsrb9bway?no=2 отдает 404 ошибку
  • Вопрос задан
  • 486 просмотров
Решения вопроса 1
@dodo512
nginx.org/ru/docs/http/ngx_http_proxy_module.html#...
Если директива proxy_pass указана с URI, то при передаче запроса серверу часть нормализованного URI запроса, соответствующая location, заменяется на URI, указанный в директиве:
location /link/ {
    proxy_pass https://site1.ru/;

Тут /link/ будет заменён на / в итоге получится https://site1.ru/pDK9VJacsrb9bway?no=2

Если директива proxy_pass указана без URI, то при обработке первоначального запроса на сервер передаётся URI запроса в том же виде, в каком его прислал клиент.
location /link/ {
    proxy_pass https://site1.ru;


И ещё тут нужно убрать proxy_set_header Host $host;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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