Nginx服务可接受的信号
信号 | 作用 |
---|---|
TERM或INT | 快速停止Nginx服务 |
QUIT | 平缓停止Nginx服务 |
HUP | 使用新的配置文件启动进程,之后平缓停止原有进程,也就是所谓的“平滑重启” |
USR1 | 重新打开日志文件,常用于日志切割 |
USR2 | 使用新版本的Nginx文件启动服务,之后平缓停止原有Nginx进程,也就是所谓的”平滑升级” |
WINCH | 平缓停止worker process用于Nginx服务器平滑升级 |
使用方法
kill -HUP 进程号
或
kill -HUP $(cat /log/nginx.pid)
其他的命令一样 : kill -USR2 7472
信号量在linux中很多软件都适用的像php-fpm
cat /etc/php-fpm.conf
看到
pid = /var/run/php-fpm/php-fpm.pid
php-fpm 启动:
/usr/local/php/sbin/php-fpm
php-fpm 关闭:
kill -INT cat /var/run/php-fpm/php-fpm.pid
php-fpm 重启:
kill -USR2 cat /var/run/php-fpm/php-fpm.pid
USR1
是分割备份日志用的 、具体用法是mv /logs/access.log ./ access2016.6.log
touch eccess.log
然后用命令:kill -USR1 进程号。
nginx将会写入新的eccess.log中。linux中写入文件不是靠文件名是靠“节点”,所以在mv 之后 access2016.6.log还会被写入访问信息,直到kill -USR1 进程号 之后才会写入新的eccess.log
日志管理
默认的日志格式:main
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $request_body "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
......
$remote_addr
IP地址$request
请求方式$status
状态号$body_bytes_set
发送的字节$http_referer
上一个页面来自哪里$http_user_agent
用户代理/蜘蛛、被转发的请求原始ip。(浏览器和系统、rboot定义的baidu蜘蛛)$http_x_forwarded_for
:在经过代理时,代理把你的本来IP加载此头信息中,传输你的原始ip
可以在不同的虚拟主机引入
server{
access_log logs/host.access.log main;
.....
}
也可以像mian一样 在http里面自定义。
Shell脚本管理切割日志
代码示例
#!/bin/bash
LOGPATH=/usr/local/nginx/logs/access_www.log
BASEPATH=/root/bak_log/$(date -d yesterday +%Y%m)
if [ ! -d "$BASEPATH" ]; then
mkdir $BASEPATH
fi
bak=$BASEPATH/$(date -d yesterday +%d)_access_www.log
mv $LOGPATH $bak
touch $LOGPATH
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
注意写法:if 中间空格啥的,命令行的 date命令也可以这么用
shell下的判断示例
#!/bin/sh
myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"
#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath"]; then
mkdir "$myPath"
fi
#这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi
#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi
#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ]; then
echo "$myVar is empty"
exit 0
fi
#两个变量判断是否相等
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi
location参数匹配
虚拟主机的配置中,location是把url定位到服务的资源上的、而location也是有语法的
location的语法
location [=|~|~\*|^~] patt{ }
中括号可以不写任何参数,此时称为一般匹配、也可以写参数。
大类型一共可以为分3种
location = patt {}
[精准匹配]location patt {}
[一般匹配]location ~ patt {}
[正则匹配]
### 精准匹配 ###
默认html目录只有index.php
如果已经匹配成功,就停止继续向下搜索、并且立即返回结果
location = / {
root /var/www/html/;
index index.html
}
location / {
root html;
index index.php
}
上面会出现404 Not Found 这种有意思的事情。
这是因为你打www.solo365.cn的时候会被精准匹配到,因为访问 / 就等于访问 www.solo365.cn/index.html,而这时候精准匹配匹配www.solo365.cn/index.html不是正确的。
到了location /一般匹配这里。结果没有index.html所以出现 Not Found这种事情。
正则匹配
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
location ~ image {
root /var/www/image;
index index.html;
}
如果正则匹配成功将会把一般匹配覆盖。**
add_header
设置add_header 允许跨域访问。
语法:add_header name value [always];
作用域:http,server,location,if in location
Access-Control-Allow-Origin
location ~ /static{
add_header Access-Control-Allow-Origin http://www.solo365.cn;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
root /opt/app/code;
}
<html>
......
<script>
$.ajax({
type:"get",
url:"http://www.solo365.cn",
success:function(data){
alert("success");
},
error:function(){
alert("fail!!!");
}
})