nginx - запретить кеширование информации авторизации

Я использую nginx в качестве обратного прокси для моего основного веб-приложения asp.net. Я использую модуль spnego для nginx для поддержки интегрированной аутентификации Windows. Это работает, но если пользователь вводит неправильные учетные данные, учетные данные не запрашиваются снова? вместо сервера отправьте ответ «401 Требуется авторизация». Как я могу это исправить?

nginx config:
server {
    listen       80;
    server_name  irm-nginx.irm.local;
    auth_gss on;
    auth_gss_realm IRM.LOCAL;
    auth_gss_format_full on;
    auth_gss_keytab /etc/nginx/user.keytab;
    auth_gss_service_name HTTP/irm-nginx.irm.local;

    location / {
        #root   /usr/share/nginx/html;
        #index  index.html index.htm;
        proxy_pass http://irmweb:80;
        proxy_http_version  1.1;
        proxy_cache_bypass  $http_upgrade;
        proxy_set_header Upgrade        $http_upgrade;
        proxy_set_header Connection        "upgrade";
        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_set_header X-Forwarded-Host  $host;
        proxy_set_header X-Forwarded-Port  $server_port;
        proxy_set_header X-Forwarded-User $remote_user;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
0
задан 3 October 2019 в 15:30
1 ответ

Вы можете использовать переменную и некоторые проверки, которые обходят кеш при POST или определенных страницах. Например:

В блоке сервера:

# Caching
set $skip_cache 0;

# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
        set $no_cache 1;
}
if ($query_string != "") {
  set $skip_cache 1;
}

# Don't cache uris containing the following segments
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
  set $skip_cache 1;
}

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

fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;

Пример выше работает для WordPress, но вы можете адаптировать его для работы с вашим приложением.

0
ответ дан 5 December 2019 в 00:29

Теги

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