2_企业级Nginx使用-day1
企业级Nginx使用-day1
一、重装和升级
在实际业务场景中,需要使用软件新版本的功能、特性。就需要对原有软件进行升级或者重装操作。
旧statble 稳定版 1.12
stable 稳定版 1.16
mainline 主线版本 最新的 1.15
1、信号参数
Kill 命令 传输信号给进程
TERM, INT(快速退出,当前的请求不执行完成就退出)
QUIT (优雅退出,执行完当前的请求后退出)
HUP (重新加载配置文件,用新的配置文件启动新worker进程,并优雅的关闭旧的worker进程)
USR1 (重新打开日志文件)
USR2 (平滑的升级nginx二进制文件 拉起一个新的主进程 旧主进程不停止)
WINCH (优雅的关闭worker进程)
语法:
Kill 选项参数 pid
##关闭nginx
##快速关闭
kill -INT pid
##优雅关闭
kill -QUIT pid
2、重新安装
①停止掉服务,删除编译的安装的软件包和源码包
②重新解压编译安装即可
注意:如果有需要,请备份配置文件和网站目录里的资源文件
3、平滑升级
升级软件版本之后,需要启动新的版本,启动不了,端口已经被占用
如果直接把旧版本的服务停止掉,会影响线上业务的使用
最佳解决办法:
①旧的不先停掉
②新的又可以起来
③旧的和新的同时提供服务,旧的请求完成之后,就停掉旧进程
-USR2 平滑启动一个进程(平滑升级)
-WINCH 优雅的关闭子进程
-QUIT 优雅关闭主进程
①编译安装新版本
shell > tar xvf nginx-1.16.0.tar.gz
shell > cd nginx-1.16.0
shell > ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
shell > make && make install
升级新版本,需要把软件的安装路径,指定到旧版本上。
以上操作完成之后,会把原来的旧版本备份为nginx.old
②新旧版本同时运行
shell > kill -USR2 主进程号
③停止掉旧进程
查看旧的主进程号,并使用kill -WINCH 优雅的关闭的子进程,再关闭旧的主进程
shell > kill -WINCH 旧的主进程号
shell > kill -QUIT 旧的主进程号
4、配置文件介绍
编译的nginx默认的配置文件位置
核心数、连接数、并发理论值
重点掌握以下配置
==http=>server=>location==
http 配置里有一个,可以有多个server(apache的vhost)
一个server里,可以有多个location
二、企业中常见使用方式
##1、server配置
###1.1、基于域名虚拟机(最多)
在实际生产业务环境中,一台web服务器,需要使用多个网站部署。搭建vhost虚拟机主机实现不同域名,解析绑定到不同的目录。
核心语法
#基于http的web服务
server{
#服务端口
listen 80
#绑定域名或者IP
server_name web1.devops.com 192.168.17.241
# 网站访问目录 资源目录
root html/web1;
# / 匹配了所有的url
location / {
#index 从前往后找 如果找不到就403了
index index.php index.html index.htm
}
#php页面 需要php(php-fpm)解析为html
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
①编辑配置文件,增加server段配置
注意:每行配置完成之后,一定要注意结束标记符号;
②解析host域名,建立网站目录及其文件
建立目录并且创建一个文件
shell > cd /usr/local/nginx/html
shell > mkdir web1
shell > vim index.html
写一些测试内容
③重载配置测试访问
配置修改之后,需要检测配置,然后重载配置
实现效果
###1.2、基于IP虚拟机
多个IP访问同一台服务器主机,不同的IP解析到不同的vhost虚拟机中
①eth0绑定多个IP地址(选做一个临时绑定ip或者配置文件绑定ip)
复制eth0,修改关键项为eth0:0
注意:如果是通过桌面安装的linux,启动了NetworkManager服务,需要关闭,才可以在配置文件里绑定虚拟网卡。
可以使用临时绑定一个虚拟网卡ip
shell > ifconfig eth0:1 192.168.93.180
②启动新配置,查看IP是否绑定成功
③配置基于IP的虚拟机
建立一个ip网站的目录
检测配置文件,重载配置
shell > service nginx reload
###1.3、基于端口虚拟机
默认不占用80端口,能够稍微隐秘一些
①建立网站目录
②建立虚拟机修改配置
当访问的域名或者IP没有匹配到对应的server虚拟机时,会默认访问第一个server虚拟机。
##2、案例:上线商城项目
①上传项目文件到服务器
将项目文件ftp sftp scp等工具上传到服务器
把项目压缩包解压
shell > unzip tp5shop.zip
②配置server虚拟机,客户端配置host解析
shell > vim /usr/local/nginx/conf/nginx.conf
③创建数据库,导入数据迁移文件
遇到以下问题:数据没有导入,没有配置项目连接数据库
mysql > create database tp5shop;
mysql > use tp5shop;
mysql > source /usr/local/nginx/html/tpshop.sql
④配置项目连接数据库
⑤测试访问
遇到问题:项目需要在runtime文件夹中写入缓存信息(需要写权限)
分析:
①nginx 读取静态文件 用户www
②php-fpm 读取、写入、解析php文件 用户www
应该把runtime目录的所属关系赋予www
shell > cd /usr/local/nginx/html/tp5shop
shell > chown -R www:www ./runtime
项目效果预览图
##3、默认官方模块
###3.1、Gzip压缩
压缩文件大小变小了,传输更快了。目前市场上大部分浏览器是支持GZIP的。IE6以下支持不好,会出现乱码情况。
http://nginx.org/en/docs/http/ngx_http_gzip_module.html
图片、css(层叠样式表)、js(浏览器端执行的脚本)文件
①配置实现
注意:jpg格式结尾的图片,需要jpeg识别
②测试看返回信息
3.2、客户端缓存
B/S架构里 browser浏览器 就是客户端
告知浏览器获取的信息是在某个区间时间段是有效的。
location ~ \.(js|css)${
expires 1h;
}
#单位参数 d day 天|H hour 小时
3.3、反向代理
正向代理
特点:知道自己使用了代理,需要填写代理服务器的IP等相关连接信息
==常见于代理客户端上网等操作。==
反向代理
特点:用户是无感知的,不知道使用了代理服务器。反向代理服务器是和真实访问的服务器是在一起的,有关联的。
作用:可以根据实际业务需求,分发代理页面到不同的解释器
可以隐藏真实服务器的路径
==常见于代理后端服务器==
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
①配置反向代理
LNMPA
把php的请求转发到httpd:8080端口进行处理
把nginx或者apache网站目录路径一致
注意修改apache的配置文件
==验证例子:==
①安装httpd 需改端口8080
shell > yum install -y httpd
shell > vim /etc/httpd/conf/httpd.conf
②配置nginx的server并进行转发
3.4、基于IP的访问控制
基于ngx_http_access_module模块,默认可使用
语法:
deny ip 禁止ip访问
allow ip 允许访问
默认是允许所有访问的
3.5、基于用户的访问控制
基于ngx_http_auth_basic_module模块,默认可用
语法:
加密文本: 由htpasswd命令实现
htpasswd httpd里的一个工具 如果没有 可以通过yum install httpd-tool
创建密码文件:htpasswd -c 生成到的路径 用户名
-c 创建新文件,如果再次添加用户去掉-c参数,否则会被删除覆盖原来的
auth_basic “提示信息”
auth_basic_user_file /etc/nginx/htpasswd;
实现:
①配置实现
auth_basic_user_file 需要写入文件的绝对路径
②测试查看
3.6、目录列表显示
三、日志管理
Nginx里默认会有两种日志
access.log 访问日志 查看统计用户的访问信息 流量
error.log 错误日志 错误信息 重写信息
http://nginx.org/en/docs/http/ngx_http_log_module.html
默认路径 /usr/local/nginx/logs
yum安装默认的日志目录 /var/logs/nginx
1、访问日志
①查看access.log
shell > cd /usr/local/nginx/logs
shell > cat access.log
②查看配置解析参数说明
shell > vim nginx.conf
参数 | 意义 |
---|---|
$remote_addr | 客户端的ip地址(代理服务器,显示代理服务ip) |
$remote_user | 用于记录远程客户端的用户名称(一般为“-”) |
$time_local | 用于记录访问时间和时区 |
$request | 用于记录请求的url以及请求方法 |
$status | 响应状态码,例如:200成功、404页面找不到等。 |
$body_bytes_sent | 给客户端发送的文件主体内容字节数 |
$http_user_agent | 用户所使用的代理(一般为浏览器) |
$http_x_forwarded_for | 可以记录客户端IP,通过代理服务器来记录客户端的ip地址 |
$http_referer | 可以记录用户是从哪个链接访问过来的 |
访问日志,可以统计分析用户的流量的相关情况。客情分析
2、错误日志
默认记录配置启动错误信息和访问请求错误信息
错误日志的作用:用来查看错误信息,通过提示的错误信息,排除错误。
3、基于域名日志分割
①开启日志的定义规则
②重启nginx测试查看