我有一个相对简单的配置:
upstream appserver-1 {
server unix:/var/www/example.com/app/tmp/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://appserver-1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
auth_basic "Restricted";
auth_basic_user_file /path/to/htpasswd;
}
location /api/ {
auth_basic off;
}
}
Run Code Online (Sandbox Code Playgroud)
目标是在整个网站上使用基本身份验证,除了在/api/
子树上。虽然它确实适用于基本身份验证,但其他指令proxy_pass
也不起作用/api/
。
是否可以仅禁用基本身份验证,同时保留其他指令而不复制和粘贴所有内容?
我在 Apache 上使用mod_auth_kerb实现了 SSO 身份验证。我的配置是这样的:
<Location /login/ >
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate on
KrbAuthoritative on
KrbVerifyKDC on
KrbAuthRealm D.ETHZ.CH
Krb5Keytab /etc/HTTP.keytab
KrbSaveCredentials on
RequestHeader set KERBEROS_USER %{REMOTE_USER}s
</Location>
Run Code Online (Sandbox Code Playgroud)
我的问题是,没有require valid-user
, mod_auth_kerb 甚至不会尝试对用户进行身份验证并KERBEROS_USER
最终成为(null)
. 如果我添加require valid-user
,如果浏览器支持,用户会自动进行身份验证,但如果浏览器不支持 Kerberos Negotiate,则会显示一个丑陋的模式登录表单(ala HTTP Basic Auth)。
我想要实现的是,如果用户访问/login/
,mod_auth_kerb 会尝试通过 Kerberos Negotiate 对用户进行身份验证。如果失败,将向用户显示一个普通的 HTML 登录表单。
是否可以以这种方式配置 Apache/mod_auth_kerb?
我将 Apache2 设置为由gunicorn提供的多个 python 应用程序的前端服务器。我使用 mod_proxy 的 Apache2 设置如下所示:
<VirtualHost *:80>
ServerName example.com
UseCanonicalName On
ServerAdmin webmaster@localhost
LogLevel warn
CustomLog /var/log/apache2/example.com/access.log combined
ErrorLog /var/log/apache2/example.com/error.log
ServerSignature On
Alias /media/ /home/example/example.com/pysrc/project/media/
ProxyPass /media/ !
ProxyPass / http://127.0.0.1:4711/
ProxyPassReverse / http://127.0.0.1:4711/
ProxyPreserveHost On
ProxyErrorOverride Off
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
通常,此设置效果很好。但是我有一个问题:当我重新启动 gunicorn 进程(需要 2-5 秒)并且有来自 Apache 的请求时,该请求将失败并显示 503 错误。到现在为止还挺好。但是 Apache 不断返回 503 错误,即使在 gunicorn 进程备份之后也是如此。只有在 Apache 完全重新启动后,它才会从代理服务器恢复提供内容。
有没有办法解决这种行为?
我们使用 nagios 来监控我们的服务器群,并且通常效果很好。但是,有时 nagios 运行的主机会失去连接几分钟,这让 nagios 相信它监控的所有服务器和服务都已关闭。结果是数百封警报邮件,紧随其后的是数百封恢复邮件。
有没有办法配置 nagios,让它在发布大量警报邮件之前测试自己的连接性?