Archive for the ‘apache’ Category

AllowOverride造成mod_rewrite无法启动的问题

项目需要使用到自定义url,所以需要启动apache的mod_rewrite模块,打开httpd.conf,将

LoadModule rewrite_module modules/mod_rewrite.so

前面的#去掉,重启动apache,但是发现自己建立的虚拟主机程序根目录下面.htaccess定义的重写规则并没有生效。

网上找了半天是AllowOverride指令设置为None造成的。

通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override ,即
< Directory />
AllowOverride None
< /Directory>

在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中。

而对于 URL rewrite 来说,至少需要把目录设置为
< Directory /myblogroot/>
AllowOverride FileInfo
< /Directory>

AllowOverride的参数

AuthConfig
允许使用与认证授权相关的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。

FileInfo
允许使用控制文档类型的指令(DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, mod_mime中的 Add* 和 Remove* 指令等等)、控制文档元数据的指令(Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName)、mod_rewrite中的指令(RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule)和mod_actions中的Action指令。

Indexes
允许使用控制目录索引的指令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, 等)。

Limit
允许使用控制主机访问的指令(Allow, Deny, Order)。

Options[=Option,...]
允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的(无空格的)Options选项列表,用来控制 允许Options指令使用哪些选项。

—————————-(来源

所以改为AllowOverride All就可以使用mod_rewrite了。但是All是最大权限,可能有安全问题,可以根据具体的情况改为FileInfo就可以了。

 

[Wed Dec 09 20:08:30 2009] [error] (OS 10038)在一个非套接字上尝试了一个操作。 : Child 7852: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.

来源

今日电脑上的APACHE启动后CPU占用率一直高居100%, PHP程序也无法执行了。
查看错误日志里面记录了很多:

[error] (OS 10038)在一个非套接字上尝试了一个操作。 : Child 3356: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.

去到网上搜索,找到下面的解决方法:

编辑httpd.conf

Win32DisableAcceptEx ##加入这行
ThreadsPerChild 250
MaxRequestsPerChild 0

重启apache就解决了。

修改后还是不行,任然有错误记录,CPU占用率是降低了,但是还是没有恢复到原来的状态.logs里面还是一直在记录下面的错误报告。

[Mon Dec 24 16:48:06 2007] [error] (OS 10038)在一个非套接字上尝试了一个操作。 : Too many errors in select loop. Child process exiting.
[Mon Dec 24 16:48:06 2007] [notice] Child 1916: Exit event signaled. Child process is ending.
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: Released the start mutex
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: Waiting for 250 worker threads to exit.
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: All worker threads have exited.
[Mon Dec 24 16:48:07 2007] [notice] Child 1916: Child process is exiting
[Mon Dec 24 16:48:07 2007] [notice] Parent: child process exited with status 0 — Restarting.
[Mon Dec 24 16:48:07 2007] [notice] Apache/2.0.55 (Win32) configured — resuming normal operations
[Mon Dec 24 16:48:07 2007] [notice] Server built: Oct 9 2005 19:16:56
[Mon Dec 24 16:48:07 2007] [notice] Parent: Created child process 3028
[Mon Dec 24 16:48:07 2007] [notice] Disabled use of AcceptEx() WinSock2 API
[Mon Dec 24 16:48:07 2007] [notice] Child 3028: Child process is running
[Mon Dec 24 16:48:07 2007] [notice] Child 3028: Acquired the start mutex.
[Mon Dec 24 16:48:07 2007] [notice] Child 3028: Starting 250 worker threads.
[Mon Dec 24 16:48:08 2007] [notice] Child 3028: Listening on port 80.

最后搜索到与winsock有关,有网友也出现了这个问题,他认为是金山毒霸或者升级精灵修改了WINSOCK导致的。由于我电脑上也安装了金山毒霸,而且最近几天也升级过了,应该是同样的问题。于是搜索到恢复Winsock的方法:

netsh winsock reset

使用此条命令恢复后,重启电脑,这下Apache恢复当原先的良好状态了。

希望遇见这样问题的朋友们能得到帮助~~!

————–

我可以肯定又是dr.com在篡改winsock。

 

dr.com与apache冲突暂行解决方案

apahce和dr.com(学校用的v3.483(d14)) 的冲突问题让我困顿,每次开机都要禁用windows防火墙,禁用lmhost,netbios,然后再手动开启apache和mysql,我已经被dr.com打败。

方法非原创,参看这里的几篇文章:12

主要是通过修改dr.com和apache冲突了的注册表值,

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\WinSock2\Parameters\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\

在没有安装dr.com的情况下导出上面两个位置的键值,名为apache1.reg apache2.reg

在安装dr.com的情况下导出上面两个位置的键值,名为drcom1.reg drcom2.reg

写个bat和这些.reg文件全部复制到apache目录 ,我用的是2.2: D:\phpnow\Apache-22

批处理内容————————————————

echo import apache.reg…& restart apache
regedit /s apache1.reg
regedit /s apache2.reg
call D:\phpnow\PnCmds\Apa_Restart.cmd
call D:\phpnow\PnCmds\My_Stop.cmd
call D:\phpnow\PnCmds\My_Start.cmd
echo press enter to import drcom.reg
pause
regedit /s drcom1.reg
regedit /s drcom2.reg

用的时候先开机,正常登陆dr.com,然后运行这个批处理,运行到pause就会提示“按回车键继续…” ,这样就使用了适合apache的键值,然后call了三个bat来启动apache和mysql,phpnow带有这些维护bat, 根据phpnow的安装目录酌情修改。然后,要不是上网了,先退出dr.com 然后bat回车退出。。

我用了这样方法,但是并不能保证所有的程序的网络都正常,firefox,IE,校内通,爱饭,QQ 没有全部都能一起联网的。哎,我在琢磨接下来了版本中是dr.com主动兼容apache,还是apache主动兼容dr.com呢? 我觉得都不可能,因为dr.com不鸟apache,apache也不知道啥是dr.com。


 

Apache:setup_inherited_listeners(), WSASocket failed to open the inherited socket

几天捣腾Win平台的Apache,启动了也没有看到httpd.exe进程,服务也无法开启,查看logs目录下的error.log内容:

“setup_inherited_listeners(), WSASocket failed to open the inherited socket”

解决方法:
“网络连接”–>”tcp/ip属性”–> “高级”–>”wins”—>去掉”LMHOSTS查询”的勾选。