Назад | Перейти на главную страницу

Как с помощью NGiNX заставить пользователя получить доступ к файлу на другом сервере без перенаправления?

У меня есть сервер, защищенный паролем, на котором я храню файлы, к которым мои пользователи должны иметь доступ, только если у них есть права.

В конфигурациях NGiNX я хочу сделать что-то вроде этого:

proxy_pass http://username:password@domain:80/

Чтобы пользователь мог перейти по этому адресу:

http://img.website.com/bob.jpg

И тогда на сервере конфиги будут указывать на этот адрес:

http://username:password@domain:80/bob.jpg

Также есть способ вызвать сценарий (лучше всего это PHP), чтобы узнать, вошел ли в систему человек, обращающийся к файлу.

Мои сеансы сохраняются на другом сервере (в БД Redis), поэтому, если это невозможно сделать с помощью PHP, есть ли другой способ?

Итак, как мне это настроить?

Пожалуйста, ознакомьтесь со следующими двумя ссылками, чтобы ответить на ваш первый вопрос о HTTP-аутентификации с nginx в контексте прокси:

А вот простой пример:

location / {
  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_pass http://domain:80;
  proxy_set_header Authorization "Basic dXNlcm5hbWU6cGFzc3dvcmQ=";
}

куда dXNlcm5hbWU6cGFzc3dvcmQ= является username:password закодировано в Base64.

По поводу вашего второго вопроса. Да, с помощью PHP легко проверить наличие существующего сеанса HTTP-аутентификации. Пожалуйста, перейдите к официальной документации PHP для этой функции. Там вы найдете много полезных примеров, которые помогут вам начать работу: