文章目录
nginx.conf配置结构
include指定 分文件放置路径
include /etc/nginx/conf.d/*.conf;
分文件内容
切割日志 -手动切割
切割日志
1.创建 cut_my_log.sh
#!/bin/bash
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
#向Nginx主进程发送信号,用于重新打开日志文件
kill -USR1 `cat $PID`
- 赋权限
chmod +x cut_my_log.sh
- 手动切割
./cut_my_log.sh
切割日志 -定时切割
** 博客 https://www.cnblogs.com/leechenxiang/p/7110382.html**
发布静态资源
代理多个server 资源 -案例
同时代理前端和静态资源 -案例
前端项目 root为路径 路径; /home/foodie-shop
静态项目 root为路径 路径; /imooc/home
静态项目 别名的方式设置路径
别名的方式:
alias为路径
location /xx xx为别名
小总结
root 与 alias 总结
两个效果是一样的
location /imooc {
root /home
}
alias 起一个别名
location /hello {
alias /home/imooc
}
使用Gzip压缩提升请求效率
总结 location的所有匹配规则
空格: 默认匹配规则
location / {
root /home;
}
= : 精准匹配
location = /imooc/img/face1.png {
root /home;
}
~* : 正则表达式 不区分大小写
演示带星 输入路径 ./PNG -> 转换路径:./png
#符合图片的显示
location ~* .(GIF|jpg|png|jpeg) {
root /home;
}
~ : 正则表达式 区分大小写
演示输入路径: ./PNG -> 转换路径:.PNG
#GIF必须大写才能匹配到
location ~ .(GIF|jpg|png|jpeg) {
root /home;
}
^~ 以某个字符路径开头请求
location ^~ /imooc/img {
root /home;
}
DNS域名解析 (本地配置域名 )
使用 SwitchHosts模拟本地域名解析访问(本地配置域名)
window:C:\Windows\System32\drivers\etc\hosts
如果提示没有权限: 看看hosts是否是只读 , 取消只读然后重新启动 SwitchHosts
Nginx进阶与实战
Nginx跨域
Nginx解决跨域
在这里插入代码片nginx设置跨域
在相关server模块添加如下配置:
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
在nginx中配置静态资源防盗链
imooc配置,使用这个配置出现主站403
让静态资源只能在设置的域名下可执行否则返回403 错误
#对源站点验证
valid_referers *.linbookz.com;
#非法引入会进入下方判断
if ($invalid_referer) {
return 403;
}
Nginx的模块化设计解析
Nginx的集群负载均衡解析
Nginx集群负载均衡
四层负载均衡
七层负载均衡
DNS 地域负载均衡
OSI网络模型
Nginx构建tomcat集群
upstream tomcats{。。。。。}就是一个集群
proxy_pass 是通过的意思
使用JMeter测试单节点与集群的并发异常率
下载
负载均衡之轮训
负载均衡之轮训
● 负载均衡——轮询
● 优点
● 负载均衡——轮询
三台服务器,按照第一台,第二台,第三台,依次循环
负载均衡中最简单的;
也是默认的一种机制;
Nginx不会去管服务器的硬件性质,只会将请求平均的分配到每一台集群服务器上;
负载均衡之权重 (加权轮训 weight=xx)
weight 数值越大,权重越大,分配到的服务越多。
负载均衡策略
加权轮询:
upstream tomcats{
server ip:code weight =1;
server ip:code weight =3;
}
数值越大,权重越大,分配到的服务越多。
upstream的指令参数
● upstream之指令参数 网址:http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html
- upstream 指令参数
- max_counts 限制服务器连接的最大链接数,默认为0没有限制.
- slow_start 缓慢的开始,能监控流量。
- down 标识服务器状态标志位down就访问不了了。
- backup 备份的意思主服务器不行了才能轮到它。
- max_fails 最大的失败次数,达到一定的阈值之后就会认为服务器宕机。
- fail_timeout 失败的时间段。
upstream的指令参数 之max_conns
upstream指令参数
max_conns:配置上游服务器最大连接数,默认值为0
# worker进程设置1个,便于测试观察成功的连接数
worker_processes 1;
upstream tomcats {
server 192.168.1.173:8080 max_conns=2;
server 192.168.1.174:8080 max_conns=2;
server 192.168.1.175:8080 max_conns=2;
}
upstream的指令参数 之slow_start
upstream tomcats {
server 192.168.1.173:8080 weight=6 slow_start=60s;
# server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=2;
server 192.168.1.175:8080 weight=2;
}
upstream的指令参数 之dwon
down 标识服务器状态为不可用状态, 配置为down之后,就不可用了
down 用于标记服务节点不可用;
upstream的指令参数 之backup
backup 标识当前服务器节点是备用机,只有在气头的服务器都宕机以后,自己才会加入到集群中,被用户访问到;
注: backup参数不能使用hash和random load balancing中
upstream的指令参数 之max_fails、 fail_timeout
- max_fails:表示失败几次,则标记server已宕机,剔除上游服务。
- fail_timeout: 表示失败的重试时间。
则表示在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。
max_fails=2 fail_timeout=15s
使用Keepalive提高吞吐量
● keepalive 网址:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
-
keepalive: 设置长连接处理的数量
-
proxy_http_version: 设置长连接http版本为1.1 (1.1 版本支持长连接 )
-
proxy_set_header Connetction “” : 清楚connection header信息(请求请求头信息,提高解析请求效率 )
负载均衡之 ip_hash
- ip_hash 可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。
- 使用ip_hash的注意点:
- 不能把后台服务器直接移除,只能标记down
负载均衡原理 - url hash 与 least_conn
负载均衡原理 - url hash
扩展:
假设在某一个业务(相对于某一url来说),这个业务方法的并发量特别大;
就可以将这台服务器的tomcat替换成 nginx,在做一个基于 该ul的集群就可以了
负载均衡原理 - least_conn
源码
upstream tomcats {
# url hash
hash $request_uri;
# 最少连接数
# least_conn
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
}
}
Nginx缓存
nginx控制浏览器缓存
304代表的是缓存,服务端文件文件时间没有变化,则取缓存,(浏览器是会观察文件的最后修改时间)
● expires指令
◆ expires[time] —— 缓存多长时间到期
◆ expires @[time] —— 一天为单位,指定时间点到期,例如 expires @22h30m 到每天的22点30分
◆ expires -[time] ——提前过期 例如 -1h 提前过期,相当于手动清除缓存
◆ expires epoch ——不设置缓存
◆ expires off ——关闭缓存,使用浏览器默认的缓存机制,体现在浏览器方位在headers中没有cache
◆ expires max 好多年,效果类似永不过期
定义:
源码:
location /files {
alias /home/imooc;
# expires 10s;
# expires @22h30m;
# expires -1h;
# expires epoch;
# expires off;
expires max;
}
nginx的反向代理缓存
设置反向代理缓存 定义
- proxy_cache_path /usr/local/resources/nginx-1.16.1/upstream_cache keys_zone=mycache:5mmax_zise=512m inactive=30s use_temp_path=off
- proxy_cache_path 设置缓存路径
- keys_zone 设置共享内存及占用空间大小
- max_size 设置最大缓存大小
- inactive 超时时间,超出此时间则缓存自动清理
- use_temp_path 关闭临时目录
源码:
# proxy_cache_path 设置缓存目录
# keys_zone 设置共享内存以及占用空间大小
# max_size 设置缓存大小
# inactive 超过此时间则被清理
# use_temp_path 临时目录,使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;
location / {
proxy_pass http://tomcats;
# 启用缓存,和keys_zone一致
proxy_cache mycache;
# 针对200和304状态码缓存时间为8小时
proxy_cache_valid 200 304 8h;
}
使用Nginx配置SSL证书提供HTTPS访问
下载SSL证书秘钥
腾讯云官网路径:https://console.cloud.tencent.com/ssl
腾讯云配置https
ssl证书
免费证书只对一级域名有用
1、nginx加载ssl模块 make install
2、监听端口443
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过
1、传输加密和
2、身份认证
保证了传输过程的安全性 。
主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护
将文件上传到 conf同级目录
listen: 433 默认端口
443端口代表https,https在实际用途中很多,苹果app审核等,nginx需要key和ssl证书,以及相关开启配置。
使用Nginx配置HTTPS域名证书(安装)
1. 安装SSL模块
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_ssl_module
make
make install
2. 配置HTTPS
server {
listen 443;
server_name www.linbookz.com;
# 开启ssl
ssl on;
# 配置ssl证书
ssl_certificate linbookz.com_bundle.crt;
# 配置证书秘钥
ssl_certificate_key linbookz.com.key;
# ssl会话cache
ssl_session_cache shared:SSL:1m;
# ssl会话超时时间
ssl_session_timeout 5m;
# 配置加密套件,写法遵循 openssl 标准
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://tomcats/;
index index.html index.htm;
}
}
3. reload nginx
./nginx -s reload
动静分离的那些事儿
总结(案例)
部署Nginx到云端 - 安装Nginx
-
1.去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本
-
2.上传nginx到linux系统
-
3.安装依赖环境
(1)安装gcc环境yum install gcc-c++
(2)安装PCRE库,用于解析正则表达式
``` yum install -y pcre pcre-devel ```
(3)zlib压缩和解压缩依赖,
yum install -y zlib zlib-devel
(4)SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel
-
4.解压,需要注意,解压后得到的是源码,源码需要编译后才能安装
tar -zxvf nginx-1.16.1.tar.gz
-
5.编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nginx -p
-
6.在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件
./configure \n --prefix=/usr/local/nginx \n --pid-path=/var/run/nginx/nginx.pid \n --lock-path=/var/lock/nginx.lock \n --error-log-path=/var/log/nginx/error.log \n --http-log-path=/var/log/nginx/access.log \n --with-http_gzip_static_module \n --http-client-body-temp-path=/var/temp/nginx/client \n --http-proxy-temp-path=/var/temp/nginx/proxy \n --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \n --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \n --http-scgi-temp-path=/var/temp/nginx/scgi
- 注: 代表在命令行中换行,用于提高可读性
- 配置命令:
-
7.make编译
make
-
8.安装
make install
-
9.进入sbin目录启动nginx
./nginx
- 停止:./nginx -s stop
- 重新加载:./nginx -s reload
-
10.打开浏览器,访问虚拟机所处内网ip即可打开nginx默认页面,显示如下便表示安装成功:
注意事项:
1. 如果在云服务器安装,需要开启默认的nginx端口:80
2. 如果在虚拟机安装,需要关闭防火墙
3. 本地win或mac需要关闭防火