1 环境配置(虚拟环境)
1.1 配置静态ip
# 虚拟机启动centos后,修改配置静态IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改配置
BOOTPROTO="static"   # dhcp修改为static
# 增加配置如下
IPADDR=192.168.126.139
NETMASK=255.255.255.0
GATEWAY=192.168.126.1
DNS1=8.8.8.8

# 重启网络服务
systemctl restart network
1.2 虚拟机上网
# ping www.baidu.com  ping不通无法上网

# 查看虚拟机网关设置
点击虚拟机 workstation --> 编辑 --> 虚拟网络编辑器 --> 更改配置(授予更高的权限)  --> 选择VMnet8 NAT模式 --> 点击NAT设置 --> 查看网关ip --> 修改1.1中网关配置 --> 重启网络服务

GATEWAY=192.168.126.2
2 Nginx安装
2.1 安装包下载
# 下载安装包
http://nginx.org/download/
# 选择 nginx-1.21.6.tar.gz  

# 解压
tar -zxvf nginx-1.21.6.tar.gz
2.2 安装及依赖
# c编译器gcc,查看版本
gcc -v 
# 如果没有,则需要安装
yum install -y gcc

# 安装nginx
cd nginx-1.21.6
./configure --prefix=/usr/local/nginx   # 安装到/usr/local/nginx

# 缺少PCRE library
yum install -y pcre pcre-devel

# 缺少zlib library
yum install -y zlib zlib-devel

# 再次安装nginx
./configure --prefix=/usr/local/nginx 
make
make install
2.3 启动
cd /usr/local/nginx/sbin
# 启动
./nginx

# 浏览器访问
192.168.126.139

# 如果连接不通,关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

# 快速停止
./nginx -s stop
# 关闭连接后停止
./nginx -s quit
# 重启
./nginx -s reload
3 nginx配置
3.1 简单运行原理
nginx启动,master主进程读取配置文件,开启多个work子进程,子进程处理请求
3.2 nginx.conf
# work进程数量,一般对应cpu核数
worker_processes  1;

events {
	# 每个work进程可以开启的连接数量
    worker_connections  1024;
}

http {
	# 引入文件类型
    include       mime.types;
    # 默认文件类型
    default_type  application/octet-stream;
	
	# 数据零拷贝,网络接口去读文件
    sendfile        on;
    # 保持连接超时时间
    keepalive_timeout  65;
	
	# 虚拟主机, vhost
    server {
    	# 监听端口号
        listen       80;
        # 域名或主机名
        server_name  localhost;
		
		# 子路径
        location / {
        	# 根目录  相对路径
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
    }
}
3.3 service_name
# 配置多个域名或主机名
service_name 域名1 域名2;

# 通配符匹配
service_name *.xxx.com   # 匹配以什么结尾的域名

service_name www.xxx.*   # 匹配以什么开头的域名

# 正则匹配
service_name ~^[0-9]+\.xxx\.com$;
4 反向代理
4.1 基本配置
server {
    listen       80;
    server_name  localhost;

    location / {
    	# proxy_pass 代理服务地址
    	proxy_pass http://www.baidu.com;
    }
    
}

4.2 负载均衡配置
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	
	# 配置多个服务
	# 轮询策略
	upstream httpds {
		# weight配置轮询的权重,down下线,backup备用
        server 192.168.126.139:80 weight=7 down;
        server 192.168.126.140:80 weight=2;
        server 192.168.126.140:80 weight=1 backup;
	}

    server {
        listen       80;
        server_name  localhost;
		
        location / {
        	# 使用upstream中服务
            proxy_pass http://httpds;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
    }
}

# 其他负载均衡策略,无法动态上下线,基本用不到
ip_hash  # ip定向用户转发,可能流量倾斜
least_conn   # 最少连接访问,可能后端机器性能本来就不一样
url_hash  # url定向流量转发,适用于固定资源不在同一台服务器时
fair   # 后端响应时间,可能造成流量倾斜

5 动静分离
5.1 配置
server {
        listen       80;
        server_name  localhost;
		
        location / {
            proxy_pass http://xxx;
        }
        
        location /css {
        	# 去html目录下css下找静态资源,需要提前把静态资源放到html目录下
            root   html;
            index  index.html index.htm;
        }
        
        location ~*/(css|js|img) {
        	# 去html目录下找静态资源
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
} 

5.2 url rewrite
server {
        listen       80;
        server_name  localhost;
		
        location / {
        	# 重写url   正则(入参使用括号)  替代内容,$1第一个入参  flag标记
        	# flag: break匹配到不会继续往下匹配,last匹配完后会继续匹配,redirect临时重定向302,permanent永久重定向301,浏览器会显示跳转的地址
        	rewrite ^([0-9]+.html)$  /index.jsp?pageNum=$1  break;
            proxy_pass http://xxx;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
} 

6 referers检测
# 防盗链
server {
        listen       80;
        server_name  localhost;
		
        location / {
        	# 检测referes, none不存在
        	valid_referers none | 192.168.126.139;
        	if ($invalid_referer){
                return 403;
        	}
        	
            proxy_pass http://xxx;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
} 

7 高可用
7.1 keepalived
# 可完成nginx主备存活判断

# 安装
yum install -y keepalived

8 SSL配置
8.1 配置
server {
    listen 443 ssl;
    server_name xx.com;
    
    ssl_certificate  /data/cert/server.crt;   # 证书crt文件位置;
    ssl_certificate_key   /data/cert/server.key;   # 证书key文件位置
}