Если я напрямую захожу на страницу, доступ к которой ограничивается с помощью базовой аутентификации, отображается диалоговое окно «Базовая аутентификация», но если я перехожу с другой страницы, которая не ограничивает доступ, диалоговое окно «Базовая аутентификация» не отображается, и я могу получить доступ к странице.
Статический сайт был создан следующим образом:
$ npm init solid@latest
$ cd project-directory
$ npm install
$ vim app.config.js
$ npm run build
$ rm -rf /usr/share/nginx/html && mkdir /usr/share/nginx/html
$ cp -r .output/public/. /usr/share/nginx/html/
Содержимое app.config.js следующее:
import { defineConfig } from "@solidjs/start/config";
export default defineConfig({
server: {
prerender: {
crawlLinks: true
}
}
});
Содержимое /etc/nginx/nginx.conf следующее:
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location /about/ {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
}
Этот сайт был создан с помощью SolidJS и размещен на nginx.
У этого сайта есть домашняя страница и страница /about/.
На главной странице есть ссылка /about/.
Когда я перехожу непосредственно на http://xx.xx.xx.xx/about/, базовая аутентификация работает, но когда я перехожу на /about/ по ссылке на главной странице, базовая аутентификация не работает, и я можно получить доступ без имени пользователя и пароля.
Мое окружение следующее:
Как я могу ограничить доступ к /about/ с помощью базовой аутентификации?
Вы говорите, что используете nginx, и это наводит меня на мысль, что вы используете генерацию статического сайта (SSG). Но если вы заранее сгенерируете все файлы и сделаете их доступными на своем веб-сервере (например, nginx), тогда, если кто-то знает правильный URL-адрес, он сможет просто загрузить этот файл. Таким образом, если это действительно должно быть действительно безопасно, вы не сможете сделать это с помощью настройки генерации статического сайта. Это было бы возможно, если бы вы хотели скрыть всю страницу за базовой аутентификацией, но вы говорите только некоторые страницы.
Чтобы защитить только определенные страницы, я вижу три варианта:
P.S. Не знаете, что такое SSG и SSR и SPA или MPA? Посмотрите запись в моем блоге.
Большое спасибо за подробный и полезный ответ!