nginx基础
1. nginx安装
1.1 常用版本
- Nginx开源版:http://nginx.org/
- Nginx plus商业版:https://www.nginx.com
- Openresty:http://openresty.org
- Tengine:http://tengine.taobao.org/
- lnmp集成运行环境:oneinstack.com
1.2 下载nginx常用版
下载nginx-1.20.2.tar.gz文件,并解压指定目录:tar -zxvf nginx-1.20.2.tar.gz -C /export/server/
安装gcc:yum install -y gcc
安装pcre库:yum install -y pcre pcre-devel
安装zlib库:yum install -y zlib zlib-devel
安装OpenSSL:yum install -y openssl openssl-devel
使用configure方式配置nginx,安装在指定位置:./configure --prefix=/export/server/nginx
编译:make
安装:make install
1.3 启动Nginx
cd /export/server/nginx/sbin
./nginx 启动
./nginx -s stop 快速关闭
./nginx -s quit 优雅关闭
./nginx -s reload 重新加载配置
1.4 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
1.4.1 关闭selinux
vim /etc/selinux/config
SELINUX = disabled
1.5 安装成系统服务
创建脚本:vi /usr/lib/systemd/system/nginx.service
重新加载系统服务:systemctl -daemon-reload
启动服务:systemctl start nginx.service
开机自启:systemctl enable nginx.service
2. nginx介绍
nginx优点
- 速度快,并发高:和其他web服务器比,nginx采用多进程和IO多路复用epoll底层实现
- 配置简单,扩展性强:由多模块组成,还可添加第三方模块,定制化开发。
- 高可靠性:由一个master主进程和N个worker进程提供服务。
- 热部署:nginx不停止服务下进行文件升级,更新配置和更换日志文件
- 成本低,BSD许可证:
2.1 基础使用-目录结构
conf:配置文件,html:静态文件(html,css),sbin:nxinx主程序
2.2 基础运行原理
多进程来完成用户请求,主进程master负责协调子进程worker读取配置文件和响应请求。
2.2 nginx配置文件
worker_processes 1; #默认1,表示开启一个业务进程
events {
worker_connections 1024; #单个业务进程可接受连接数
}
http {
include mime.types; #引入http mime类型(具体的文件类型,用于前端判断是什么文件),在conf中可查看详情
default_type application/octet-stream; #如mime类型没匹配上,使用二进制流方式传输
sendfile on; #使用linux的sendfile(socket,file,len)高效网络传输,即数据0拷贝
keepalive_timeout 65;
#虚拟主机
server { #一个server代表一个主机
listen 80;
server_name localhost; #域名或主机名
location / { #uri资源
root html; #用于与uri匹配的相对路径(对nginx路径)
index index.html index.htm; #默认页
}
error_page 500 502 503 504 /50x.html; #服务器错误转发页面
location = /50x.html {
root html;
}
}
}
2.3nginx信号控制
- nginx中的master和worker进程
- nginx的工作方式
- 如何或取进程的PID
- ps -ef | grep nginx
- 在/usr/local/nginx/logs/nginx.pid
- 信号有哪些?
TERM\INT:立即关闭整个服务
QUIT:“优雅”的关闭整个服务
HUO:重读配置文件并使用服务对新配置生效
USR1:重新打开日志文件,可以用来切换日志
USR2:平滑升级到最新版的nginx,发送信号给master,整个系统会有2个master,新的master进程PID会替换旧的PID,旧的PID会记录在nginx.pid.oldbin中,接着再发送QUIT信号给master进程,让其处理完请求后再关闭。
WINCH:所有子进程不在接收处理新连接,相当于给work进程发送QUIT指令 - 如何通过信号控制nginx的启停等相关操作?
kill -sginal(信号) PID
2.4 使用nginx服务信号进程升级
- 将旧版本的sbin下的nginx进行备份 mv nginx nginxold
- 将新版本安装编译后的objs目录下的nginx文件拷贝到旧/nginx/sbin下 cp nginx /usr/local/nginx/sbin
- 发送信号USR2给nginx旧版本对应的master进程 kill -USR2
more /usr/local/logs/nginx.pid
- 发送信号QUIT给nginx旧版本对应master进程 kill -QUIT
more /usr/local/logs/nginx.pid.oldbin
3 虚拟主机与域名解析
3.1 域名、dns、ip地址的关系,浏览器、nginx与http协议
3.2 虚拟主机原理,域名解析,反向代理,负载均衡
把一台主机共享出来,一个ip对应多个域名。由nginx判断访问的具体域名指向不同站点的目录。
windows本机测试:C:\Windows\System32\drivers\etc目录下修改hosts(管理员权限打开)
centos7yum安装ngixn默认配置文件地址:cd /etc/nginx/
获取通过find / -name nginx.conf 查找nginx目录
worker_processes 1;
events {worker_connections 1024;}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 反向代理+负载均衡(weight代表权重,down代表不参与,backup:备用机)
upstream httpds{
server 192.168.88.88:89 weight=8 down; #代理本机89端口
server 192.168.88.111:80 weight=2; #代理集群中子服务器的80端口
server 192.168.88.88:88 weight=1 backup; #代理本机88端口
}
server{
listen 88;
server_name localhost;
location / {
root /www/vod;
index index.html index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server{
listen 89;
server_name localhost;
location / {
root /www/www;
index index.html index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://httpds; #反向代理
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
负载均衡策略:
weight(权重),ip_hash(基于iphash),least_conn(最少连接访问),url_hash(url转发),fair(根据响应时间转发)
注意:weight策略不会保持会话
3.3 动静分离,URLRwrite
静态文件前置到nginx本地。
Urlrewrite实现URL重写指令:
rewrite <regex正则> [flag]
rewirte参数标签段位置:server,location,if
flag标记说明:
last本规则匹配后,继续向下匹配新的location uri规则
break本规则匹配完终止
redirect返回302临时重定向,浏览器地址会显示跳转后的url地址
permanment返回301永久重定向,浏览器显示跳转后的url地址
location / {
rewrite ^/([0-9]+).html$ /index.jsp?pageNum=2 break; #url重写,隐藏真实请求pageNum=2
proxy_pass http://tomcat; #可配合upstream httpds做负载均衡
}
location ~*(js|img|css) { //通配符
root html;
index index.html index.html;
}
3.4 防盗链
http协议中的referer:在第二次请求本站点时请求头携带referer参数判断是否当前主机。
valid_referers none | blocked | server_names | strings …;
- none检测referer头域不存在的情况
- blocked检测referer头域值被防火墙或代理删除或伪装的情况。不能以http://或https://开头
- server_names设置一个或多个URL,检测referer头域值是否是这些URL中的某一个
location ~*/(js|img|css){
valid_referers 192.168.88.101; #检测referers来源网址
if($invalid_referer) { ##无效的引用返沪403
retrurn 403;
}
}
使用浏览器或curl检测:
-e:引用信息 -I:只返回响应头信息
带引用:curl -e “http://baidu.com” -I http://192.168.88.101/img/log.png
返回错误页面修改:
error_page 401 /401.html;
location = /401.html {
root.html;
}
整合rewrite返回报错图片:
valid_referers none 192.168.88.101;
if($invalid_referer) { ##无效的引用返沪403
retrurn ^/ /img/x.png break;
}
3.5 高可用
keepalived实现虚拟ip在多台机器上漂移。
安装:yum install -y keepalived
配置:/etc/keepalived/keepalivedconf
master配置:
global_defs {
route_id lb111
}
vrrp_instance xuyu { #实例名称
state MASTER #master
interface ens33 #ip addr网卡名称
virtual route_id 51
priority 100 #竞选优先级
advert_int 1 #检测间隔时间
auhentication { #组认证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress{
192.168.88.200 #漂移ip地址
}
}
slave配置
global_defs {
route_id lb110
}
vrrp_instance xuyu { #实例名称
state BACKUP
priority 50 #竞选优先级
...其余配置同上
}
3.6 Https证书配置
不安全的Http协议:
对称加密:先拿到解密算法,再进行传输
非对称加密:先走443端口拿到公钥,再传输密文(公钥+算法),对端再拿私钥解开得到明文,回程则私钥加密,公钥解密,且公钥加密,公钥解不开
Https原理:
- CA机构
- 证书
- 客户端(浏览器)
- 服务端
证书自签名:
OpenSSL(SSL协议库,应用程序和密码算法库)
图形化工具XCA
在线证书申请:
先申请证书-再上传到nginx目录下-证书安装
nginx.conf证书安装:
server {
listen 443 ssl;
server_name aa.abc.com;
ssl_certificate xxx_www.aric.com.pem;
ssl_certificate_key xxx_www.aric.com.key;
}
http协议跳转https:
server {
listen 80;
server_name www.aric.com aric.com;
return 301 https://$server_name$request_uri;
root html;
}