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

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

Я использую nginx в качестве обратного прокси для своего основного веб-приложения asp.net. Я использую модуль спнего для 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;
    }
}

Вы можете использовать переменную и некоторые проверки, которые обходят кеш при 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, но вы можете адаптировать его для работы с вашим приложением.