在开发服务器上,我安装了用于自动化测试的工具 Jenkins。它在端口 8080 上运行。如果我转到,www.mysite.com:8080
我可以看到它的命令面板。我想通过使用 Apache 密码保护它,使外界无法访问它。(我的服务器运行的是 Ubuntu 12.04 LTS)。我阅读了以下内容页对于一般建议,特别是关于安全方面的建议,他们建议以下设置:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/opt/apache/httpd/htdocs"
ServerName jenkins.yourdomain.com
ErrorLog "logs/jenkins-error_log"
ProxyPass /jenkins/ ajp://127.0.0.1:8102/jenkins/
ProxyPassReverse /jenkins/ ajp://127.0.0.1:8102/jenkins/
<Location />
Order allow,deny
Allow from all
</Location>
<Location /jenkins/>
AuthType basic
AuthName "jenkins"
AuthUserFile "/opt/apache/httpd/conf/.htpasswd"
</Location>
</VirtualHost>
我的 Apache 文件当前具有以下设置:
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerAdmin [email protected]
ServerName www.mysite.com
ServerAlias mysite.com
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html index.php
DocumentRoot /var/www
# Log file locations
LogLevel warn
ErrorLog /var/log/apache/error.log
CustomLog /var/log/apache/access.log combined
</VirtualHost>
我无法使建议的方法正常工作而不出现错误(尽管控制台或日志中没有消息),因此我添加了以下几行:
<VirtualHost *:8080>
ServerName www.mysite.com
ProxyPass / http://www.dev.mysite.com:8080/
ProxyPassReverse / www.dev.mysite.com:8080/
ProxyPreserveHost on
<Proxy *>
AuthType Basic
AuthName "Dev Server"
AuthUserFile "/home/.htpasswd"
Require valid-user
</Proxy>
</VirtualHost>
在我的.htpasswd
文件中我输入了以下几行:
john:n5MfE
dave:9fluR
然后我重新启动了 Apache,但8080
无需密码仍可访问端口。我是否遵循了正确的步骤?
答案1
您应该使用 htpasswd 程序创建并将用户添加到 .htpasswd 文件,因为 Linux 不支持纯文本密码,例如
htpasswd -c /home/.htpasswd john
New password:
Re-type new password:
Adding password for user john
将创建文件并使用您提供的密码添加用户 john。然后您可以像这样添加其他用户
htpasswd /home/.htpasswd dave
New password:
Re-type new password:
Adding password for user dave
答案2
我不确定<Proxy>
指令是否处理 HTTP Basic 身份验证(文档建议仅通过 IP/域进行限制)。我认为您应该只使用一般方法,例如:
<Location />
AuthType Basic
AuthName "Dev Server"
AuthUserFile "/home/.htpasswd"
Require valid-user
</Location>