时间:2023-01-30 10:34:14 | 栏目:Nginx | 点击:次
1、设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为 nobodyuser root;
2、worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行。worker_processes 1;
3、nginx日志级别 debug |info |notice |warn | error | crit 丨 alert | emerg
,错误级别从左到右越来越大
#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;
4、设置nginx进程 pid
pid logs/nginx.pid;
5、设置工作模式
events { # 默认使用epolL use epoll; # 每个worker允许连接的客户端最大连接数 worker_connections 1024; }
6、http 是指令块,针对http网络传输的一些指令配置
http { }
7、include引入外部配置,提高可读性,避免单个配置文件过大
include mime.types;
8、设定日志格式, main 为定义的格式名称,如此 access_log就可以直接使用这个变量了
#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main;
参数名 | 参数意义 |
---|---|
$remote_addr | 客户端ip |
$remote_user | 远程客户端用户名,一般为:‘-’ |
$time_local | 时间和时区 |
$request | 请求的url以及method |
$status | 响应的状态码 |
$body_bytes_sent | 响应客户端内容字节数 |
$http_referer | 记录用户从哪个链接跳过来 |
$http_user_agent | 用户所使用的代理,一般来时都是浏览器 |
$http_x_forwarded_for | 通过代理服务器来记录客户端的ip |
9、sendfile 使用高效文件传输,提升传输性能。启用后才能使用 tcp_nopush,是指当数据表累积一定大小后才发送,提高了效率。
sendfile on; tcp_nopush on;
10、keepalive_timeout设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。
#keepalive_timeout 0; keepalive_timeout 65;
11、gzip 启用压缩,html/js/css压缩后传输会更快
#gzip on;
12、server 可以在 http指令块中设置多个虚拟主机
server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
手动切割
现有的日志都会存在 access.log 文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员,查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天 为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天 或者 每小时 对日志切割一下。
具体步骤如下∶
1、到nginx的sbin目录,创建一个shell可执行文件∶ cut_my_log.sh,内容为∶
#!/bin/ bash L0G_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`
2、为 cut_my_log.sh 添加可执行的权限∶
chmod +x cut_my_log.sh
测试日志切割后的结果∶
./cut_my_Log.sh
定时切割:使用定时任务
1、安装定时任务∶
yum install crontabs
2、crontab -e 编辑并且添加一行新的任务∶
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
3、重启定时任务∶
service crond restart
● 附∶常用定时任务命令∶
service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置 crontab -e //编辑任务 crontab -l //查看任务列表
定时任务表达式∶
Cron表达式分为5或6个域,每个域代表一个含义,如下所示∶
取值范围 | 分 | 时 | 日 | 月 | 星期几 | 年(可选) |
---|---|---|---|---|---|---|
取值范围 | 0-59 | 0-23 | 1-31 | 1-12 | 1-7 | 2020/2021/2022/... |
常用表达式∶
*/1 * * * *
59 23 * * *
0 1 * * *
假如服务器路径为∶/home/imooc/files/img/face.png
配置的时候为∶
location /imooc { root /home }
用户访问的时候请求为∶url:port/imooc/files/img/face.png
配置的时候为∶
location /hello { alias /home/imooc }
用户访问的时候请求为∶url:port/hello/files/img/face.png,如此相当于为目录 imooc做一个自定义的别名。
# 开启gzip压缩功能,目的∶提高传输效率,节约带宽 gzip on; # 限制最小压缩,小于1字节文件不会压缩 gzip_min_length 1; # 定义压缩的级别(压缩比,文件越大,压缩越多,但是cpu使用会越多) gzip_comp_level 3; # 定义压缩文件的类型 gzip_types text/plain application/javascript application/x-javascript text/css applicatio n/xmL text/javascript application/x-httpd-php image/jpeg image/gif image/png application/jison;
空格∶默认匹配,普通匹配
location / { root /home }
=∶精确匹配。
location = /imooc/img/face1.png { root /home; }
~*∶匹配正则表达式,不区分大小写
# 符合图片的显示 location ~* \.(GIF|jpg|png|jpeg){ root /home; }
~∶匹配正则表达式,区分大小写
# GIF必须大写才能匹配到 location ~ \.(GIF|jpg|png|jpeg){ root /home; }
^~∶以某个字符路径开头
location ^~ /imooc/img { root /home; }
下载SwitchHosts工具添加配置:192.168.170.129 www.baidu.com,或者找到本机的hosts文件,添加这行配置,本地域名就模拟好了,如下:
#允许跨域请求的域,*代表所有 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中做如下配置:
#对源站点验证 valid_referers *.imooc.com; #非法引入会进入下方判断 if ($invalid_referer) { return 404; }
OSI 网络模型
在讲到Nginx负载均衡的时候,其实Nginx是七层负载均衡,后续我们还会涉及到LVS,是四层负载均衡,七层和四层是什么概念呢?这就必须提到网络模型。网络模型是计算机网络基础的一部分内容,一般大学计算机系都会讲到此知识点,并且会作为考点;其实在面试过程中有时候也会被问到。所以我们还是有必要来复习或学习一下这块的一些重要知识的。
网络模型就是 OSI(0pen System Interconnect),意思为 开放网络互联 ,是由国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版的,他是一种网络互联模型,也是一种规范。
网络模型分为七层,也就是当用户发起请求到服务器接收,会历经七道工序,或者说用户利用互联网发送消息给另一个用户,也会历经七道工序。这七层可以分为如下∶
层级 | 名称 | 说明 |
---|---|---|
第七层 | 应用层 | 与用户行为交互 |
第六层 | 表示层 | 定义数据格式以及数据加密 |
第五层 | 会话层 | 创建、管理以及销毁会话 |
第四层 | 传输层 | 创建、管理请求端到响应端(端到端)的连接 |
第三层 | 网络层 | 请求端的IP地址 |
第二层 | 数据链路层 | 提供介质访问与链路管理 |
第一层 | 物理层 | 传输介质,物理媒介 |
以上七层每层可以与上下相邻层进行通信。每一层都是非常复杂的,我们不在这里深究,我们以举例的形式来阐述每一层是干嘛的。
负载均衡策略:
轮询:轮询是Nginx负载均衡的默认策略。使用场景:针对每个服务器硬件配置一样。
加权轮询(weight):根据设置的权重值去分配处理请求的数量。使用场景:服务器硬件配置有差异,让好的服务器去处理更多的请求。
ip_hash:对请求用户的IP地址进行hash运算后得到的值,再对服务器数量进行取模运算。让同一用户的请求落到固定的服务器上。这样就可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。使用ip hash的注意点∶不能把后台服务器直接移除,只能标记 down .
upstream tomcats { ip_hash; server 192.168.1.173:8080; server 192.168.1.174:8080 down; server 192.168.1.175:8080; }
一致性哈希算法:让每台服务器IP的hash值落在哈希环节点上,在用户请求到Nginx时,根据顺时针就近原则落到最近的服务器节点。
url_hash:根据每次请求的url地址,hash后访问到固定的服务器节点。
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; } }
max_conns:限制每台server的连接数,用于保护避免过载,可起到限流作用。测试参考配置如下∶
# 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; }
slow_start:商业版,需要付费。配置参考如下:
upstream tomcats { server 192.168.1.173:8080 weight=6 slow_start=60 server 192.168.1.174:8080 weight=2; server 192.168.1.175:8080 weight=2; }
down、backup
down 用于标记服务节点不可用∶
upstream tomcats { server 192.168.1.173:8080 down; server 192.168.1.174:8080 weight=1; server 192.168.1.175:8080 weight=1; }
表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到
upstream tomcats { server 192.168.1.173:8080 backup; server 192.168.1.174:8080 weight=1; server 192.168.1.175:8080 weight=1; }
注意:backup参数不能使用在 hash 和 random Load balancing 中。
max_fails、fail_timeout
max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。
keepalived
∶ 设置长连接处理的数量
proxy_http_version
∶设置长连接http版本为1.1
proxy_set_header
∶清除connection header信息
upstream tomcats { #server 192.168.1.173:8080 max_fails=2 failtimeout=1s; server 192.168.1.190:8080; #server 192.168.1.174:8080 weight=1; server 192.168.1.175:8080 weight=1;keepalive 32 } server { listen 80; server_name: www.tomcats.com; location / { proxy_pass http://tomcats; proxy_http_version 1.1; proxy_set_header Connection ""; } }
浏览器缓存:加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地
Nginx缓存:
控制浏览器缓存
location /files { alias /home/imooc; # expires 10s; # expires @22h30m; # expires -1h; # expires epoch; # expires off; expires max; }
# 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;
安装SSL模块:要在nginx中配置https,就必须安装ssl模块,也就是∶http_ssl_module
。
1、进入到nginx的解压目录∶ /home/software/nginx-1.16.1
2、新增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
3、编译和安装
make make install
配置HTTPS
1、把ssl证书 *.crt
和私钥*.key
拷贝到/usr/local/nginx/conf
目录中。
2、新增 server 监听 443端口∶
server { listen 443; server_name www.imoocdsp.com; # 开启ssl ssl on; # 配置ssl证书 ssl_certificate 1_www.imoocdsp.com_bundle # 配置证书秘钥 ssl_certificate_key 2_www.imoocdsp.com.key; # ssl会话 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:! ssl_prefer_server_ciphers on; location / { proxy_pass http://tomcats/; index index.html index.htm; } }
3、reload nginx:./nginx -s reload