<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]Nginx error指令把error_log指向非nginx自身的logs目录同时删除掉nginx下的logs目录nginx启动后还去找nginx的logs目录下error.log文件的问题分析备案。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Web服务器]]></category>
<pubDate>Mon, 02 Feb 2015 16:21:16 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：nginx.conf里指定了nginx的error_log:error_log /data/logs/nginx/nginx_error.log; 该文件不在nginx的logs下面，于是我把这个logs文件夹都给删除了： rm -Rf /usr/local/nginx/logs，发现在启动时会会报一个alert错，nginx: [alert] could not open error log file: open() &quot;/usr/local/nginx/logs/error.log&quot; failed (2: No such file or directory)的研究探讨。<br/><br/><br/>一）删除了logs目录：rm -Rf /usr/local/nginx/logs<br/><br/>二）修改error_log的指向位置，Nginx配置如下：<br/>#error_log /data/logs/nginx/nginx_error.log debug;<br/>#error_log /data/logs/nginx/nginx_error.log notice;<br/>#error_log /data/logs/nginx/nginx_error.log crit;<br/>#error_log /data/logs/nginx/nginx_error.log;<br/>#error_log /dev/null crit;<br/>error_log /data/logs/nginx/nginx_error.log error &#124; debug_core &#124; debug_alloc //这个或配置好像有问题在新版本出现Starting nginx... nginx: [emerg] invalid log level &quot;&#124;&quot; in /usr/local/nginx/conf/nginx.conf:14<br/>，&nbsp;&nbsp;参考自：http://blog.csdn.net/gsnumen/article/details/7824234 <br/><br/>三）启动下nginx试下看，出现如下问题：<br/>root@119.10.6.23:/usr/local/nginx/conf# ../sbin/nginx -c ./conf/nginx.conf<br/>nginx: [alert] could not open error log file: open() &quot;/usr/local/nginx/logs/error.log&quot; failed (2: No such file or directory)<br/><br/>问题，我都修改指向了，还去读取这个/usr/local/nginx/logs/error.log 干嘛？<br/><br/>一兄弟我查下源码去了，说了一下问题所在，相当感谢：<br/><br/><br/>—————————————————QA—————————————————<br/>说：这个/usr/local/nginx/logs/error.log日志写死了，我昨天查好多个G里面，把我/占了95%。<br/>答：日志是不能少的。可以写个定时删除N天以前日志的功能呀。<br/><br/>问：等nginx启动成功后，会自动替换成你指定的log。这种逻辑真是不符合我的世界观，为何？<br/>答：<br/>1）这个错误是在 ngx_log_init 函数报出来的，也就是NGX_PREFIX/logs/error.log 是nginx启动时用的日志文件，在这个时候连配置都还没去解析，所以和配置里的error_log没有关系。<br/><br/>2）我在启动过程中（在配置读取之前）有错误，我得错误信息该往哪里写呢？我只能用默认的地址。<br/><br/>3）你需要保留 NGX_PREFIX/logs/error.log 这个路径存在,但你配置里可以把 access_log&nbsp;&nbsp;error_log 指向别处的。<br/>等nginx启动成功后，会自动替换成你指定的log。<br/><br/>4)还可能有一个nginx.pid也在这个logs下面。<br/>可我修改了：pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /data/nginx/nginx.pid;<br/>ls /data/nginx/nginx.pid<br/>/data/nginx/nginx.pid<br/><br/>最后的解决办法：<br/>（那要么单独出来，别混一块儿啊，用软链接直接纪念品混一块得了，其实是两个文件才对故意搞一块！）<br/>我不太了解这块，我觉得个系统启动错误得学下mysql...的启动错误，别和用户的虚拟机搞一个文件。<br/>对源码不熟悉，不过也非常感谢了，我现在直接做软链接实现了，在启动时写那地儿你说的替换成你指定的log是一个文件。<br/><br/>根本原因是我不想有nginx下的logs文件夹和nginx的设计有冲突，如下：<br/>一启动就先读配置呢<br/>----<br/>在读配置之前，还有很多事情要做呢，比如 参数处理&nbsp;&nbsp;os_init&nbsp;&nbsp;各个模块初始化(配置本身也是一个模块)<br/><br/>其实启动的错误文件和error_log文件混淆成一个文件了。程序员的角度这个/usr/local/nginx/logs/error.log是nginx从系统层面启动时的默认，而这个error_log呢，则是从运行起来后的日志级别来讲的，其实这块有点蒙，呵呵。<br/><br/>—————————————解决办法————————————<br/>—操作记录—这下就忽悠nginx在logs下面有这个文件，其实是个软链接，它再按我配置的error_log写时，还是那个文件—<br/>ln -s /data/logs/nginx/nginx_error.log /usr/local/nginx/logs/error.log<br/>ls&nbsp;&nbsp;-lart /usr/local/nginx/logs <br/>/usr/local/nginx/logs/error.log -&gt; /data/logs/nginx/nginx_error.log<br/>chmod -R 777 /usr/local/nginx/logs/error.log<br/><br/>忽悠nginx启动默认配置文件模块的软链接代码完毕！<br/><br/>Ps：<br/>/data/software/lnmp1.1-full/nginx-1.6.0# vi ./objs/ngx_auto_config.h 查看源码：<br/><textarea name="code" class="php" rows="15" cols="100">
396 #ifndef NGX_PID_PATH
397 #define NGX_PID_PATH&nbsp;&nbsp;&quot;logs/nginx.pid&quot;
398 #endif
399 
400 
401 #ifndef NGX_LOCK_PATH
402 #define NGX_LOCK_PATH&nbsp;&nbsp;&quot;logs/nginx.lock&quot;
403 #endif
404 
405 
406 #ifndef NGX_ERROR_LOG_PATH
407 #define NGX_ERROR_LOG_PATH&nbsp;&nbsp;&quot;logs/error.log&quot;
408 #endif
409 
410 
411 #ifndef NGX_HTTP_LOG_PATH
412 #define NGX_HTTP_LOG_PATH&nbsp;&nbsp;&quot;logs/access.log&quot;
413 #endif
</textarea><br/><br/>也就是说不光是pid和error.log，还有那个access.log： /usr/local/nginx/logs/access.log 好像还有这个问题，操作如下解决：<br/>rm -Rf /usr/local/nginx/logs/access.log<br/>touch /data/logs/nginx/nginx_access.log<br/>chown www /data/logs/nginx/nginx_access.log<br/> ln -s /data/logs/nginx/nginx_access.log /usr/local/nginx/logs/access.log<br/> chown www /usr/local/nginx/logs/access.log<br/><br/>这样干的结果是：<br/>ls -lart /usr/local/nginx/logs<br/>error.log -&gt; /data/logs/nginx/nginx_error.log<br/>access.log -&gt; /data/logs/nginx/nginx_access.log<br/><br/>关于access.log，是这样的一个日志情况，经实践如下：<br/>1）如果有设置会向设置里写。<br/>2）如果没有设置关闭，会默认向：/usr/local/nginx/access.log里写。<br/>3）如果加上：access_log off ，又打开了：access_log /data/logs/nginx/access_justwinit.log access;<br/>&nbsp;&nbsp;&nbsp;&nbsp;(1)打开的指令失效。&nbsp;&nbsp;（2）也不向nginx默认的/usr/local/nginx/access.log里写。 也就是全关掉了。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location ~ .*&#92;.(js&#124;css)?$<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expires&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1d;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;limit_conn addr 5;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;limit_conn_status 505;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access_log off;#关掉下面日志路径后，不加这一行会向：/usr/local/nginx/logs/access.log写<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#access_log /data/logs/nginx/access_justwinit.log wap_access;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#access_log /data/logs/nginx/access_justwinit.log access;<br/>&#125;&nbsp;&nbsp;<br/><br/><br/><br/>Finished...<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>——————————————————————————————————<br/>为何放在/data下呢，因为/data是另一块大一点的vps磁盘，适合存放日志：<br/>/dev/sda3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14G&nbsp;&nbsp;6.3G&nbsp;&nbsp;6.4G&nbsp;&nbsp;50% /<br/>/dev/sdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 94G&nbsp;&nbsp; 27G&nbsp;&nbsp; 63G&nbsp;&nbsp;31% /data
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]Nginx error指令把error_log指向非nginx自身的logs目录同时删除掉nginx下的logs目录nginx启动后还去找nginx的logs目录下error.log文件的问题分析备案。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>