大概两周的时间完成:
知识点:1.简单介绍
2.安装与启动
3.全局端配置信息
4.server段配置虚拟主机
5.日志管理
6.pathinfo配置
7. try_files介绍
8. 反向代理
9.集群与负载均衡
1.nginx介绍
是一款轻量级web服务器/反向代理服务器及电子邮件代理服务器
最牛逼的组合:lnmp(linux nginx mysql php)
2.安装与启动
1》安装
1)获取网址:http://nginx.org/download/
2) 安装依赖库:pcre 命令:yum install pcre pcre-devel
3)cd /usr/local/src(放置nginx包目录) wget nginx下载地址
4)tar xzvf nginx压缩包 cd nginx解压包 ./configure --prefix=/usr/local/nginx make && make install
5) yum 安装参考链接:https://blog.csdn.net/zph1234/article/details/51250523
2》 启动
源码安装命令
启动:nginx 测试 nginx -t 加载最新配置 nginx -s reload
立即停止:nginx -s stop
优雅停止:nginx -s quit(此停止所谓的优雅 指正在进行的nginx进程不受影响,会执行完成后再断开)
重新打开日志: nginx -s reopen (在日志需要备份时 在不断开服务器的情况下切换日志文件)
最好参考yum安装nginx
命令: 启动:systemctl start nginx 停止:systemctl stop nginx 重启:systemctl restart nginx
遇到的问题
默认端口号:80 如果启动失败 一般为端口被占用,用命令 netstat -anp | grep 80 停止占用的端口 或者修改nginx的端口,再次启动
3. 全局段配置信息
// 全局区
// 有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU,
// 一般设置为 CPU数*核数
worker_processes 1; // 正常就是(cpu个数)*(核数)
Events {
// 一般是配置nginx连接的特性
// 如1个worker能同时允许多少连接
worker_connections 1024; // 这是指 一个子进程最大允许连1024个连接
}
http { //这是配置http服务器的主要段
Server1 { // 这是虚拟主机段
Location { //定位,把特殊的路径或文件再次定位 ,如image目录单独处理
} /// 如.php单独处理
}
Server2 {
}
}
4. 基于域名的虚拟主机
server {
listen 80; #监听端口
server_name a.com; #监听域名,如有多个,空格隔开
location / {
root /var/www/a.com; #根目录定位
index index.html; #默认索引页
}
}
例子2: 基于端口的虚拟主机配置
server {
listen 8080;
server_name a.com;
location / {
root /var/www/html8080;
index index.html;
}
}
5. 日志管理:
我们观察nginx的server段,可以看到如下类似信息
access_log logs/access.log main;
这说明 该server, 它的访问日志的文件是 logs/host.access.log ,
日志格式”main”格式.
main格式是什么?
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
除了main格式,你可以自定义其他格式.
log_format mylog '$remote_addr [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
server {
listen 80;
#下面声明a.com使用mylog格式日志,并保存在logs/a.com.log文件中
access_log logs/a.com.log mylog;
server_name a.com www.a.com;
....
}
main格式是我们定义好一种日志的格式,并起个名字,便于引用.
以上面的例子, main类型的日志,记录的 remote_addr.... http_x_forwarded_for等选项.
日志格式 是指记录哪些选项
默认的日志格式: main
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
如默认的main日志格式,记录这么几项
远程IP- 远程用户/用户时间 请求方法(如GET/POST) 请求体body长度 referer来源信息
http-user-agent用户代理/蜘蛛 ,被转发的请求的原始IP
http_x_forwarded_for:在经过代理时,代理把你的本来IP加在此头信息中,传输你的原始IP
实际应用: shell+定时任务+nginx信号管理,完成日志按日期存储
分析思路:
凌晨00:00:01,把昨天的日志重命名,放在相应的目录下
再USR1信息号控制nginx重新生成新的日志文件
具体脚本:
#!/bin/bash
base_path='/usr/local/nginx/logs'
log_path=$(date -d yesterday +"%Y%m")
day=$(date -d yesterday +"%d")
mkdir -p $base_path/$log_path
mv $base_path/access.log $base_path/$log_path/access_$day.log
#echo $base_path/$log_path/access_$day.log
/usr/local/nginx/sbin/nginx -s reopen
定时任务
Crontab 编辑定时任务
01 00 * * * /xxx/path/b.sh
每天0时1分(建议在02-04点之间,系统负载小)
多行注释和取消注释
注释: :n1,n2s/^/#/g 取消注释: :n1,n1s/^#//g
6.pathinfo设置
nginx本身是不支持pathinfo 所以需要我们设置
1)如:url http://www.shen.com/index.php/home/index/index 如果我们没有开启pathinfo 则会报招不到 404 Not Found
解决:
修改这两处 则支持pathinfo ok
2)去掉index.php 让链接也可以用 这时需要用到nginx重写功能
在对应的地方添加对应的这几行代码 轻松搞定
7. try_files介绍
强大的try_files 直接替换掉第6部里的(1)(2)功能
完美解决 就是这么简单
8. 反向代理
反向代理 主要一个命令是proxy_pass 原理简单点说就是:配合location模块的正则匹配 匹配到相关模块 或 一类文件 然后用proxy_pass代理到对应的服务器上找到对应的文件或者目录
实现方式:
这个是实现了匹配到 baidu 会自动代理到百度页 (我们可以自己尝试着做下匹配图片格式 把图片放到另外一个服务器 然后代理到对应服务器上就ok 注意一点: 要加上http://)
9.集群与负载均衡
集群:就是多台服务器提供服务为集群
负载均衡:是多台服务器的压力要均衡(搭配负载均衡策略)
1)越是高大上的东西 越简单 (这是很多人的共识哦 这话不是我说的 不要打我)
2) 实现原理:nginx有个upstream模块,在这里我们要定义下自己的服务器 在location里用proxy_pass代理过来就ok
3) upstream daili {
server 192.168.1.108;
server 192.168.1.107;
}
在服务器后可以跟 weight=5(权重) fail_timeout=5s(超时失败时间) max_fails=3(失败重试词数) 。。。
location / {
root html;
index index.html index.htm;
proxy_pass http://daili;
}
4) 负载均衡策略:
1. 轮询(默认)
2. ip_hash
3. hash(根据url 参数 hash)
4.fail (第三方 根据服务器响应时间分配)
ok 如有疑问 请留言 (欢迎大家 批评指正)