我正在尝试使用 Apache http 配置 mercurial 访问。它需要身份验证。我的/etc/apache2/sites-enabled/mercurial看起来像这样:
NameVirtualHost *:8080
<VirtualHost *:8080>
UseCanonicalName Off
ServerAdmin webmaster@localhost
AddHandler cgi-script .cgi
ScriptAliasMatch ^(.*) /usr/lib/cgi-bin/hgwebdir.cgi/$1
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我在互联网上阅读的每个教程都告诉我插入这些行:
AuthType Basic
AuthUserFile /usr/local/etc/httpd/users
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到以下错误:
# /etc/init.d/apache2 reload
Syntax error on line 8 of /etc/apache2/sites-enabled/mercurial:
AuthType not allowed here
Run Code Online (Sandbox Code Playgroud)
我的发行版是一个定制的 Ubuntu,称为 Turnkey Linux Redmine
httpd authentication mercurial http-authentication apache-2.2
我知道有数以千计的人在将集成 Windows 身份验证与 IIS 一起使用时遇到问题的报告,但它们似乎都导致网页不适用或我已经尝试过的解决方案。我之前已经部署了几十个这样的站点,所以要么服务器/配置发生了一些奇怪的事情,要么我已经研究了太久而没有看到明显的情况。
简而言之,一切都在我的本地机器上完美运行,但在生产服务器上却崩溃了,据我所知,它具有完全相同的配置。
在本地机器上:
在远程机器上:
我有一个开发站点,它需要用户名和密码(基本 http 身份验证)才能让用户看到该站点。我想先重定向到安全协议,然后用户才能以明文形式发送密码。关于如何使用 Apache 执行此操作的任何想法?我可以访问 conf 和 .htaccess 文件。
最终结果将是:
http://xxxx/ -- 当用户访问这里时,他们会立即被重定向到 https:
https -- 当用户到达这里时,会提示他们输入用户名/密码。
我需要确保我的网址(称为 www.domain.com)始终至少通过基本 HTTP 身份验证受到保护。此外,我想使用 mod_rewrite 将我的用户发送到我的服务器上运行的两个 OC4j 实例之一。我还想使用相同的身份验证保护我的 OC4j 管理面板(和其他管理类型的功能)。我将有 2 个用户,称他们为 admin(管理员可以访问 OC4j 实例和 OC4j 管理面板)和来宾(访客只能访问 OC4j 实例)。
所以,假设我有两个 OC4j 实例——instance_a 和 instance_b。instance_a 将在端口 8888 上运行,instance_b 将在端口 8889 上运行。当用户键入 www.domain.com/instance_a 时,我想首先确保它们已通过服务器的身份验证,然后我想使用 mod_rewrite 将请求代理到 www .domain.com:8888/instance_a。这将适用于 instance_b。同样,任何用户,管理员或访客,都可以访问这些实例。如果用户尝试直接进入 OC4j 管理面板,如果他们不是管理员用户,我想将他们踢出去。
我有一个看起来像这样的 VirtualHost 条目:
<VirtualHost *:80>
ServerName www.domain.com
CustomLog "/var/log/httpd/ic/access_log" "combined"
ErrorLog "/var/log/httpd/ic/error_log"
RewriteEngine on
RewriteLogLevel 9
RewriteLog "/var/log/httpd/rewrite_log"
RewriteCond %{REMOTE_USER} !^guest$ [OR]
RewriteCond %{REMOTE_USER} !^admin$
RewriteCond %{REQUEST_URI} ^/instance_a.*$
RewriteRule ^.*$ - [F,L]
<LocationMatch "^/.*$">
AuthType Basic
AuthName "Please Login"
AuthBasicProvider file …Run Code Online (Sandbox Code Playgroud) 我想允许访问在其他情况下被禁止的目录中的单个文件。
这不起作用:
<VirtualHost 10.10.10.10:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride None
order allow,deny
allow from all
</Directory>
# disallow the admin directory:
<Directory /var/www/html/admin>
order allow,deny
deny from all
</Directory>
# but allow this single file::
<Files /var/www/html/admin/allowed.php>
AuthType basic
AuthName "private area"
AuthUserFile /home/webroot/.htusers
Require user admin1
</Files>
...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
当我访问时,http://example.com/admin/allowed.php我收到http://example.com/admin/目录的禁止消息,但没有从基本身份验证的浏览器登录弹出窗口,因此基本身份验证对文件不起作用。如何为 allowed.php 设置例外?
如果不可能,也许我可以在另一个 Files 指令中枚举所有禁止的文件?
假设 admin/ 还包含 user.php 和 admin.php 这应该在这个虚拟主机中被禁止。
编辑:我还尝试了以下修改,尝试遵循 Ignacio 的回答中的建议,结果相同为“禁止”:
...
# disallow the admin …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用需要基本 HTTP 身份验证的服务器提供的服务,但是我使用的应用程序不支持身份验证。我想要做的是创建一个代理,使我的无身份验证应用程序能够通过代理(将添加身份验证信息)连接到需要身份验证的服务器。我确信这是可以做到的,但是我对那里的代理数量感到不知所措,无法找到如何做到这一点的答案。
基本上,我想要做的就是让代理服务于这个 URL:
http://username:password@remoteserver/path
作为这个网址:
http://proxyserver/path
我可以在 Linux 上运行它,但如果我也可以在 Windows 上运行它,那就更好了。开源或至少免费是必须的。一个很大的好处是它的设置相当简单。
ngx_http_auth_request_moduleHAProxy 或 Apache 是否存在与 nginx 等效的模块?该模块允许通过 HTTP 支持自定义身份验证。我引用:
该
ngx_http_auth_request_module模块 (1.5.4+) 根据子请求的结果实现客户端授权。如果子请求返回 2xx 响应码,则允许访问。如果返回 401 或 403,则访问被拒绝并返回相应的错误代码。子请求返回的任何其他响应代码都被视为错误。
我有一台运行两个 Web 应用程序的服务器:Gerrit 和 Mantis BT。现在,这些应用程序连接到 LDAP 服务器以对用户进行身份验证,并且工作正常。但是用户必须为每个应用程序进行身份验证;我想允许用户仅进行一次身份验证(可能使用 Apache+LDAP)并重用凭据以在两个应用程序中自动登录用户。
我现在的网络架构:

