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

невозможно правильно настроить nginx с HTTP-аутентификацией в подкаталоге для uWSGI

у меня есть nginx.conf это выглядит примерно так:

server {
    server_name subdomain.example.com;

    listen 443 ssl;
    ssl_certificate      /srv/ssl/something.crt;
    ssl_certificate_key  /srv/ssl/something.key;

    access_log /var/log/something-nginx-access.log;
    error_log /var/log/something-nginx-error.log;

    location /private { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3131;

        auth_basic "Restricted";
        auth_basic_user_file /home/ubuntu/something.htpassword;
    }

    location / { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3131;
    }

    keepalive_timeout 70;
}

server {
    listen 80;
    server_name subdomain.example.com;

    access_log /var/log/something-nginx-access.log;
    error_log /var/log/something-nginx-error.log;

    location /private { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3131;

        auth_basic "Restricted";
        auth_basic_user_file /home/ubuntu/something.htpassword;
    }

    location / { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3131;
    }
}

То есть - я запускаю свое приложение по http и https и перенаправляю все запросы в uWSGI, который запускает Flask применение.

Я хочу личного пути, /private/ где что-либо ниже требует HTTP AUTH. Любые другие пути не должны требовать авторизации.

Моя проблема в том, что nginx запрашивает авторизацию независимо от того, где я делаю запрос, например, '/', '/ cool_page'.

Как правильно настроить nginx, чтобы запрашивать аутентификацию только под /private?

Наконец, похоже, что конфигурация имеет много повторений и т. Д., Есть ли способ еще больше уменьшить мою конфигурацию?

Извините, я новичок в nginx!

В настоящее время у вас есть два названных местоположения с одинаковым именем в одной секции сервера. Это заставит nginx всегда выбирать первый определенный. Чтобы решить эту проблему, переименуйте одно из названных мест. Назови один @private и другие @public например.