Nginx安装配置
nginx安装配置笔记
1.操作系统 centos7
2.下载安装方式
rpm包
yum工具自动化安装
获取源代码,手动编译安装nginx(指定安装路径,额外开启nginx第三方功能)
3.选择nginx编译安装,那么解决gcc,make编译工具
使用yum配置前必须确定配置好了yum源
-- cd /etc/yum.repos.d/
步骤1确保有wget命令
yum install waget -y
步骤2先备份旧的yum源
mkdir /etc/yum.repos.d/repobak
mv /etc/yum.repos.d/* /etc/yum.repos.d/repobak
#如上的操作,就是使得在yum仓库的一层目录,没有任何repo文件,因此就实现了linux就没有yum源了,此时没有yum源,需要在配置一个新的repo仓库
可以访问阿里云的镜像https://developer.aliyun.com/mirror/
#清空旧的yum缓存
yum clean all
#生成新的yum云的缓存,加速下次下载
yum mekecache
yum install -y gcc gcc-c++ autoconf automake make
#安装使用nginx还得安装一些第三方库,比如nginx的静态资源压缩功能需要的 gzi,lib ,nginx需要支持url重写需要的pcre库(perl开发的),以及nginx搭建加密站点https,所以需要的openssl依赖库等
yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel wget http-tools vim
#安装完毕nginx所需的基础依赖库,还得检查防火墙是否关闭,selinux是否关闭,yum配置,网络情况等等
看防火墙是否关闭
iptables -L
selinux是否关闭
gentenforce
编译安装ngnix
1.下载程序源代码 从nignx下载的是源代码
cd /opt
wget url
还可以淘宝nginx
2.解压缩
tar -zxvf 压缩包名
3.进入源代码目录下,准备开始编译安装
查看有哪些目录
4.准备编译三部曲
第一:进入软件源代码目录,执行编译脚本文件,如指定安装路径
首先查看编译文件
执行编译脚本文件,释放makefile
./configure --prefix=url
第二: 直接开始下一步安装 make命令
第三: make install
5 查看可执行nignx目录 进入 再ls
6.若是直接执行ngnix命令默认是代表启动nginx进程 如果报错没有找到nginx命令
6.1 编写一个nginx的专属环境变量,创建一个
cat /etc/profile.d/nginx.sh
编辑:export PATH="$PATH:/opt/可运行名/sbin/"
7.推出当前会话,重新登录,系统默认加载/etc/profile.d下的所有环境变量
8.此时可以开解的使用nginx各种命令可
nginx #首次直接输入nginx 表示启动该进程,如果你再次启动则报错,端口被占用
可以先停止 nginx -s stop
如果不想重启,直接重新加载配置文件,nginx提供了一个reload功能,可以在不重启该服务
nginx -s reload
9.检查nginx的配置星系
nginx -v
Nginx配置文件语法
-
全局指令
-
局部指令
-
hhtp{}语句块,核心功能
-
server{}语句块,注意大括号的闭合{}
-
location{},对应一个url
-
upstream{},定义上有服务器
-
注意要更改配置文件记得备份 cp 文件名 备份文件名
- nginx.conf是由指令和指令块组成
- 每行语句都由;结束
- 指令和参数之间由空格分隔
- 指令块可以由大括号组织多条语句
- #表示注释符
- nginx支持用$变量名,支持该语法
- nginx支持include语句
- nginx部分指令支持正则表达式。如重写指令
Nginx命令行
1.nginx启停命令 -s参数 指的是给nginx进程发送某种信号
nginx #初次启动直接输入nginx,如启动后再执行该命令,就会提示端口冲突(解决方案1:停止nginx,在启动)
nginx -s stop #停止nginx进程
nginx -s reload #平滑启动,利用reload可以在不重启nginx进程的情况下,重新读取配置文件
2.查看nginx的帮助信息
nginx -h/-?
nginx信号传递
配置文件重读
1.检查当前的nginx进程
ps -ef|grep nginx
2.修改nginx.conf修改配置参数
3.重新加载nginx配置
nginx -s
nginx-master信号传递
1.信号先发送给主进程,主进程不处理请求,而是分配发给worker进程,主进程负责重启,热加载,热部署等
2.master是根据nginx.conf中 worker——process定义启动创建的工作进程数
3.当worker运行后,master就处于一个等待的状态,等待用户的请求来临或者系统信号
4.系统管理员可以发送kill指令,或者nginx -s信号,这样的形式操控nginx
nginx信号集
nginx -s 对应的信号功能如下
参数 信号 含义
stop TERM 强制关闭nginx服务
null INT 强制关闭整个nginx
quit OUt 优雅的关闭整个(会等待任务结束后)
reopen USER1 重新打开日志记录
reload HUB 重新读取文件,并且优雅的退出旧的worker
Nginx热部署功能
nginx作为一个优秀的web服务器,优秀的反向代理服务器,并且nginx也支持高可用的特性,nginx还支持热部署的特点
热部署的特点:在不重启或者关闭进程的情况下,新的应用直接替换旧的应用
更换nginx的二进制命令版本
热部署大致流程
1.备份旧的二进制文件 备份nginx命令,/opt/tng232/sbin/nginx
2.编译安装新的二进制文件,覆盖旧的二进制文件,(再装一个版本的nginx,且替换旧的nginx命令)
3.发送USR2信号给旧的master进程
4.发送WINC信号给旧的master进程
5.发送QUIT信号给旧的master进程
环境准备
1.准备旧的nginx版本
2.准备新的nginx版本
nginx工作模式master-worker
刚才所涉及的nginx支持reload重载,仅仅是nginx的master进程,不会更改已经建立的worker,只会等worker处理完毕之后,杀死旧的然后再从新的配置文件中,运行新的worker
nginx还提供了热部署功能,特点:在不影响用户体验下,进行软件版本升级
Nginx日志
日志切割
du -h .
线上常见操作,能够控制单个日志大小
给日志文件重命名 mv 旧名 新名
发送信号给nginx主进程,给他发送一个新的信号
nginx -s reopen #这个命令等同于 kill -USR1 ‘cat nginx,pid’
注意在以上的nginx重命名日志切割链,不要着急立即对文件修改,而是要等待几秒钟,因为nginx的工作模式特点,master下发指令给worker干活
生产环境下,日志切割主要是定时任务来进行操作
编写一个定时日志切割脚本
vim cut_nginx_log.sh #写下内容
crontab -e #打开定时任务
0 0 * * * /bin/bash /myscript/cut_nginx_log.sh(脚本地址)
虚拟主机
虚拟主机指的就是一个独立的站点配置,是nginx默认支持的一个功能,他能有自己独立的域名,独立的ip,独立的端口配置,能够配置完整的www服务,例如网站搭建,ftp服务搭建,邮件服务带那里等等
并且nginx支持多虚拟主机,可以在一台机器上,同时运行多个网站的功能
nginx多虚拟主机,可以基于
- 多域名形式
- 多ip形式
- 多端口形式
利用虚拟主机的功能,就不用为了运行一个网站,而单独配置一个nginx服务器,或者单独在运行一组nginx进程
利用nginx的多虚拟主机配置,我们就可以基于一台服务器,一个nginx进程,是心啊多个站点的配置
在nginx配置文件中可以配置多个server{}一个server可以理解为一个网站,默认是自上而下的匹配规则(如果没有定义其他规则,默认顶一个)
server中的
- listen 定义虚拟主机中的端口号,也是用户访问网站的入口
- servername 域名配置 有域名写域名 没有域名写localhost或者_
- charset 给nginx定义网站编码
- location nginx的路劲匹配规则
Nginx静态资源压缩
nginx支持gzip压缩功能
1.首先确保有nginx
2.准备静态数据
3.开启nginx的压缩功能,在http{}配置东打开如下参数
gzip on;
gzip_http_version 1.1;
gzip_comp_level;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript
application/x-http-php image/jpeg image/gif image/png;
Nginx基于IP的多虚拟主机
v server
环境的准备
1.准备好linux虚拟机,以及配置好三个IP地址
ipconfig ens33:1 192.168.178.145 netmask 255.255.255.0 broadcast 192.168.178.255 up
ipconfig ens33:2 192.168.178.146 netmask 255.255.255.0 broadcast 192.168.178.255 up
添加多个server{}标签,让nginx支持基于ip的多虚拟主机,返回多个站点内容
1.给nignx添加include包含语法,让其他目录下的配置文件参数,导入到nignx.conf中,这样的写法,能够让nginx每一个配置文件看起来更简洁,更清晰
修改nignx.conf ,在http{}标签中的最后一行,添加如下参数(extra文件夹和nginxconf文件夹相对)
include extra/*.conf;
2.在extra目录下,添加多个基于ip的虚拟机主键配置
可以像如下规划的形式,来编写nginx
Nginx基于多域名的虚拟主机配置
基于多ip的虚拟主机,用的还是不多,还可能造成IP不足的问题,一般如果没有特殊需求,用的更过的是基于多域名的虚拟主机
前提使用条件,要么配置dns服务器,将你想用的域名解析到对应的ip
使用本地的hosts文件,进行本地测试访问
多域名配置结合nignx,就是先了解多虚拟机的访问,解决了可能IP不足的问题
1.环境准备,先在客户端本地,修改hosts文件信息
macos /etc/hosts文件里面
windows c盘里面的hosts文件
2.修改host文件,添加如下信息,注意这里是客户端本地添加的域名
3.修改服务端的nginx命令
4.进行nginx重启
5、分别准备三个域名的虚拟主机站点资料
6.生成三个内容
7.通过客户端浏览器访问
基于多端口虚拟主机配置
修改nginx.conf中
server{}标签里面 定义端口
Nginx多虚拟主机日志定义
不同ip,不同端口,不同域名 都能访问到一台计算机内
针对每一个虚拟主机都配置好access.log
编辑对应的server{}
加上access_log log的路径
Nginx之Access日志功能
Nginx开启日志功能只需要在nginx.conf里面找到log_format参数,定义日志的格式,以及定义日志的存储位置以及日志的格式,路径,缓存大小
-
$remote_addr 记录访客的客户端ip地址
-
$remote_user 记录远程客户端的访客用户名
-
time_local 记录访问时间和地区信息
-
request 记录用户的http请求首行信息
-
$status 记录用户http请求的状态
-
$body_bytes_sent 记录服务器发给客户端的响应体数据字节大小
-
$http_referer 记录本次记录请求是从哪个链接过来的,可以根据refer信息来进行防盗链信息
-
$http_user_agent 记录客户端的访问信息,如浏览器信息,手机浏览器信息
-
“$http_x_forwarded_for” 捉到藏在代理服务器后面的真实客户端的ip信
Nginx目录浏览功能
将机器上的目录资料,提供一个展示功能
修改nginx.conf
在localtion中加
autoindex on;
Nginx状态信息功能
nginx提供了status模块,用于检测niginx的请求连接信息,这个功能需要在编译安装nginx的时候,添加–with-http-stud-status_module参数,才能使用
nginx -V 检查nginx
当支持status功能,我们可以添加一个conf配置文件,用于检查状态页的功能
创建一个status.cof放在extra目录下
1.确保你的nginx.conf主配置文件,支持include语法
include extra/*.conf支持include语法
2.创建status.conf
3.修改status 添加如下内容
server{
listen 85;
location /{
stub_status on;
access_log off;
}
}
4.检查nginx -t
nginx -s reload
1.安装ab命令
yum install httpd_tools -y
2.使用ab对nginx发送大量数据
-n 请求数量
-c 请求并发数
-k
Nginx错误日志
nginx想要使用error_log就得打开nginx.conf找到关键字参数error_log,他是放在http{}称为全局的变量参数,针对所有的server{}虚拟主机生效
也可以单独的写在虚拟主机中,单独记录某一个虚拟主机的错误日志
错误日志语法
error_log file level;
日志级别
debug info notice warn error crit alter emerg 级别越来越严重级别越低越详细
生产常用warn +后面三个
Nginx之location匹配机制
location相关语法
location [=|~|~*|^~] url{
#做出相应的动作
}
#nginx有关location的匹配 符号如下
= 精准匹配
^~ 以某个字符开头
~* 支持正则匹配模式
/blog/ 访问的路径需要含blog
/ 通用匹配,不符合其他的location的匹配规则
Nginx的url地址重写功能
Nginx的url地址重写功能,主要是使用nginx提供的rewrite功能,且支持正则表达式
rewrite能够实现url的跳转,实现url规范化,根据请求的变量实现url实现跳转等等,基于url重写功能常见的效果如下
- 对于爬虫程序的封禁,让其跳转到一个错误页面
- 动态的url,伪装成静态的网页,便于搜索引擎的抓取
- 新旧域名的更换,替换
rewrite语法
rewrite ^(.*) http://192.168.178.134/$1 permanent;
rewrite结尾语法
- Last 规则匹配完成后,继续向下匹配的location
- break 本条规则匹配后,立即停止匹配动作
- Redirct 返回302临时重定向状态码,浏览器地址栏显示跳转后的url 爬虫不会更新url
- permanent 返回301永久重定向,浏览器地址栏也显示跳转后的url 爬虫更新网站url
last和break用于实现url重写,浏览器地址栏不会发生变化
redirect和permanent也是用于url跳转,浏览器地址栏发生变化,跳转新的url地址栏
Ngnix认证模块
nginx提供了认证模块,语法是
location / {
auth_basic 'string';
auth_basic_user_file conf/htpasswd;
}
~~~
linux提供了密码生成命令
hroasswd时apache提供的密码生成工具,nginx也支持quth——basic模块,因此我们可以利用htpasswd命令账号密码,提供给nginx去使用
yum install httpd-tools -y
#语法
htpasswd -bc .access username password
#解释
-b 在命令行中输入 账号密码
-c 创建密码文件
username
password
默认 .access文件采用加密方式md5来验证
~~~
实际操作案例
1.准备一个用于练习认证模块的配置文件