我想要的网络架构:

我什至不知道要在 Google 上寻找什么,因为我通常不熟悉 HTTP 身份验证和服务器管理。任何解决方案或指向我想要的东西都将不胜感激。
配置:
Ubuntu 服务器 14.04 LTS
Apache2 2.4
Gerrit 2.10
Mantis BT 1.2.19
重要说明:
我想保留 Gerrit。
如果它可以轻松完成我想要的操作,我可以使用另一个错误跟踪器。
ubuntu authentication single-sign-on http-authentication apache-2.4
我使用 Nginx 作为 python WSGI web-app 的反向代理。
它看起来像这样:
location / {
#auth_basic "Administrator Login";
#auth_basic_user_file /var/www/static/.htpasswd;
proxy_pass http://mywebapp_gunicorn;
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;
}
Run Code Online (Sandbox Code Playgroud)
在 Web 应用程序内部,我有一些管理员页面,我希望受到很好的保护,所以现在我在 Web 应用程序内部使用了一些身份验证来保护它们,我也想添加 Nginx 身份验证。
如何激活:
auth_basic "Administrator Login";
auth_basic_user_file /var/www/static/.htpasswd;
Run Code Online (Sandbox Code Playgroud)
对于 path: /managers,但不适用于所有其他 URL。
nginx authentication http-authentication http-basic-authentication
我保护 wp-login 页面的代码抛出错误:
nginx: [emerg] invalid number of arguments in "auth_basic" directive in /etc/nginx/conf.d/wordpress.conf:41
我不确定 auth_basic 指令有什么问题。
以下是位于 NGINX 1.17.10 上 server 块中的代码
location /wp-login.php$ { auth_basic “Administrator’s Area”; auth_basic_user_file /etc/apache2/.htpasswd; }
apache2-utils 已安装,用户和密码也已创建。
apache-2.2 ×5
nginx ×3
haproxy ×2
security ×2
apache-2.4 ×1
http-proxy ×1
httpd ×1
iis ×1
iis-7.5 ×1
mercurial ×1
mod-rewrite ×1
proxy ×1
redirect ×1
ssl ×1
ubuntu ×1
virtualhost ×1