下载nginx-1.20.2.tar.gz文件,并解压指定目录:tar -zxvf nginx-1.20.2.tar.gz -C /export/server/
安装gcc:yum install -y gcc
安装perl库:yum install -y pcre-devel
安装zlib库:yum install -y zlib zlib-devel
使用configure方式配置nginx,安装在指定位置:./configure --prefix=/export/server/nginx
编译:make
安装:make install
cd /export/server/nginx/sbin
./nginx 启动
./nginx -s stop 快速关闭
./nginx -s quit 优雅关闭
./nginx -s reload 重新加载配置
systemctl stop firewalld.service
systemctl disable firewalld.service
创建脚本:vi /usr/lib/systemd/system/nginx.service
重新加载系统服务:systemctl -daemon-reload
启动服务:systemctl start nginx.service
开机自启:systemctl enable nginx.service
conf:配置文件,html:静态文件(html,css),sbin:nxinx主程序
多进程来完成用户请求,主进程master负责协调子进程worker读取配置文件和响应请求。
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;
}
}
}
把一台主机共享出来,一个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策略不会保持会话
静态文件前置到nginx本地。
Urlrewrite实现URL重写指令:
rewrite
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;
}
http协议中的referer:在第二次请求本站点时请求头携带referer参数判断是否当前主机。
valid_referers none | blocked | server_names | strings …;
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;
}
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 #竞选优先级
...其余配置同上
}
不安全的Http协议:
对称加密:先拿到解密算法,再进行传输
非对称加密:先走443端口拿到公钥,再传输密文(公钥+算法),对端再拿私钥解开得到明文,回程则私钥加密,公钥解密,且公钥加密,公钥解不开
Https原理:
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;
}