Nginx服务可接受的信号

信号作用
TERM或INT快速停止Nginx服务
QUIT平缓停止Nginx服务
HUP使用新的配置文件启动进程,之后平缓停止原有进程,也就是所谓的“平滑重启”
USR1重新打开日志文件,常用于日志切割
USR2使用新版本的Nginx文件启动服务,之后平缓停止原有Nginx进程,也就是所谓的”平滑升级”
WINCH平缓停止worker process用于Nginx服务器平滑升级

使用方法

kill -HUP 进程号

kill -HUP $(cat /log/nginx.pid)

nginx

其他的命令一样 : 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命令也可以这么用

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;
}

如果我们访问 http://xx.com/image/logo.png 此时, “/” 与”/image/logo.png” 匹配 同时,”image”正则 与”image/logo.png”也能匹配,正则表达式的成果将会使用. 图片真正会访问 /var/www/image/logo.png 。
如果正则匹配成功将会把一般匹配覆盖。**

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!!!");
 }
})
Last modification:January 8, 2020
如果觉得我的文章对你有用,请随意赞赏