我从我的服务器中删除了Plesk,现在我正试图弄清虚拟主机是如何工作的。 当我在浏览器中打开www.domain.com时,我的etc / apache2 / apache2.conf和etc / apache2 / sites-available / default都指向/ var / www /虚拟主机/ domain.com /的httpdocs / 有些configuration文件里有一些我不知道的东西吗? 我怎样才能改变我的httpdocs的位置?
有一个mod_perl写服务器端程序。 我只使用一个进程共享apache worker mpm内存和~60个线程。 我使用锁来临时保护对共享内存的访问,1.7s中只有0.1s被locking。 问题是我得到相同的速度10个连续请求相比,10个并发请求。 我的压力脚本激发了n个重要的URL处理请求,每个请求之间有0.1秒的延迟。 括号中的数字是请求号码。 perl stressTestServer.pl n=1 DONE ( 0 ) > 1.778257 sek perl stressTestServer.pl n=5 DONE ( 3 ) > 8.71926 sek DONE ( 0 ) > 8.85207 sek DONE ( 1 ) > 8.976061 sek DONE ( 4 ) > 9.119936 sek DONE ( 2 ) > 9.218552 […]
我目前正在研究逆向代理,但没有具体的一个。 我正尝试通过身份validation通过Web上的另一个代理将反向代理的请求转发。 反向代理的主要原因是有用户重写的URL,当用户点击它,它将通过我的反向代理转发。 但是,它也需要通过一个真正的代理与身份validation。 所以基本上我试图实现的是,用户导航到一个站点,请求被反向代理捕获,反向代理然后通过另一个代理(通过代理validation)发出另一个请求。 当反向代理得到响应时,它会从响应中的内容中重写URL并将其传回给用户。 我的问题是,这是可能的吗? 如果是这样,我可以从哪里开始实施呢? 任何帮助表示赞赏,谢谢! 编辑:我find了一种方式来重写使用mod_replace mod代理中的url 。 但是还没有find通过另一个代理转发networking请求的方法
这个问题具体是关于Apache服务器(在我的情况下是2.2)在使用默认的内部页面时使用的字符集。 例如, mod_autoindex目录列表,未find的ErrorDocument页面,500内部错误页面等 Apache目前使用的这些内置页面的字符集是iso-8859-1(见截图)。 这里是我的相关的Apache设置: # apache2.conf: AddDefaultCharset utf-8 我的操作系统是Debian 7,我使用它的默认prefork二进制。 我在想这些网页上的字符集可能不会改变。 或者,也许有一个编译时选项,影响默认字符集? 在我的(特定于Debian的)/ etc / apache2 / envvars中,我find了默认的语言环境: $ cat /etc/apache2/envvars . /etc/default/locale $ cat /etc/default/locale LANG="en_US.UTF-8 $ env | grep LANG LANG=en_US.UTF-8 使用mod_headers修改Content-Type标题对Apache的默认内部页面没有影响。
我使用cronolog让apache日志文件旋转。 我正在使用fail2ban监视这些日志文件,并禁止滥用。 总是有一个由cronolog创build并指向当前日志文件的access.log符号链接。 每天晚上,我运行一个cron来压缩昨天的日志文件: find /var/log/apache2/ -daystart -mtime +0 \( -name "*access*.log" -or -name "*error*.log" \) -type f -exec gzip {} \; 问题是,对于stream量低的网站, access.log符号链接现在已经死了,因为它指向的文件已经被gzip重命名了。 结果是fail2ban放弃了那些监狱,因为它不能再统计文件了。 解决方法是只压缩没有符号链接指向的日志文件。 我发现自己是这样做的一种方式,它的工作,但我想知道是否有一个更简单的方法来做,因为这是一个非常复杂,并不是很快( find一个find )。 find /var/log/apache2/ -daystart -mtime +0 \( -name "*access*.log" -or -name "*error*.log" \) -type f -exec sh -c 'test `find /var/log/apache2/ -lname {} | wc -l` -eq […]
我已经全面了解我的问题的解决scheme,找不到它。 build立: 所以我有一台运行带有多个Web服务器的虚拟机的主机。 每个虚拟机(networking服务器)有2个networking适配器; 纳特(与端口转发8080至80和SSH)和主机只适配器。 每台主机只有适配器有它自己的networking适配器(所以每个虚拟机应该有它自己的外部IP)。在主机上使用Apache我有以下文件在站点可用(每个服务器一个): <VirtualHost *:80> ProxyPreserveHost On ProxyRequests Off ServerName www.domain1.com ServerAlias domain1.com ProxyPass / http://192.168.58.1:8080/ ProxyPassReverse / http://192.168.58.1:8080/ </VirtualHost> 我们的想法是,主机系统上的apache会根据域名将请求redirect到托pipe该站点的正确的vm(然后让apache在该服务器上执行所需的操作)。 问题: 看来我所有的域名都指向同一个虚拟主机。 所以,不pipe我去哪个域,它都需要我完全相同的页面。 所以我想知道我做错了什么,以及如何使域指向正确的虚拟机? 它是否与服务器上的主机名configuration不正确? 如果是主机名问题,我应该如何设置主机名? 更新: 看来,Apache不是问题。 似乎所有主机只有IP指向同一个虚拟机。 所以我必须错过vms上的主机专用适配器的一些configuration,即使我确信每个虚拟机都有自己的configuration。 解决了: 见下面的答案。
我在Apache 2.2服务器上安装了各种虚拟主机(虚拟主机),例如: examplea.domain exampleb.domain testsitea.domain testsiteb.domain testsite.domain othersitea.domain 在匹配正则expression式“site [az] .domain”的虚拟主机上,我希望能够从/usr/local/apache/files/logo.gif服务同一个文件(比如说logo.gif)。 如果我想在每个网站上做,我显然必须有这样的东西: <VirtualHost *:80> ServerName testsitea.domain … Alias /logo.gif /usr/local/apache/files/logo.gif … </VirtualHost> <VirtualHost *:80> ServerName testsiteb.domain … Alias /logo.gif /usr/local/apache/files/logo.gif … </VirtualHost> 等等 但是,由于各种原因,我不能确保VirtualHost将设置别名,因此我需要使其成为一个全局的Apache设置,但在ServerName上正则expression式匹配。 任何人都可以在正确的方向指向我,如果这是可能的?
我知道如何以一种常见的方式使用Apache的mod_rewrite,但现在我试图以一种不同的方式使用它,这是不成功的。 这是我写的: RewriteEngine on RewriteMap lowercase int:tolower RewriteCond %{lowercase:%{HTTP_HOST}} ^([^.]+)\.internal$ RewriteRule ^(.*)$ http://%1.local$1 这就是整个故事: 我已经添加了两行到我的hosts文件,如下所示: 127.0.0.1 test.local 127.0.0.1 test.internal 我还在我的Apache中添加了test.local的虚拟主机,并创build了一个文件,这样URL http://test.local/info.php打印出PHP的configuration和内容。 现在让我们回到mod_rewrite指令; 我希望通过编写我在post的http://test.internal/info.php写的东西,当我打开URL http://test.internal/info.php它将由test.local/info.php脚本服务。 谁能告诉我我做错了什么? 顺便说一下,我已经写在Apache的主要configuration文件的指令,而不是在虚拟主机,我坚持这一点。 [UPDATE] 我已经添加了以下两行到Apache的configuration文件,所以我可以debuggingRewrite的行为: RewriteLog "/tmp/rewrite.log" RewriteLogLevel 9 我在这台机器上有几个使用Rewrite的虚拟主机,当我访问它们时,由于这两行在指定的path中创build了一个日志文件。 但是当我访问http://test.internal/info.php没有创build日志文件。 [UPDATE] 我要澄清我的目标,也许我从头做了一切错误。 我有许多VPS每个托pipe一个不同的网站。 他们都居住在本地networking,我想添加一个前端到这个网站的集合,所以他们可以从互联网上访问。 但事情是这个集合的成员是dynamic添加或删除,所以我不想修改我的DSN和/或反向代理服务器的configuration文件,每次有所改变。 我可以在DNS服务器中使用通配符将所有请求都指向特定域到前端(反向代理服务器),然后由前端将请求redirect到使用其子域的相应VPS(每个子域是逻辑上分配给VPS)。 为此,我将设置一个本地DNS映射一些虚拟域名到内部VPS IP。 剩下的就是反向代理服务器应该重写请求的URL,使其与虚拟域匹配。 我无法理解的解决scheme的唯一部分是如何告诉Apache将传入请求的域映射到虚拟域! 有什么build议么?
所以我通过以下方式安装了mod_auth_mysql : sudo apt-get install libapache2-mod-auth-mysql sudo a2enmod auth_mysql sudo /etc/init.d/apache2 restart 我更新了我的.htaccess文件,使其连接到数据库,但它不工作。 这是我在错误日志中得到的: [Wed Aug 07 16:35:23 2013] [error] [client xxx.xxx.xxx.xxx]用户名未find:/ admin /,referer:https://www.domain.tld/ 用户名非常确实存在。 如果我做SELECT * FROM userTable WHERE userName = 'username'它出现。 所以我有点不知所措 有没有办法,我可以看到SQL mod_auth_mysql正在产生? 从我的.htaccess文件… AuthBasicAuthoritative Off AuthUserFile /dev/null Auth_MYSQL On Auth_MySQL_Host localhost Auth_MySQL_User username Auth_MySQL_Password password Auth_MySQL_Authoritative On Auth_MySQL_DB "dbname" Auth_MySQL_Password_Table "apache_auth" […]
我在Windows 2012服务器上configuration了Apache / PHP,一切运行平稳几个小时,然后Apache挂起,我的网站没有响应。 我在我的Apache错误日志中find了这个条目:[mpm_winnt:warn] [pid 3884:tid 1504](OS 64)指定的networking名称不再可用。 :AH00341:winnt_accept:asynchronousAcceptEx失败。 在做了一些研究后,我发现一些post说我应该使用:Acceptfilter https none 但是,当使用https(使用https运行整个网站)时,看起来像Apache 2.4.2中存在一个错误。 有关错误的更多信息,请参阅https://issues.apache.org/bugzilla/show_bug.cgi?id=52476 ) 所以我不能使用Acceptfilter https none。 我有几个问题,我希望有人可以帮助我回答:1.为什么我需要禁用filter来解决我的问题? (我还不知道这是否真的能解决这个问题)。 2.我的网站还没有经过Apache 2.4.4的testing,我没有升级到引入任何错误。 有没有办法解决我的问题,而无需升级到Apache 2.4.4? 如果没有,那么如果有人知道升级到Apache 2.4.4时可能引入的常见错误,请分享。 我感谢您的帮助!