创建笔记时间: | 2016/7/9 18:02 |
上传时间: | 2018/09/14 15:02 |
作者: | SU |
查看Nginx的进程:
ps aux | grep nginx
master:主进程,控制着子进程;
worker process:子进程;
HUP:优雅的改变配置文件,平滑的重读配置文件
ps aux | grep nginx 查询主进程号
kill -HUP 主进程号
kill -HUP pid
其中 pid 是进程标识。如果想要更改配置而不需停止并重新启动服务,请使用该命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。
更改/etc/ssh/sshd_config,将里面的Port改为新端口,比如28,然后 kill -HUP `cat /var/run/sshd.pid` 就行了。
现有连接自己不会断,因为kill -HUP `cat /var/run/sshd.pid` 只是HUP监听的那个,已经建立的连接(不同的 pid)不会断。
然后你在现有账号下面exit,在用新的端口登陆就可以了。
查看错误日志
tail 10 ./logs/error.log
Nginx的重启:
/usr/local/nginx/sbin/nginx -s reload
Nginx的停止:
/usr/local/nginx/sbin/nginx -s stop
Nginx的启动:
/usr/local/nginx/sbin/nginx
Nginx的重读日志
/usr/local/nginx/sbin/nginx -s reopen 相当于 kill -USE1 `cat logs/nginx.pid`
Nginx的优雅退出
/usr/local/nginx/sbin/nginx -s quit
测试配置文件是否出错:
/usr/local/nginx/sbin/nginx -t
nginx的配置:
worker_processes :auto # 工作的进程有几个,一般设置为cpu数* 核数
配置nginx的连接特性:
events
{
use epoll;
worker_connections 51200; // 指的是一个子进程最大允许51200个连接
multi_accept on;
}
nginx的日志管理:
总日志:access_log /home/wwwlogs/access.log access;
日志的分区:
shell 脚本文件:
#! /bin/bash
LOGPATH=/home/wwwlogs/pma.soft35.cn.log # 定义LOGPATH路径
#定义BASEPATH路径
BASEPATH=/home/wwwlogs/data/$(date -d yesterday +%Y%m)
#echo $BASEPATH
#创建当前目录 如果不存在
mkdir -p $BASEPATH
#定义bak路径
bak=$BASEPATH/$(date -d yesterday +%d%H%M).pma.soft35.cn.log
#移动基础日志文件到新的路径中
mv $LOGPATH $bak
#重新创建一份日志文件
touch $LOGPATH
#平滑加载配置文件
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
创建计划任务:crontab -e * */10 * * * sh /home/wwwlogs/pma.sh
Nginx的Location配置文件:
location = / { #精准匹配
root /var/www/html/;
index index.html;
}
location / { #匹配规则2
root /home/wwwroot/location.soft35.cn;
index index.php;
}
访问方式 :www.baidu.com
以上规则执行流程:
一、先通过精准匹配去 /var/www/html/下找index.html 如果没有 直接报告403错误,如果有则进行匹配规则2;
二、匹配规则2是去 /home/wwwroot/location.soft35.cn找 index.html文件,如果有index.html则报告403 否则加载index.html 而忽略掉index.php文件;
也就是发生了两次Location命中;
配置文件如果这样修改呢?
location = /index.html { # 精准匹配
root /var/www/html/;
index index.html;
}
location /index.html {
root /home/wwwroot/location.soft35.cn;
index index.php;
}
访问方式:www.baidu.com/index.html 会首先执行到精准匹配上
---------------------------------------------------------------------------------------------------------------------------------------------------------
Nginx的rewrite规则:
和Apache等web服务器软件一样,rewrite的主要功能是试下RUL地址的重定向, Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记
rewrite语法格式及参数语法说明如下:
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
关键字:其中关键字error_log不能改变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记
flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
rewrite参数的标签段位置:
server,location,if
例子:
rewrite ^/(.*) http://www.czlun.com/$1 permanent;
说明:
rewrite为固定关键字,表示开始进行rewrite匹配规则
regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。
flag部分 permanent表示永久301重定向标记,即跳转到新的http://www.czlun.com/$1地址上
regex 常用正则表达式说明
字符 | 描述 |
\ | 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$” |
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” |
+ | 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o” |
? | 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}" |
. | 匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式。 |
(pattern) | 匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要\(Content\) |
rewrite 企业应用场景
Nginx的rewrite功能在企业里应用非常广泛:
u 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。
u 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
u 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com
u 根据特殊变量、目录、客户端的信息进行URL调整等
Nginx配置rewrite过程介绍
(1)创建rewrite语句
vi conf/vhost/www.abc.com.conf
#vi编辑虚拟主机配置文件
文件内容
server {
listen 80;
server_name abc.com;
rewrite ^/(.*) http://www.abc.com/$1 permanent;
}
server {
listen 80;
server_name www.abc.com;
location / {
root /data/www/www;
index index.html index.htm;
}
error_log logs/error_www.abc.com.log error;
access_log logs/access_www.abc.com.log main;
}
或者
server {
listen 80;
server_name abc.comwww.abc.com;
if ( $host != 'www.abc.com' ) {
rewrite ^/(.*) http://www.abc.com/$1 permanent;
}
location / {
root /data/www/www;
index index.html index.htm;
}
error_log logs/error_www.abc.com.log error;
access_log logs/access_www.abc.com.log main;
}
(2)重启服务
确认无误便可重启,操作如下:
nginx -t
#结果显示ok和success没问题便可重启
nginx -s reload
(3)查看跳转效果
打开浏览器访问abc.com
页面打开后,URL地址栏的abc.com变成了www.abc.com说明URL重写成功。